Vous pouvez passer des arguments à une procédure (fonction ou sous) par référence ou par valeur. Par défaut, Excel VBA transmet 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 deuxième MsgBox qui nous intéresse. Les fonctions doivent être placées dans un module.
1. Ouvrez l’éditeur Visual Basic 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 sur la feuille:
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 sur la feuille:
Explication: Lorsque vous passez des arguments par référence, nous référençons la valeur d’origine. La valeur
de x (la valeur d’origine) est modifiée dans la fonction. Par conséquent, le deuxième MsgBox affiche une valeur de 30. Lors du passage d’arguments par valeur, nous transmettons une copie à la fonction. La valeur d’origine n’est pas modifiée. Par conséquent, la deuxième MsgBox affiche une valeur de 10 (la valeur d’origine).