Les procédures et les parenthèses
Lors de l'appel d'une fonction Function, vous entrez la fonction suivi des arguments entre parenthèses :
fonction(argument)
Lors de l'appel d'une procédure Sub, il peut être tentant d'ajouter aussi des parenthèses par habitude ou par erreur et cela fonctionne dans la plupart des cas lorsqu'il n'y a qu'un seul argument, mais parfois vous vous heurterez à des erreurs qui sembleront incompréhensibles ...
Exemple simple
Dans cet exemple, la procédure incrémente la variable passée en argument :
Sub incrementer(valeur)
valeur = valeur + 1
End Sub
Sub test()
'Cas 1
valeur = 5
incrementer valeur
MsgBox valeur 'Renvoie 6
'Cas 2
valeur = 5
incrementer (valeur)
MsgBox valeur 'Renvoie 5
End Sub
Dans le premier cas, ça fonctionne très bien, la variable valeur a augmenté de 1, mais dans le second cas avec parenthèses, la variable valeur reste inchangée ... Pourquoi ?
Rappelez-vous que lorsque rien n'est précisé, les arguments sont de type ByRef, c'est donc la référence vers la valeur qui est transmise, ce qui permet donc ici de modifier la variable valeur.
Dans le premier cas, la variable est passée directement en argument, cela fonctionne donc correctement :
incrementer valeur
Dans le second cas, la variable n'est pas passée directement en argument ... Excel doit d'abord calculer le résultat du contenu entre parenthèses, ici 5, et va passer ensuite ce résultat comme argument :
incrementer (valeur)
Au lieu de passer la référence vers la variable valeur, c'est la valeur 5 qui est passée en argument, ce qui ne modifie donc pas la variable valeur.