Passage par référence
Par défaut, un argument est passé par référence comme dans la signature : Sub mySub(argA As string)
.
Il est possible de le préciser explicitement avec le mot clé "byRef" et c'est une bonne pratique : Sub mySub(byRef argA As string)
Lors d'un passage par référence, si la valeur d'un argument est modifiée, la variable sous-jacente l'est aussi.
Sub mySub(byRef argA As string)
argA = "Bye !"
End Sub
Sub Sample()
Dim X As String
X = "Hello !"
mySub X
' Passage par référence.
MsgBox X
' Affiche "Bye !", la valeur de X est modifiée dans "mySub".
End Sub
Passage par valeur avec un argument byRef
Ponctuellement, nous souhaitons passer la variable, mais nous ne souhaitons pas que sa valeur soit modifiée.
Nous voulons passer une variable par valeur alors que l'argument créera une référence.
Il suffit lors de l'appel à la procédure, de mettre l'argument entre parenthèses.
Sub Sample()
Dim X As String
X = "Hello !"
mySub (X)
' Passage par valeur, des parenthèses décorent la variable.
MsgBox X
' Affiche "Hello !", la valeur de X n'est pas modifiée dans "mySub".
End Sub
Passage de fait par valeur
Lorsque vous passer une expression comme argument, les variables qui la composent, ne seront pas modifiées.
C'est le résultat qui est passé en argument et non pas les variables.
Sub mySub(byRef argA As Byte)
argA = 10
End Sub
Sub Sample()
Dim X As Byte
X = 1
mySub X + 20
' C'est la valeur 21 qui est passée à la procédure, pas la variable X.
MsgBox X
' Affiche 1, la valeur de X n'est pas modifiée dans "mySub".
End Sub
Achetez mon ouvrage !
Mon PDF « Créer un planning perpétuel sur Microsoft Excel sans macro » est disponible à la vente.
Pour plus d’informations, rendez-vous sur la page dédiée.