VBA-Débogage

Comment utiliser les outils de débogage


Étape importante s'il en est, et pas la plus facile, car quand tout se passe bien on n'y pense guère, mais quand une erreur s'est glissée sournoisement, on a vite fait de s'agacer.


Personnellement, la première chose que je fais est de compiler le code. Ce n'est pas nécessaire pour le fonctionnement de la macro, le langage VBA étant "interprété", à l'inverse du C# par exemple.
La fonction de compilation existant tout de même (sans impact sur les performances (soit-dit en passant) je m'en sers en tout premier lieu, car la moindre erreur est détectée à la compilation.
Cette compilation va s'arrêter dès la première erreur pour qu'on puisse y remédier.

Comment compiler ? C'est la première ligne du menu DÉBOGAGE.
Lorsque la compilation se termine "sans erreur" cette ligne devient grisée et tout le monde est content, car ça signifie qu'on n'a pas fait d'erreurs. Dès qu'on va toucher à une ligne du code, cette ligne redevient accessible, car le code ne correspond plus à ce qui a été compilé.

Il est toutefois possible qu'il reste des erreurs dans la logique du programme ou des erreurs à l'exécution.
Rappel : En utilisant "Option Explicit" on se dédouane déjà des erreurs de définition des variables, et des fautes de frappe dans les noms de variables, mais ce n'est pas la seule source d'erreur possible.


Le mode pas à pas

Une très bonne façon de parcourir tout le code est l'exécution pas à pas.
Positionner le curseur au début d'une SUB et appuyer sur la touche F8. à chaque pression sur cette touche le programme va exécuter une ligne du code (d'où le non pas à pas).

De cette façon, il est aisé de suivre le cheminement du code, en vérifier la logique et corriger les erreurs. Dès la pression de F8 la première ligne se surligne en JAUNE.

Les lignes de déclaration des variables sont ignorées. On va ainsi jusqu'à la fin de la SUB. Si la SUB à déboguer fait appel à une autre SUB, le pas à pas va "sauter" dans la sub concernée et continuer le pas à pas.

Possibilité de voir ce que contient une variable pendant le pas à pas :

Pendant le déplacement de la ligne jaune de surlignage, il suffit de mettre le curseur sur la variable dont on souhaite connaitre l'information (pour voir si la logique ou le calcul est correct), par exemple une variable qui s'incrémente à chaque tour change bel et bien de valeur à chaque tout. Je vous dépose une petite animation qui sera plus explicite :


Animation survol de variable dans pas à pas

À chaque pression de F8 on passe une instruction, le programme attend la pression de F8 pour passer à la suivante.
En glissant le curseur (sans cliquer) au survol de la variable la valeur de cette dernière s'affiche dans une info-bulle, on peut constater l'évolution de cette variable pour vérifier les actions du programme, dans un but de débogage.


Le point d'arrêt

Positionner un point d'arrêt se fait en cliquant dans la marge devant une instruction, ou en positionnant le curseur au début d'une instruction et en appuyant sur la touche F9.

Un point brun se dépose dans la marge et la ligne concernée se surligne en brun.

Animation points d'arrêt

Déposer un point d'arrêt revient à dire au programme de s'exécuter pour toute la partie avant le point d'arrêt et de s'arrêter (comme son nom le laisse deviner) à l'endroit choisi.
À partir de ce point d'arrêt si on clique sur continuer (la flèche verte dans la barre d'outils) ou la touche F5, le programme saute jusqu'au prochain point d'arrêt s'il y en a un ou si c'est une boucle, fait la boucle et s'arrête à nouveau sur le point d'arrêt.8
Ou bine on peut passer en mode pas à pas quand ce point d'arrêt est atteint et continuer avec F8, un appui sur F5 stoppe le pas à pas et saute au prochain point d'arrêt.
Pour effacer tous les points d’arrêts positionnés: (Ctrl+Maj+F9).

Déposer un ESPION

Rien à craindre de la part de 007 dans ce cas d'espionnage on reste dans note code VBA.

Menu Débogage >> Ajouter un espion ou cliquer sur l'icône "lunettes" et cette fenêtre apparait :

Ajouter ESPION

Dans le nom de l'expression, vous entrez le nom de la variable à espionner, et en lançant par exemple le pas à pas vous verrez apparaître le signe plus + devant le nom dans la fenêtre ESPION en bas. Voici une vidéo du déroulement :

Animation de l'espion

Vous remarquez qu'à l'avancement les variables prennent les valeurs du point saisi à l'écran d'AutoCAD et en cliquant sur le signe plus "+" il est possible de voir les valeurs du tableau de points. 

Pour supprimer un espion, cliquer sur son nom, puis bouton droit et menu supprimer un espion


La fenêtre EXÉCUTION

Menu Affichage ou icône "feuille point exclamation rouge" :

Fenêtre exécution

Dans cette fenêtre il est possible de poser une question et d'en avoir tout de suite la réponse !
Commencez la ligne par un point d'interrogation "?" suivi de la syntaxe de la question, par exemple : ? thisdrawing.path, étonnant, non ?

Si la ligne Debug.Print est utilisée dans le code, la valeur de la variable s'écrira dans cette fenêtre lors du lancement du programme, c'est plus "propre" que de mettre des "msgbox" pour constater les valeurs en cours d'exécution.


Ça y est, c'est fini, avec ces outils le débogage peut commencer, ça facilite la tâche assurément, reste tout de même que ce moment du débogage n'est pas le meilleur moment, quand on tombe sur un os, il faut être patient et le ronger jusqu'à ce qu'il ne soit plus gênant.

Il ne faut pas oublier de retirer les point d'arrêt une fois que c'est terminé, les lignes Debug.Print ne gênent pas l'exécution du code, mais elles deviennent inutiles, donc on peut les supprimer aussi.