Argument byRef mais passage par valeur

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.