Non, ici les parenthèses ne sont pas utiles (quoique, on verra quelques lignes plus bas)
En fait, quand on appelle une procédure (ou une méthode) qui ne renvoie aucune valeur, et qu'on lui passe des paramètres, il n'y a pas à mettre les parenthèses
Ex :
Sub Appel(V As Double)
'...
End Sub
Sub Test()
Dim D as Double
Appel D
End Sub
Mais si on appelle une fonction (donc une procédure qui renvoie une valeur) et qu'on lui passe des paramètres, ceux-ci doivent être placés entre parenthèses
Ex :
Function Appel(V As Double) As Double
'...
End Function
Sub Test()
Dim D as Double, F as Double
F = Appel(D)
End Sub
Maintenant, petite astuce. Quelquefois, vous voulez appeler la procédure du haut, qui attend un argument Double et dans votre procédure appelante, votre variable est d'un autre type, disons Long. Ca donnera ça :
Sub Appel(V As Double)
'...
End Sub
Sub Test()
Dim D as Long
Appel D
End Sub
Ecrit comme ceci votre programme vous renverra une erreur de compilation, parce que V est un argument par référence, il attend donc une variable Double. La parade à cela pourrait être d'écrire :
Sub Test()
Dim D as Long
Appel Cdbl(D)
End Sub
ou encore plus simplement
Sub Test()
Dim D as Long
Appel (D)
End Sub
On constate que le simple fait de mettre D entre parenthèses rend le transtypage automatique, ou plus exactement, il transmet le paramètre par valeur et non plus par référence, comme l'indique la déclaration de la procédure Appel.
ça marche aussi avec une fonction, en doublant les parenthèses alors :
Function Appel(V As Double) As Double
Appel = V - 3.5
End Function
Sub Test()
Dim D As Long, F As Double
F = Appel((D))
End Sub
Attention toutefois aux effets indésirables : si une variable est passée par référence à une procédure, ça peut être pour accélerer le traitement (parce que ça va plus vite que quand on passe l'argument ByVal), mais ça peut être aussi parce qu'on applique un certain traitement à la variable D définie dans Test, donc qu'on s'attend à ce que celle-ci nous revienne modifiée.
Bon, en général, c'est nous qui écrivons nos macros, nous sommes supposés savoir ce que nous faisons. C'est pourquoi dans le cas ci-dessus, je me simplifierai bien la vie en écrivant directement :
Function Appel(ByVal V As Double) As Double
Appel = V - 3.5
End Function
Mais beaucoup de méthodes intégrées de VBA attendent des arguments par référence, alors l'astuce ci-dessus pourra peut-être vous simplifier la vie un jour, moi ça m'est déjà arrivé.
Ceci dit, pour conclure, lorsqu'on envoie une variable à une autre procédure pour la modifier (comme dans l'exemple 1), je recommanderai plutôt l'écriture sous forme de fonction, comme dans mon deuxième exemple, et alors je pourrai écrire plus simplement :
Function Appel(ByVal V As Double) As Double
'...
End Function
Sub Test()
Dim D as Long, F as Double
F = Appel(D)
End Sub
De plus mon argument D est passé ByVal, il n'y a plus d'erreur à craindre, et le résultat est récupéré dans une variable (F) du bon type cette fois.
Message édité par: Ti_, à: 25/04/2005 22:11