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.

Bref, pour vous épargner des erreurs qui peuvent être difficilement compréhensibles, évitez simplement d'ajouter des parenthèses lors de l'appel d'une procédure.