Passer au contenu

Dépanner une macro écrite en VBA

Utilisez les outils intégrés à office pour traquer les erreurs dans vos macro-instructions.

Une macro de plus de dix lignes qui fonctionne du premier coup, ça n’existe pas ! Comme tout langage de programmation évolué, VBA vous offre plusieurs outils permettant de contrôler un programme en cours d’exécution afin d’y repérer les anomalies. En voici quelques-uns, adaptables à tous les logiciels Office.

Imposez la déclaration des variables

Le VBA a gardé de son ancêtre GWBasic une mauvaise habitude : la possibilité d’utiliser des variables sans déclaration préalable. Une pseudo-facilité qui est un piège. En effet, nous supposons que, dans votre macro, vous utilisez une variable Compteur. Si, quelque part dans votre programme, vous l’appelez Compteurs (au pluriel), VBA ne vous signale aucune erreur et crée une nouvelle variable à laquelle il donne la valeur 0 ! Voilà une erreur que vous aurez bien du mal à localiser. Pour éviter cela, ajoutez systématiquement en tête de votre listing (avant toute instruction Sub) la directive Option Explicit et utilisez l’instruction Dim pour déclarer vos variables. Toute tentative d’utilisation d’une variable non déclarée donnera lieu à une erreur d’exécution. Attention à une clause souvent ignorée : Dim A, B as Double ne déclare que la variable A comme type Double (B est alors de type Variant). Pour que les deux variables soient de type Double, écrivez Dim A as Double, B as Double.

Insérez un point d’arrêt

Si une macro ne fonctionne pas comme prévu, vous pouvez interrompre son exécution en un point précis, puis examiner le contenu des variables et l’aspect de la feuille de calcul. Pour cela, dans le listing, faites un clic gauche juste à gauche de l’instruction où l’exécution doit s’interrompre. La ligne se colore en rouge. Vous pouvez placer plusieurs points d’arrêt dans ce même programme. Lancez alors le programme : il s’interrompt au premier point d’arrêt. Placez alors le pointeur sur une variable : son contenu s’affiche dans une infobulle. Vous pouvez ensuite poursuivre l’exécution (F5) ou réinitialiser le programme.

Lancez la macro en pas à pas

La macro donne des résultats inattendus ? Faites-la s’arrêter après chaque instruction. Vous pourrez alors examiner la feuille de calcul et le contenu des variables. Pour cela, placez le pointeur en tête de la macro et tapez Maj + F8 (ou passez par le menu Débogage, Pas à pas principal). Une variante de mode est le pas-à-pas détaillé (accessible via la touche F8). Ici, VBA s’arrête après chaque instruction, y compris celles placées dans des procédures externes, ce qui n’était pas le cas avec le pas à pas principal.

Espionnez les variables

Une erreur vient souvent de ce qu’une variable a atteint une valeur interdite. Pour l’éviter, vous allez insérer un espion qui se chargera d’interrompre la macro dès qu’une condition particulière sera remplie. Ainsi, si la variable X représente l’indice d’un tableau de 100 nombres, cette variable ne devrait jamais être supérieure à 100. Pour le vérifier, déroulez le menu Débogage, Ajouter un espion. Dans la fenêtre qui s’affiche, précisez l’expression à analyser (ici X>100), le nom de la procédure et le nom du module, cochez Arrêt si la valeur est vraie puis cliquez par OK. L’espion apparaît dans la fenêtre inférieure. Lancez la macro. Si X dépasse la valeur 100, la macro s’interrompt.

Exploitez la fenêtre d’exécution

Vous voulez savoir si une instruction ou une procédure a été exécutée ? Il existe, pour cela, une solution pratique, quoique souvent méconnue : insérez dans votre listing l’instruction debug.print , par exemple debug.print”A la procédure XYZ, la variable ABC vaut ” & ABC. Quand cette instruction est exécutée, VBA ajoute une ligne dans la fenêtre d’exécution, que vous pouvez ouvrir en tapant Ctrl + G dans l’éditeur VBA. Cette fenêtre n’a que deux défauts : aucune commande ne permet de la “ vider ” en début de programme. De plus sa capacité est limitée (les lignes qui arrivent chassent les plus anciennes). Elle n’en reste pas moins un outil de mise au point fort utile.

🔴 Pour ne manquer aucune actualité de 01net, suivez-nous sur Google Actualités et WhatsApp.


Étienne Oehmichen