VBA en cas d'erreur

Excel VBA On Error Statement

L' instruction VBA On Error est un type de mécanisme de gestion des erreurs qui est utilisé pour guider le code pour faire quoi s'il rencontre un type d'erreur, généralement lorsqu'un code rencontre une erreur, l'exécution s'arrête mais avec cette instruction dans le code, l'exécution du le code continue comme il a un ensemble d'instructions à faire lorsqu'il rencontre une erreur.

Anticiper l'erreur dans le code fait de vous un pro du codage VBA. Vous ne pouvez pas rendre le code efficace à 100%, même si vous êtes sûr de votre code d'une manière ou d'une autre, il peut générer une erreur.

Il est presque impossible d'identifier et de gérer tous les types d'erreur, mais nous avons différentes façons de gérer une erreur dans VBA. Lors de l'écriture du code, vous ne pouvez pas anticiper le type de code d'erreur, mais si une erreur survient, vous passerez plus de temps à déboguer qu'à écrire le code lui-même.

Qu'est-ce qu'une erreur?

Une erreur n'est rien d'autre qu'une ligne de code qui ne peut pas être exécutée en raison de la fonctionnalité ou du mauvais code. Essayez donc d'anticiper l'erreur et de la gérer.

Par exemple, si vous essayez de supprimer la feuille qui n'est pas là, nous ne pouvons évidemment pas exécuter cette ligne de code.

Une erreur est de trois types, l'une est une erreur compilée due à des variables non déclarées. Le deuxième est une erreur de saisie de données due à des entrées erronées par le codeur, et le troisième est une erreur d'exécution due au fait que VBA ne peut pas reconnaître la ligne de code. Pour essayer d'accéder ou de travailler sur une feuille de calcul ou un classeur qui n'est pas là.

Mais nous avons une instruction dans VBA pour gérer tous ces types d'erreurs, c'est-à-dire l'instruction «On Error».

Types d'énoncés On Error

Le point clé de la gestion des erreurs dans VBA est l'instruction «On Error». Par exemple En cas d'erreur "reprendre la ligne suivante", "aller ou passer à une autre ligne", etc.

L'instruction On Error a trois types d'instructions.

  1. GoTo 0  signifie que chaque fois que l'erreur d'exécution se produit, Excel ou VBA doit afficher la boîte de message d'erreur indiquant le type d'erreur qu'il a rencontré. Dès que VBA exécute le code, il désactive tous les gestionnaires d'erreurs de ce bloc particulier sur le code.
  2. Resume Next signifie que chaque fois que l'erreur se produit, cette instruction demande à Excel d'ignorer cette erreur et de passer à (reprendre ensuite) la ligne de code suivante sans afficher de message d'erreur. Cela ne signifie pas que cela corrigera l'erreur, mais qu'il ignore simplement l'erreur.
  3. GoTo [étiquette] signifie que chaque fois que VBA rencontre une erreur, accédez à l'étiquette attribuée. Cela fait passer le code à la ligne spécifique fournie par le codeur.

Top 3 des moyens de gérer les erreurs dans VBA

Vous pouvez télécharger ce modèle VBA On Error ici - VBA On Error Template

# 1 - En cas d'erreur, reprendre ensuite

Supposons que vous divisez la valeur de 20 par 0 et que vous avez déclaré la variable pour lui affecter le résultat de la division.

Code:

 Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub 

Si vous exécutez ce code, l'erreur ci-dessous sera générée.

Vous ne pouvez donc diviser aucun nombre par une valeur nulle. Le numéro d'erreur d'exécution est 11, c'est-à-dire Division par zéro.

Maintenant, je vais ajouter une ligne de plus au code.

Code:

 Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub 

Maintenant, je vais ajouter la déclaration En cas d'erreur, la prochaine en haut.

Code:

 Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

Maintenant, si j'exécute ce code, il ne me donnera aucun message d'erreur mais exécutera la ligne de code suivante, c'est-à-dire j = 20/2.

# 2 - Sur l'étiquette GoTo d'erreur

J'ai déclaré trois variables.

Code:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer 

Pour ces trois variables, je vais attribuer un calcul de division.

Code:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

Le résultat de tous ces trois calculs sera affiché dans la boîte de message.

Code:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "La valeur de i est" & i & vbNewLine & "La valeur de j est "& j & _ vbNewLine &" La valeur de k est "& k & vbNewLine End Sub 

Maintenant, je vais essayer d'exécuter ce code car le calcul de «I» n'est pas correct, nous obtiendrons l'erreur d'exécution 11.

Maintenant, j'ajouterai l'instruction "On Error Resume Next".

Code:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "La valeur de i est" & i & vbNewLine & "Le la valeur de j est "& j & _ vbNewLine &" La valeur de k est "& k & vbNewLine End Sub 

Si j'exécute cela, il sautera le calcul «I» et exécutera les deux calculs restants et le résultat sera le suivant.

Maintenant, au lieu de "On Error Resume Next", j'ajouterai "On Error GoTo KCalculation"

Code:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "La valeur de i est" & i & vbNewLine & "La valeur de j est" & j & _ vbNewLine & "La valeur de k est" & k & vbNewLine End Sub 

Remarque: Ici «KCalculation» est le nom d'étiquette que j'avais donné, vous pouvez donner votre propre nom d'étiquette sans espace.

Maintenant, si j'exécute cette ligne de code, elle ne passera pas à la ligne suivante, elle sautera plutôt au nom d'étiquette que j'ai entré, c'est-à-dire «KCalcualtion». Ici, il ignorera l'erreur donnée par «I» et il n'exécutera pas non plus le calcul «j», mais il sautera immédiatement à «KCalcualtion».

# 3 - Numéro d'erreur d'impression dans VBA

À la fin du code, nous pouvons également imprimer le numéro d'erreur dans une boîte de message séparée. La ligne de code suivante fera ce travail.

Code:

Err.Number

Maintenant, je vais exécuter ce code, la première boîte de message affichera les résultats du calcul.

Cliquez sur OK, il affichera une boîte de message supplémentaire pour afficher le numéro d'erreur.

Nous allons 11 comme résultat c'est-à-dire Division par zéro.

Nous pouvons également obtenir la description de l'erreur au lieu du numéro. Nous avons juste besoin de changer le code, ci-dessous est le code.

Code:

Err.Description

Il affichera une description comme celle-ci.

Choses à retenir

  • Après avoir entré "On Error Resume Next" à la fin du code, n'oubliez pas d'ajouter l'instruction "On Error GoTo 0"
  • Le nom de l'étiquette doit être le même aux deux endroits.
  • Les noms d'étiquettes n'ont pas besoin d'être définis bien à l'avance.
  • En fin de compte, voyez toujours quelle était l'erreur survenue dans la boîte de message séparée.