IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)



Qu'est-ce que ByVal et ByRef ?
Les arguments d'une fonction ou d'une procédure peuvent être passés de deux façons différentes : par valeur ou par référence. Si un argument est précédé de Byval, il est passé par valeur, et s'il est précédé de ByRef, ou de ni l'un ni l'autre, il est passé par référence.
Passage par valeur (ByVal)

Consiste à passer la valeur de l'argument à la procédure, et non son adresse. La procédure utilise alors une copie de la variable. La valeur de la variable ne peut pas être modifiée par la procédure.
Passage par référence (ByRef)

Ici c'est l'adresse de la variable qui est passée à la procédure. La variable peut donc être modifiée par la procédure.
Private Sub Echange(ByVal a As Integer, ByVal b As Integer)

Dim temp As Integer
temp = a
a = b
b = temp

End Sub

Private Sub Echange2(a As Integer, b As Integer)

Dim temp As Integer
temp = a
a = b
b = temp
End Sub

Private Sub Test()

x = 5
y = 3
Echange x, y
MsgBox x & " " & y   'affiche "5 3", les valeurs n'ont pas été modifiées par la procédure

Echange2 x, y
MsgBox x & " " & y   'affiche "3 5", parce que les valeurs ont été modifiées

End Sub

Comment insérer un saut de ligne ?
Le saut de ligne est représenté par la constante vbCrLf. Exemple pour afficher un message sur 2 lignes avec MsgBox :
MsgBox "Opération terminée." & vbCrLf & "Cliquez sur OK."

Comment convertir une chaîne de caractères en date ?
Pour convertir une expression en date, vous pouvez utiliser la fonction CDate(expression). Si l'expression à convertir n'est pas une date correcte d'après le format indiqué dans les paramètres régionaux de Windows, CDate essaie d'utiliser un autre format. Si la fonction ne reussit pas à faire la conversion, elle génère une erreur de type "Type Mismatch". Dans l'exemple ci-dessous, une date est demandée à l'utilisateur. Sa réponse est alors convertie en date.
Dim Rep As String, DateDeNaissance As Date
Do
    Rep = InputBox("Quelle est votre date de naissance ?")
Loop While (Not IsDate(Rep))
DateDeNaissance = CDate(Rep)

Comment accéder à une procédure, fonction ou variable déclarée dans une form, à partir d'un autre module ?
Pour qu'une fonction, procédure, ou variable soit accessible à partir d'un autre module que celui où elle est déclarée, sa déclaration doit débuter par le mot clé Public. Voici les déclarations d'une variable de type long et d'une procédure publiques dans la form nommée Form1 :
Public Variable As Long

Public Sub Afficher()
    'code
End Sub
Et voici comment les appeler depuis un autre module :
Form1.Variable = 3
Form1.Afficher

Comment faire une procédure ou une fonction qui a un ou plusieurs paramètres optionnels ?
Un paramètre est optionnel s'il est précédé du mot clé Optional. Les paramètres placés après doivent être également optionnels. Vous pouvez également spécifier une valeur par défaut :
Private Sub Affiche(Optional x As Long=10)

End Sub
Pour les paramètres de type Variant et sans valeur par défaut, vous avez le moyen de savoir si une valeur a été spécifiée lors de l'appel en utilisant IsMissing :
Private Sub Affiche(Optional x As Variant)

If IsMissing(x) Then
    'pas de valeur spécifiée
Else
    'une valeur a été spécifiée pour x
End If

End Sub

Comment passer un tableau en paramètres ?
L'exemple suivant affiche les éléments d'un tableau :
Private Sub AfficheElements(t() As Long)

Dim i As Long
For i = LBound(t) To UBound(t)
    MsgBox t(i)
Next

End Sub

Private Sub Form_Load()

Dim t(1 To 3) As Long
t(1) = 1
t(2) = 4
t(3) = 5
AfficheElements t()

End Sub

Comment faire une fonction qui renvoie un résultat ?
La fonction suivante renvoie un booléen : Vrai si le nombre reçu en paramètre est pair, et faux sinon.
Private Function EstPaire(x As Long) As Boolean
    EstPaire = (x Mod 2 = 0)
End Function

Comment rechercher une chaîne de caractères dans une autre ?
Instr(p,ch1,ch2) recherche la chaîne ch2 dans ch1 à partir de la position p. Si ch2 est trouvée, la valeur renvoyée est la position de son premier caractère dans ch1, sinon la fonction renvoie 0.
pos = InStr(4, "Nous sommes au mois de Juillet.", "Juillet")    'renvoie 24
pos = InStr(27, "Nous sommes au mois de Juillet.", "Juillet")   'renvoie 0

Comment récupérer la ligne de commande passée à l'exécutable ?
Elle vous est renvoyée par la fonction Command() sous la forme d'une chaîne de caractères. Pour transformer cette chaîne en un tableau dont chaque élèment correspond à un argument, utilisez la fonction Split() :
Dim args() As String
args = Split(Command(), " ")

Comment ajouter des heures, des jours ou des mois à une date ?
Vous pouvez utiliser la fonction DateAdd (intervalle, nombre, date)
intervalle : chaîne de caractères indiquant l'intervalle de temps que vous voulez ajouter ("m" : mois, "d" : jour, "yyyy" : année, etc...)
nombre : nombre d'intervalles que vous voulez ajouter
valeur renvoyée : une date contenant le résultat (la date passée en argument n'est pas modifiée)
Quelques exemples :
today = Now()

DateAdd("m", 3, today)   'renvoie today + 3 mois
DateAdd("d", 2, today)   'renvoie today + 2 jours
DateAdd("ww", 1, today)  'renvoie today + 1 semaine
DateAdd("h", 1, today)   'renvoie today + 1 heure


Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduit en français ici.
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.