Table des matières:
Vidéo: Excel VBA - Debugging 2025
Lorsque vous avez besoin d'erreurs dans Excel VBA, vous pouvez utiliser l'instruction OnError. Cependant, il y a quelques choses que vous devez savoir en premier. Vous pouvez utiliser l'instruction On Error de trois façons.
Syntaxe | Ce qu'elle fait |
---|---|
On Error GoTo label | Après l'exécution de cette instruction, VBA reprend l'exécution de l'instruction
suivant le libellé spécifié. Vous devez inclure un deux-points après l'étiquette afin que VBA le reconnaisse comme une étiquette. |
On Error GoTo 0 | Après l'exécution de cette instruction, VBA reprend son comportement normal de vérification des erreurs
. Utilisez cette instruction après avoir utilisé l'une des autres instructions On Error ou lorsque vous souhaitez supprimer le traitement des erreurs dans votre procédure. |
A la reprise de l'erreur Suivant | Après l'exécution de cette instruction, VBA ignore simplement toutes les erreurs
et reprend l'exécution avec l'instruction suivante. |
Reprise après une erreur
Dans certains cas, vous voulez simplement que la routine se termine normalement lorsqu'une erreur survient. Par exemple, vous pouvez afficher un message décrivant l'erreur, puis quitter la procédure. (L'exemple EnterSquareRoot5 montré plus haut utilise cette technique.) Dans d'autres cas, vous voulez récupérer de l'erreur, si possible.
Pour récupérer une erreur, vous devez utiliser une instruction Resume. Cela efface la condition d'erreur et vous permet de continuer l'exécution à un emplacement donné. Vous pouvez utiliser l'instruction Resume de trois façons.
Syntaxe | Description |
---|---|
Reprendre | L'exécution reprend avec l'instruction à l'origine de l'erreur. Utilisez
si votre code de gestion des erreurs corrige le problème et que vous pouvez continuer. |
Resume Next | L'exécution reprend avec l'instruction qui suit immédiatement l'instruction
qui a provoqué l'erreur. Cela ignore essentiellement l'erreur . |
Reprendre l'étiquette | L'exécution reprend à l'étiquette que vous spécifiez. |
L'exemple suivant utilise une instruction Resume après qu'une erreur survienne:
Sub EnterSquareRoot6 () Dim Num As Variant Dim Msg As String Dim Ans As Integer TryAgain: 'Configurer la gestion des erreurs lors de l'erreur GoTo BadEntry 'Invite pour une valeur Num = InputBox ("Entrer une valeur") Si Num = "" Alors Exit Sub' Insère la racine carrée ActiveCell. Valeur = Sqr (Num) Exit Sub BadEntry: Msg = Err. Number & ":" & Error (Numéro d'erreur) Msg = Msg & vbNewLine & vbNewLine Msg = Msg & "Assurez-vous qu'une plage est sélectionnée", Msg = Msg & "la feuille n'est pas protégée", Msg = Msg & "et vous entrez une valeur non négative. "Msg = Msg & vbNewLine & vbNewLine &" Essayez encore? "Ans = MsgBox (Msg, vbYesNo + vbCritical) Si Ans = vbYes alors Reprendre TryAgain End Sub
Cette procédure a une autre étiquette: TryAgain.Si une erreur se produit, l'exécution continue sur l'étiquette BadEntry et le code affiche le message ci-dessous. Si l'utilisateur répond en cliquant sur Oui, l'instruction Resume se déclenche et l'exécution revient à l'étiquette TryAgain. Si l'utilisateur clique sur Non, la procédure se termine.
Notez que le message d'erreur inclut également le numéro de l'erreur, ainsi que la description de l'erreur "officielle".
L'instruction Resume efface la condition d'erreur avant de continuer. Pour voir cela, essayez de substituer l'instruction suivante pour l'avant-dernière instruction dans l'exemple précédent:
Si Ans = vbYes Then GoTo TryAgain
Le code ne fonctionne pas correctement si vous utilisez GoTo plutôt que Resume. Pour démontrer, entrez un nombre négatif. Vous obtenez l'invite d'erreur. Cliquez sur Oui pour réessayer, puis entrez un autre nombre négatif . Cette deuxième erreur n'est pas interceptée car la condition d'erreur d'origine n'a pas été effacée.
Traitement des erreurs en un rien de temps
Pour vous aider à gérer parfaitement toutes ces erreurs, voici un résumé rapide et corrélé. Un bloc de code de gestion d'erreur a les caractéristiques suivantes:
-
Il commence immédiatement après l'étiquette spécifiée dans l'instruction On Error.
-
Il devrait être atteint par votre macro seulement si une erreur se produit. Cela signifie que vous devez utiliser une instruction telle que Exit Sub ou Exit Function immédiatement avant l'étiquette.
-
Il peut nécessiter une instruction de reprise. Si vous choisissez de ne pas abandonner la procédure lorsqu'une erreur se produit, vous devez exécuter une instruction Resume avant de revenir au code principal.
Savoir quand ignorer les erreurs
Dans certains cas, il est parfaitement possible d'ignorer les erreurs. C'est à ce moment que l'instruction On Error Resume Next entre en jeu.
L'exemple suivant parcourt chaque cellule de la plage sélectionnée et convertit la valeur en racine carrée. Cette procédure génère un message d'erreur si une cellule de la sélection contient un nombre ou un texte négatif:
Sub SelectionSqrt () Dim cellule As Range Si TypeName (Sélection) <> "range" Puis Quitter Sub Pour chaque cellule Dans la cellule Selection. Value = Sqr (cell. Value) Cellule suivante End Sub
Dans ce cas, vous pouvez simplement ignorer toute cellule contenant une valeur que vous ne pouvez pas convertir en racine carrée. Vous pouvez créer toutes sortes de capacités de vérification d'erreurs en utilisant les structures If-Then, mais vous pouvez concevoir une meilleure solution (et plus simple) en ignorant simplement les erreurs qui se produisent.
La routine suivante accomplit ceci en utilisant l'instruction On Error Resume Next:
Sub SelectionSqrt () Dim cellule As Range si TypeName (Selection) <> "range" Puis Exit Sub On Error Resume Suivant Pour chaque cellule En sélection cellule. Value = Sqr (cell. Value) Cellule suivante End Sub
En général, vous pouvez utiliser une instruction On Error Resume Next si vous considérez que les erreurs sont inoffensives ou sans conséquence pour votre tâche.
