Voici une astuce pour détecter les fautes de frappes: par exemple une MsgBox qui n'écrit pas !
L'astuce repose sur le fait que VBA ignore la casse du nom des variables.
Si la variable est déclarée dans Dim, le fait de changer en MAJ/min un caractère (e.g. remplacer n par N) est répercuté dans toute la procédure.
La variable mal écrite ne sera pas modifiée.
De plus comme elle n'est pas déclarée dans Dim, un changement Maj/min de cette variable est répercuté à son tour dans toutes les occurrences mal orthographiées.
Faire des tests avec la procédure astuce_fautes jointe ci-dessous.
Je crois que cela marche quelle soit la position dans la procédure de la variable dont le nom est modifié MAJ/min.
Ca marche en Excel 2003 et 2007, et sans doute dans les autres applications Office (à vérifier)
Si vous avez déclaré Option Explicite qui force le typage de TOUTES les variables, en début de la zone d'édition de programme, cette astuce est inutile car vous obtenez une erreur de compilation à la première tentative d'exécution.
En contrepartie, l'écriture est beaucoup plus fastidieuse. Mais les vieux comme moi préfèrent cette solution !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 'Option Explicit ' <<== NE PAS OUBLIER DE METTRE OPTION EN COMMENTAIRE Sub astuce_fautes() ' pour détecter une faute de frappe quand ' la déclaration n'est obligatoire, ' c-à-d quand il n'y a pas Option Explicit ' (par défaut dans Excel 2003), ' changer une lettre du nom de la variable en MAJ ou min ' car VB ne fait pas la différence de casse ! Dim nbfichiersouverts As Integer ' <---- modifier nb par Nb et inversement nbfichiersouverts = 5 ' <=== la casse change en fonction de celle ' de la déclaration Dim ' quand le curseur se déplace ! ' ci-dessous, une faute de frappe (fichier est au singulier) MsgBox "nb fichiers ouverts" & nbfichierouverT ' <=== la casse reste inchangée par rapport à Dim nbfichierouverT = "toto" ' <---- si je modifie la casse ici MsgBox "nbfichierouvert=" & nbfichierouverT nbfichierouverT = 2 ' tous les "nbfichierouvert" sont modifiés ' mais pas les autres ! MsgBox "nbfichierouvert=" & nbfichierouverT ' autres essais sans Dim newtexte = "tata" MsgBox newtexte newtexte = 1 End Sub
Partager