Blog ENI : Toute la veille numérique !
🎃 Jusqu'à -30% sur les livres en ligne, vidéos et e-formations.
Code : GHOST30.
Cliquez ici !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Macros et langage VBA
  3. Gestion des erreurs et débogage
Extrait - Macros et langage VBA  Découvrez la programmation sous Excel (2e édition)
Extraits du livre
Macros et langage VBA Découvrez la programmation sous Excel (2e édition)
7 avis
Revenir à la page d'achat du livre

Gestion des erreurs et débogage

Objectifs du chapitre

Durant votre parcours d’apprentissage et bien au-delà, vous aurez l’occasion de rédiger de nombreux programmes, et d’obtenir aussi de nombreuses erreurs ! Ce n’est pas une fatalité et cela se gère très bien !

Qu’elles soient de votre fait ou de celui de vos utilisateurs, ce chapitre vise à vous permettre de vous prémunir contre plusieurs de ces erreurs, et de vous adapter lorsque celles-ci apparaissent lorsque vous codez ou exécutez un programme.

En fin de chapitre, vous serez invité à reprendre certains exercices des précédents chapitres et à rendre votre code plus robuste au moyen des pistes suggérées dans ce chapitre. 

Les erreurs dans Excel

Il est très fréquent d’avoir des erreurs dans les cellules Excel. Dans le chapitre Manipuler les formules, vous avez pu voir que les erreurs dans les formules sont possibles, mais cela n’est pas la seule source possible d’erreurs sous Excel.

Des erreurs de formules

Que la donnée que vous cherchez ne soit pas présente, ou que vous tentiez une division par 0, tout type d’erreur retournée dans une cellule peut se gérer, vous l’avez déjà vu au travers des fonctions ESTERREUR et SIERREUR.

Lorsqu’une erreur est identifiée par Excel, un point d’exclamation noir dans un carré jaune apparaît à gauche de la cellule :

images/20SOB01N.png

Un libellé de l’erreur est fourni par Excel, des pistes de solutions vous sont proposées. Il est ainsi possible d’utiliser l’aide Excel, d’afficher les étapes de calculs qui amènent à cette erreur, d’ignorer l’erreur ou encore d’effectuer une correction de la formule directement dans la barre de formule.

Des erreurs de conception

Au-delà des solutions qu’Excel vous propose, il peut arriver que l’origine des problèmes vienne directement des données sur lesquelles vous travaillez. Vous pouvez avoir des erreurs à cause de formats de cellules qui ne sont pas les bons, de données qui ne se trouvent...

Les erreurs en VBA

Il existe plusieurs types d’erreurs en VBA, toutes n’apparaissent pas pour les mêmes raisons ni au même moment. Vous allez voir dans ce paragraphe ce qui les différencie, mais également quelques corrections fort simples pour résoudre les erreurs les plus triviales. 

Faites-vous aider : Option Explicit

La première chose qui est fortement recommandée est d’utiliser une instruction que vous verrez dans chacune des corrections d’exercices :

Option Explicit 

Exemple 1 : une instruction plus qu’utile, une instruction primordiale

Cette instruction est à placer au début de vos modules. Elle va vous aider à mieux programmer. 

Ajouter manuellement l’instruction

En effet, la présence de cette instruction impose que chaque variable utilisée dans le code soit strictement déclarée auparavant. Ainsi, si une variable n’est pas correctement écrite ou si sa déclaration est manquante, VBA vous l’indiquera immédiatement.

Option Explicit 
Sub ProcedurePleinedErreurs() 
Dim o As String 
B = "B" 
End Sub 

Exemple 2 : cas d’usage d’une variable non déclarée

Si vous faites une erreur dans un nom de variable, par exemple, si vous utilisez des noms de variables longs et que vous oubliez une lettre, VBA le détectera.

Sub AutreProcedurePleinedErreurs() 
Dim UnNomDeVariableParticulierementLong As String 
UnNomDeVariableParticulierementLog = "A" 
End Sub 

Exemple 3 : cas d’un nom de variable mal écrit...

Gérer les erreurs dans le code

Dans ce paragraphe, vous allez voir plusieurs outils à votre disposition pour pallier le mieux possible les erreurs qui pourraient advenir durant l’utilisation de votre programme. 

S’assurer des valeurs des variables

Lorsque vous exécutez votre programme, les variables que vous manipulez prennent des valeurs, et votre code se base sur ces valeurs pour exécuter ou non des instructions. Il est donc primordial de connaître les valeurs auxquelles vous vous attendez durant cette exécution.

