/ / Excel VBA ByRef et ByVal

Excel VBA ByRef et ByVal

Vous pouvez passer des arguments à une procédure (fonction ou sub) par référence ou par valeur. Par défaut, Excel VBA passe les arguments par référence. Comme toujours, nous utiliserons un exemple simple pour clarifier les choses.

Placez un bouton de commande sur votre feuille de calcul et ajoutez les lignes de code suivantes:

Dim x As Integer
x = 10

MsgBox Triple(x)
MsgBox x

Le code appelle la fonction Triple. C’est le résultat de la seconde MsgBox qui nous intéresse. Les fonctions doivent être placées dans un module.

1. Ouvrez Visual Basic Editor et cliquez sur Insérer, Module.

2. Ajoutez les lignes de code suivantes:

Function Triple(ByRef x As Integer) As Integer

x = x * 3
Triple = x

End Function

Résultat lorsque vous cliquez sur le bouton de commande de la feuille:

Résultat ByRef

Résultat ByRef

3. Remplacez ByRef par ByVal.

Function Triple(ByVal x As Integer) As Integer

x = x * 3
Triple = x

End Function

Résultat lorsque vous cliquez sur le bouton de commande de la feuille:

Résultat ByVal

Résultat ByVal

Explication: Lorsque nous transmettons des arguments par référence, nous référons à la valeur d'origine. La valeur de x (la valeur d'origine) est modifiée dans la fonction. En conséquence, le second MsgBox affiche une valeur de 30. Lorsque nous transmettons des arguments par valeur, nous transmettons une copie à la fonction. La valeur d'origine n'est pas modifiée. En conséquence, le deuxième MsgBox affiche une valeur de 10 (la valeur d'origine).

Lisez aussi: