Débogage
L'expérience le prouve, hélas, même la macro la plus soigneusement écrite peut ne pas se comporter comme attendu. Pour obtenir un fonctionnement correct, vous devez découvrir les erreurs de programmation qui s'y cachent. Le processus consistant à découvrir et à corriger des erreurs de programmation est appelé débogage. Toute programmation peut entraîner plusieurs types d'erreurs. La plus courante est l'erreur de syntaxe, qui se produit lors d'une faute de frappe ou du non-respect de la succession de mots d'une instruction ou de plusieurs d'instructions. Une instruction If dépourvue de Then est un cas classique.
L'éditeur VBA est équipé d'une fonction de vérification automatique de la syntaxe qui contrôle la validité d'une ligne de code dès que vous la quittez. S'il détecte une erreur, il affiche une boîte de message tandis que l'éditeur met la ligne erronée en rouge. Ensuite, c'est à vous de corriger l'erreur.
Le second type d'erreur est une erreur d'exécution. Comme l'indique son nom, elle se produit lors de l'exécution du code. Même si la syntaxe est correcte, le programme peut tenter d'effectuer une tâche impossible, comme d'enregistrer un fichier dans un dossier qui n'existe pas. En cas d'erreur d'exécution, une boîte de dialogue affiche généralement la nature de cette erreur.
Le troisième type d'erreur concerne les erreurs logiques. Elles se produisent lorsque le programme tourne correctement, mais ne fait pas ce que vous attendez de lui : il ne sélectionne, par exemple, pas les bonnes cellules à mettre en gras ou n'utilise pas les bonnes données dans un graphique.
Les éditeurs de code sont généralement dotés d'outils permettant de venir à bout de tous ces types d'erreurs.
Un compilateur vérifie la syntaxe des lignes de code. Il détecte les erreurs ligne par ligne au moment où elles se produisent. Des erreurs de syntaxe peuvent toutefois couvrir plusieurs lignes. Ce sont souvent celles impliquant des structures de contrôle, comme un Do sans Loop ou un If...Then sans End If. Pour que l'éditeur tienne compte de ces erreurs, cliquez sur Débogage > Compiler VBAProject (Excel) ou sur le bouton Compiler de la barre d'outils (Calc). Si une erreur est détectée, une boîte de dialogue affiche son type, et la ligne où elle s'est produite est mise en évidence. Après avoir corrigé l'erreur détectée par le compilateur, vous devez recompiler le projet, et cela chaque fois qu'il en découvre une.
L'exécution d'une procédure avec un arrêt à chaque ligne est appelée exécution pas à pas. Elle sert à corriger les erreurs logiques et d'exécution. Il n'est pas toujours possible d'examiner une procédure et de déterminer ce qui ne va pas. Il est nécessaire de ralentir l'exécution de la procédure et d'examiner comment elle traite chaque ligne. Cette stratégie met souvent un dysfonctionnement en évidence. Vous pouvez exécuter la procédure pas à pas à partir du début ou en plaçant un point d'arrêt.


Observez bien ce que fait la procédure pendant que vous l'examinez pas à pas. Si quelque chose ne va pas, notez la ligne qui pose problème. Vous pourrez ainsi limiter la zone de la procédure qui nécessite une correction.
Si la procédure qui contient des erreurs est longue, vous risquez de passer beaucoup de temps à parcourir les lignes de code avant d'arriver à l'endroit qui demande à être examiné. C'est là qu'un point d'arrêt peut vous aider. Un point d'arrêt est utilisé pour marquer une ligne de code spécifique, de sorte que le programme s'arrête à cet endroit lorsqu'il est exécuté. Après avoir atteint le point d'arrêt, vous pouvez continuer pas à pas.


