par , 07/08/2018 à 08h02 (4271 Affichages)
Salut.
Sur le forum, je rencontre beaucoup de questions remontant des problèmes liés à la non-déclaration obligatoire des variables... VBA est très permissif de nature, c'est le moins que l'on puisse dire, et il me semble utile de placer certains garde-fous pour éviter les erreurs et les pertes de temps.
Voici un code trouvé dans une discussion
1 2 3 4 5 6 7 8 9 10 11
| Sub test2()
Dim a As Double
Dim vYear
vYear = "2018"
a = Application.WorksheetFunction.SumIf(Range("B2", Range("B2").End(xlDown)), intYear & "*", Range("L2", Range("L2").End(xlDown)))
MsgBox a
End Sub |
L'auteur du post s'étonne que a vaille 0. Mais le problème qu'il rencontre est qu'il affecte 2018 à vYear puis qu'il utilise intYear qui ... est vide!

Résoudre ce problème ponctuel est simple ici car il n'y a quasi pas de code. Dans un code plus fourni, les heures perdues sur un problème pareil peuvent être nombreuses.
EUREKÂ... Il existe une solution. Forcer le VBE (visual Basic Editor) à nous obliger à déclarer nos variables. Qui plus est, la solution est SIMPLISSIME! Il suffit de placer la ligne Option Explicit en début de module...

Dès lors, si le code utilise une variable non déclarée, VBA nous en informe et refuse de démarrer le code...

Super, non?
Pour garantir que chaque nouveau module possèdera cette ligne Option Explicit, il suffit de modifier les options de l'éditeur VBE.

Attention: Les modules existants ne sont pas impactés par cette modification des options...
Dans mes prochains billets sur les variables, je vous parlerai du typage des variables, de la portée des variables, ...
J'en reparle encore dans ce billet, histoire de bien enfoncer le clou...
Bonne lecture et ... bon code