1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Option Explicit
Sub Test()
Dim Donnee As Integer
Donnee = 50
MaProcedure_1 Donnee
Debug.Print Donnee
MaProcedure_2 Donnee
Debug.Print Donnee
MaProcedure_3 Donnee
Debug.Print Donnee
End Sub
'Passe la référence en argument.
'/// l'argument passé par référence est directement affecté
'/// on a donc 50 * 4 = 200
Sub MaProcedure_1(ByRef x As Integer)
x = x * 4
End Sub
'Passe la valeur en argument.
'/// l'argument passé par valeur reste lui même
'/// ByVal crée une copie de l'argument sans l'affecter
'/// on a donc argument = argument (200 = 200)
'/// l'argument, suite à MaProcedure_1 est = 200
Sub MaProcedure_2(ByVal y As Integer)
y = y * 5
End Sub
'ByRef est la valeur par défaut si non spécifiée.
'/// sans précision, l'argument est interprété comme ByRef
'/// et est donc directement affecté
'/// suite à MaProcedure_2, l'argument est = 200
'/// on a donc argument * 2 soit 200 * 2 =400
Sub MaProcedure_3(z As Integer)
z = z * 2
End Sub
'REMARQUE
' on devrait user plutôt du terme paramètre que du terme argument
' Les procédures, dans le cas présent, demandent 1 argument
' Le traitement (Sub Test) passe un paramètre (Donnee) aux procédures
' Il y a donc un distinguo entre argument et paramètre |
Partager