La commande de point d'arrêt est une bascule arrêt/marche. Pour ôter un point d'arrêt, suivez les mêmes étapes que pour le placer.
Vous pouvez placer un point d'arrêt avec la souris en cliquant dans la barre de marge en face de la ligne où vous voulez le mettre.
Lorsque vous fermez un classeur contenant des procédures dotées de points d'arrêt, ces derniers sont automatiquement supprimés.
Il est parfois nécessaire pendant un débogage de connaître la valeur d'une variable ou d'une propriété. Vous pouvez espionner celle-ci afin de suivre ses évolutions pendant l'exécution de la procédure.
Procédez comme suit pour placer un espion sur une déclaration ou sur une variable :

ou bien :
- Afficher la fenêtre Espions dans le menu affichage.
- sélectionner dans le code le nom de la variable (ou d'une expression à évaluer comme var1*2+15) et faire un cliqué-glissé vers la fenêtre espion.

Avec les deux produits, parcourez pas à pas la procédure espionnée et observez la valeur de la variable pendant l'exécution pas à pas dans la fenêtre Code.
Un clic-droit sur un espion permet de 'Modifier l'espion...' et de mettre un point d'arrêt conditionnel.
Par exemple mettre dans Expression : lig=350 et sélectionner 'Arrêt si la valeur est vraie'.
Le programme vous redonnera la main lorsque la condition sera remplie.
Avec Excel vous pouvez afficher temporairement la valeur d'une déclaration de propriété ou d'une variable dans une infobulle, en plaçant dessus le pointeur de la souris, après qu'elle a été exécutée pas à pas. Cela ne fonctionne qu'avec une procédure.
Excel propose en outre la fenêtre Exécution, qui affiche le résultat d'une fonction ou d'une propriété. Pour la faire apparaître dans l'éditeur, cliquez sur Affichage > Fenêtre Exécution, ou appuyez sur Ctrl+G. Pour afficher à l'intérieur le résultat d'une fonction ou d'une propriété, procédez comme suit :
Cette fenêtre Exécution permet de tester des fonctions personnalisées. Saisissez dans la fenêtre Exécution ?NbJours(15/02/2000). Si vous obtenez la réponse correcte, 29 (ce qui devrait être le cas puisque vous avez déjà testé la fonction), cela signifie que cette fonction a été programmée correctement. Si la réponse est fausse, vous saurez que vous devrez vous remettre à l'ouvrage.
Elle sert également à examiner les propriétés. En saisissant ?Activeworkbook.Path à l'intérieur, vous verrez le chemin du classeur actif dans Excel. Ce type d'essai permet de mieux vous familiariser avec les objets et leurs propriétés, ce qui facilitera d'autant votre programmation VBA.
À SAVOIR
L'éditeur VBA est équipé d'une fonction de vérification automatique de la syntaxe qui contrôle la validité d'une ligne de code dès que vous la quittez. S'il détecte une erreur, il affiche une boîte de message tandis que l'éditeur met la ligne erronée en rouge. Ensuite, c'est à vous de corriger l'erreur.
Le second type d'erreur est une erreur d'exécution. Comme l'indique son nom, elle se produit lors de l'exécution du code. Même si la syntaxe est correcte, le programme peut tenter d'effectuer une tâche impossible, comme d'enregistrer un fichier dans un dossier qui n'existe pas. En cas d'erreur d'exécution, une boîte de dialogue affiche généralement la nature de cette erreur.
Le troisième type d'erreur concerne les erreurs logiques. Elles se produisent lorsque le programme tourne correctement, mais ne fait pas ce que vous attendez de lui : il ne sélectionne, par exemple, pas les bonnes cellules à mettre en gras ou n'utilise pas les bonnes données dans un graphique.
Les éditeurs de code sont généralement dotés d'outils permettant de venir à bout de tous ces types d'erreurs.
COMPILER UN PROJET
Un compilateur vérifie la syntaxe des lignes de code. Il détecte les erreurs ligne par ligne au moment où elles se produisent. Des erreurs de syntaxe peuvent toutefois couvrir plusieurs lignes. Ce sont souvent celles impliquant des structures de contrôle, comme un Do sans Loop ou un If...Then sans End If. Pour que l'éditeur tienne compte de ces erreurs, cliquez sur Débogage > Compiler VBAProject (Excel) ou sur le bouton Compiler de la barre d'outils (Calc). Si une erreur est détectée, une boîte de dialogue affiche son type, et la ligne où elle s'est produite est mise en évidence. Après avoir corrigé l'erreur détectée par le compilateur, vous devez recompiler le projet, et cela chaque fois qu'il en découvre une.

EXECUTION PAS A PAS ET POINTS D'ARRET
L'exécution d'une procédure avec un arrêt à chaque ligne est appelée exécution pas à pas. Elle sert à corriger les erreurs logiques et d'exécution. Il n'est pas toujours possible d'examiner une procédure et de déterminer ce qui ne va pas. Il est nécessaire de ralentir l'exécution de la procédure et d'examiner comment elle traite chaque ligne. Cette stratégie met souvent un dysfonctionnement en évidence. Vous pouvez exécuter la procédure pas à pas à partir du début ou en plaçant un point d'arrêt.
Exécuter une procédure pas à pas à partir du début avec Excel
- Dans le menu, choisissez Outils > Macro > Macros, ou appuyez sur Alt+F8.
- Dans la liste Nom de la macro, sélectionnez celle que vous voulez examiner pas à pas.
- Cliquez sur le bouton Pas à pas détaillé. L'éditeur apparaît, la première ligne de la macro est surlignée en jaune.
- Appuyez sur la touche F8 pour passer d'une ligne à l'autre de la procédure. Cette touche fonctionne aussi longtemps que le point d'insertion se trouve quelque part dans la routine.

Exécuter une procédure pas à pas à partir du début avec Calc
- Dans le menu, choisissez Outils > Macros > Gérer les macros > OpenOffice.org.
- Sélectionnez le module concerné, puis sélectionnez dans celui-ci la macro que vous voulez examiner pas à pas. Cliquez sur Éditer.
- Cliquez sur le bouton Step into de la barre d'outils. Une flèche jaune apparaît à côté de la première ligne, tandis que la fenêtre Appel montre le premier appel en cours.
- Cliquez à nouveau sur le bouton Step into (ou sur F8) pour passer d'une ligne à l'autre de la procédure. Cette touche fonctionne aussi longtemps que le point d'insertion se trouve quelque part dans la routine.

Observez bien ce que fait la procédure pendant que vous l'examinez pas à pas. Si quelque chose ne va pas, notez la ligne qui pose problème. Vous pourrez ainsi limiter la zone de la procédure qui nécessite une correction.
Si la procédure qui contient des erreurs est longue, vous risquez de passer beaucoup de temps à parcourir les lignes de code avant d'arriver à l'endroit qui demande à être examiné. C'est là qu'un point d'arrêt peut vous aider. Un point d'arrêt est utilisé pour marquer une ligne de code spécifique, de sorte que le programme s'arrête à cet endroit lorsqu'il est exécuté. Après avoir atteint le point d'arrêt, vous pouvez continuer pas à pas.
Parcourir une procédure comportant un point d'arrêt avec Excel
- Placez le point d'insertion à la ligne où la procédure doit se mettre en pause.
- Dans le menu, cliquez sur Débogage > Basculer le point d'arrêt, ou appuyez sur la touche F9. L'éditeur surlignera la ligne en rouge brique et placera un gros point de la même couleur dans la barre de marge.

- Revenez à la fenêtre d'Excel (facultatif) et lancez la procédure. Elle s'exécutera jusqu'au moment où elle rencontrera le point d'arrêt ; l'éditeur s'ouvrira alors et affichera la procédure.
- Appuyez sur F8 pour continuer pas à pas à travers le restant de la procédure.
Parcourir une procédure comportant un point d'arrêt avec Calc
- Placez le point d'insertion à la ligne où la procédure doit se mettre en pause.
- Dans la barre d'outils, cliquez sur (Dés)activer le point d'arrêt. L'éditeur place un gros point rouge dans la barre de marge.

- Lancez la procédure en cliquant sur Exécuter le BASIC. Elle s'exécutera jusqu'au moment où elle rencontrera le point d'arrêt.
- Appuyez sur F8 pour continuer pas à pas à travers le restant de la procédure.
La commande de point d'arrêt est une bascule arrêt/marche. Pour ôter un point d'arrêt, suivez les mêmes étapes que pour le placer.
ASTUCE
Vous pouvez placer un point d'arrêt avec la souris en cliquant dans la barre de marge en face de la ligne où vous voulez le mettre.
Lorsque vous fermez un classeur contenant des procédures dotées de points d'arrêt, ces derniers sont automatiquement supprimés.
ESPIONNER LES VARIABLES ET LES EXPRESSIONS
Il est parfois nécessaire pendant un débogage de connaître la valeur d'une variable ou d'une propriété. Vous pouvez espionner celle-ci afin de suivre ses évolutions pendant l'exécution de la procédure.
Procédez comme suit pour placer un espion sur une déclaration ou sur une variable :
- Dans la fenêtre Code de l'éditeur, sélectionnez la déclaration de propriété ou de variable dont vous voulez espionner la valeur.
Avec Excel
- Dans le menu, choisissez Débogage, Espion express, ou appuyez sur Maj+F9. La boîte de dialogue Espion express apparaît.

- Cliquez sur Ajouter.
- L'expression apparaît dans la fenêtre Espion.
ou bien :
- Afficher la fenêtre Espions dans le menu affichage.
- sélectionner dans le code le nom de la variable (ou d'une expression à évaluer comme var1*2+15) et faire un cliqué-glissé vers la fenêtre espion.
Avec Calc
- Cliquez dans la barre d'outils sur le bouton Activer le témoin.
- Dans la fenêtre Témoin, en bas à gauche, la colonne Variable affiche le nom de la variable espionnée, et la colonne Valeur, sa valeur durant l'exécution pas à pas.

Avec les deux produits, parcourez pas à pas la procédure espionnée et observez la valeur de la variable pendant l'exécution pas à pas dans la fenêtre Code.
POINT D'ARRET CONDITIONNEL
Avec Excel
Un clic-droit sur un espion permet de 'Modifier l'espion...' et de mettre un point d'arrêt conditionnel.
Par exemple mettre dans Expression : lig=350 et sélectionner 'Arrêt si la valeur est vraie'.
Le programme vous redonnera la main lorsque la condition sera remplie.
ASTUCE
Avec Excel vous pouvez afficher temporairement la valeur d'une déclaration de propriété ou d'une variable dans une infobulle, en plaçant dessus le pointeur de la souris, après qu'elle a été exécutée pas à pas. Cela ne fonctionne qu'avec une procédure.
FENETRE EXECUTION
Excel propose en outre la fenêtre Exécution, qui affiche le résultat d'une fonction ou d'une propriété. Pour la faire apparaître dans l'éditeur, cliquez sur Affichage > Fenêtre Exécution, ou appuyez sur Ctrl+G. Pour afficher à l'intérieur le résultat d'une fonction ou d'une propriété, procédez comme suit :
- Tapez le nom de la fonction ou de la propriété précédé d'un point d'interrogation. Assurez-vous que la syntaxe est correcte.
- Appuyez sur ENTREE. La valeur courante de la fonction ou de la propriété apparaît sous la ligne de texte que vous avez saisie.
Cette fenêtre Exécution permet de tester des fonctions personnalisées. Saisissez dans la fenêtre Exécution ?NbJours(15/02/2000). Si vous obtenez la réponse correcte, 29 (ce qui devrait être le cas puisque vous avez déjà testé la fonction), cela signifie que cette fonction a été programmée correctement. Si la réponse est fausse, vous saurez que vous devrez vous remettre à l'ouvrage.

Elle sert également à examiner les propriétés. En saisissant ?Activeworkbook.Path à l'intérieur, vous verrez le chemin du classeur actif dans Excel. Ce type d'essai permet de mieux vous familiariser avec les objets et leurs propriétés, ce qui facilitera d'autant votre programmation VBA.