L'informatique à votre portée
L'informatique prêt-à-porter

Faites appel à moi pour vos formations
sur les dpts 81, 31, 82, 11 et 67 (Strasbourg)
Confiez moi vos développements Office

FacebookTwitterGoogle BookmarksLinkedin

Gestionnaire d'erreurs

4 mars 2014
Imprimer E-mail

Le principe de fonctionnement d'un gestionnaire d'erreur fonctionne ainsi :

Sub MaProcédure()
     On Error GoTo GestionErreur
     'début du code
     '....
     'Fin du code

     Exit Sub
GestionErreur:
     'code de gestion d'erreur
     'avec retour dans le code après gestion ou sortie de la procédure

End Sub

L'instruction On Error permet de déclencher une action selon le paramètre ajouté et ne concerne que la procédure dans laquelle elle est inscrite. :

InstructionAction
On Error GoTo NomEtiquette En cas d'erreur le code suivant l'étiquette NomEtiquette est exécuté.
Pour mettre une étiquette dans le code, tapez son nom suivi du caractère de ponctuation deux-points (:), puis tapez votre code sur la ligne suivante.
On Error Resume Next En cas d'erreur le code continu sur la ligne suivante et donc ignore l'erreur mais attention aux conséquences
On Error GoTo 0 désactive le traitement des erreurs.

Cette instruction peut être utilisée autant de fois que vous le voulez dans une procédure.
Il est important de même l'instruction Exit Sub ou Exit Function avant l'étiquette indiquant le début du code pour les erreurs, sinon votre procédure exécute ses lignes automatiquement.

Le code qui suit l'étiquette débutant la gestion d'erreur (dans l'exemple ci-dessus :  GestionErreur) va vous permettre de vérifier quel est l'erreur et d'agir en conséquence.

  • Err.Number vous donne le numéro d'erreur, celui qui s'affiche dans une fenêtre vous proposant le débogage, si "On Error GoTo NomEtiquette" n'existe pas.
  • Err.Description vous donne le texte correspondant à l'erreur.

Erreur connue

Pour gérer une erreur que vous connaissez mais ne pouvez éviter, écrivez un code du type (1000 est un numéro d'erreur bidon) :

     Exit Sub
GestionErreur:
    If Err.Number = 1000 Then
     'ici votre correction
     'ici le renvoi au code normal ou sortie

    End if
End Sub

Pour retourner dans le code normal, vous pouvez utiliser :

  • Resume qui renvoie sur la ligne d'instruction qui a provoqué l'erreur
  • Resume Next qui renvoie sur la ligne d'instruction qui suit celle qui a provoqué l'erreur

Erreur inconnue

Pour gérer les erreurs que vous n'avez pu détecter, utilisez le code suivant :

     Exit Sub
GestionErreur:
    MsgBox Err.Description, vbOkOnly, "ERREUR"
    Application.ScreenUpdating = True 'pour remettre l'affichage à jour si vous l'avez désactivé
    Application.Cursor = xlDefault 'pour remettre le curseur par défaut si vous l'avez modifié
End Sub

Toutes les erreurs

Avec un code de ce type vous avez une procédure gérant l'ensemble des erreurs.

Sub MaProcédure()
     On Error GoTo GestionErreur
     'début du code
     '....
     'Fin du code

     Exit Sub
GestionErreur:
    If Err.Number = 1000 Then
         'ici votre correction
    Resume Next
    End if
    MsgBox Err.Description, vbOkOnly, "ERREUR"
    Application.ScreenUpdating = True 'pour remettre l'affichage à jour si vous l'avez désactivé
    Application.Cursor = xlDefault 'pour remettre le curseur par défaut si vous l'avez modifié
End Sub