En utilisant les points d’arrêt (voir le chapitre Exécuter un programme et règles d’écriture), vous êtes déjà en mesure de vous assurer qu’une instruction doit être exécutée ou non. Mais cela ne suffit parfois pas pour connaître l’état de vos variables.

Utiliser la souris

Que vous soyez en train d’effectuer un débogage en mode pas à pas ou bien que le programme vienne de s’arrêter pour vous sur un point d’arrêt, il est possible de voir ce que contient une variable simplement en plaçant votre souris dessus. Une info-bulle s’affiche alors, avec le nom de la variable sur laquelle vous placez votre souris, ainsi que sa valeur à ce moment dans le programme :

images/20SOB08N.png

Cette solution permet une visibilité rapide du contenu des variables mais n’est pas toujours possible. Par exemple, lorsque la variable dont vous souhaitez connaître la valeur est située bien plus haut dans le programme, ou encore que le type de variable n’est pas une valeur qui puisse être simplement représentée par un texte (une feuille ou un classeur Excel par exemple). Il faut donc utiliser d’autres moyens.

Utiliser la fenêtre d’exécution

Tout comme vous avez eu la possibilité de lancer une fonction ou une procédure depuis la fenêtre d’exécution, il est possible de connaître durant l’exécution d’un programme la valeur d’une variable à partir de cette fenêtre.

Pour cela, il vous suffit de taper le nom de la variable précédé du caractère point d’interrogation ?. Le contenu de la variable sera affiché dans la ligne suivante dans la fenêtre d’exécution :

images/20SOB09N.png

Cette approche vous permet de vous affranchir de la technique précédente avec le pointeur de souris mais elle ne résout pas pour autant le problème évoqué dans la précédente section, à savoir la représentation des objets plus complexes et leur contenu.

Il vous reste fort heureusement une ultime solution pour d’accéder aux informations de vos variables : les espions.

Utiliser les espions

Que vous soyez en cours d’exécution d’un programme ou simplement en train de déboguer vos lignes de code, il est possible d’utiliser un outil des plus pratiques pour suivre les valeurs que prennent vos variables : les espions.

Vous avez déjà affiché la fenêtre Espions dans le chapitre L’environnement de programmation VBE.

 Effectuez un clic droit sur une variable de votre code et sélectionnez l’option Ajouter...

Gérer les erreurs dans les formulaires utilisateurs

Après avoir vu les principaux moyens de vous prémunir des erreurs lors de l’exécution, ce dernier paragraphe vous donne quelques idées sur la façon de vous assurer le plus tôt possible que l’utilisateur fournit ce que vous attendez de lui lorsqu’il remplit un formulaire.

La gestion des erreurs peut ainsi se faire dès le clic sur un bouton dans un formulaire utilisateur.

Valider les données

Avant de faire appel à certaines fonctions, vous pouvez effectuer une série de tests sur les contrôles de vos formulaires. Contrôles de cohérences, zones de texte correctement remplies et valeurs valides sont autant de choses qu’il vous faudra valider avant de faire appel aux procédures.

Vous pouvez ainsi créer une fonction Validation, de type Boolean, qui effectuera les contrôles et retournera la valeur True seulement si tous vos tests procurent les résultats attendus.

Function Validation() As Boolean 
Validation = True 
'Instructions des Controles de validation 
'en cas d'échec du contrôle 
Validation = False 
End Function 

Exemple 13 : utilisation d’une fonction de validation

Vous pourrez ensuite utiliser cette fonction directement lors d’un clic sur le bouton Valider de votre formulaire :

Private Sub BoutonValider_Click() ...

Exercices

Créez un module Chapitre_20_Erreurs afin d’y écrire vos programmes.

Renforcer vos précédents exercices

Dans un souci de rendre plus robustes les exercices des précédents chapitres, voici quelques pistes.

 Chapitre 5 MsgBox Inputbox Exercice BoiteElementaire : assurez-vous que l’utilisateur ne saisit pas une valeur numérique ni une date.

 Chapitre 11 Chaînes de caractères Exercice TitreEtDate : assurez-vous que les caractères passés en paramètres permettent une récupération sous forme de date valide.

Mettre en place une gestion d’erreur

 Chapitre 14 Manipuler les Feuilles, Exercice CreerRemplirEtNommerFeuille, mettez en place une gestion d’erreurs qui afficherait un message à l’utilisateur si la feuille est déjà présente dans le classeur.

Utiliser les fonctions de contrôle

 Chapitre 15 Manipuler les classeurs, Exercice EtapesCompletesClasseur, utilisez les fonctions que vous avez abordées dans ce chapitre pour vous assurer que la cellule servant à stocker le nom du fichier ne soit pas vide avant d’effectuer l’enregistrement du classeur.