1. Présentation de la gestion des erreurs d'exécution
1.1 Instructions dédiées à la gestion des erreurs
1.2 Portée de l'instruction On Error Goto
1.3 Désactivation de la gestion d'erreurs
1.4 Description de l'objet global Err
1.5 Ecriture d'un gestionnaire d'erreurs
1.6 Ordre d'appel des gestionnaires d'erreur
2. Méthodes alternatives de gestion des erreurs :
le traitement en ligne
Visual Basic autorise
la détection des défauts d'exécution provoqués
par des erreurs qui peuvent être déclenchées par exemple
par un objet VB ou par un contrôle ActiveX, et donc il permet au programme
d'y réagir de manière adéquate.
1. Présentation de la gestion des
erreurs d'exécution
1.1 Instructions dédiées
à la gestion des erreurs
La notion d'exception n'existe pas en Visual Basic. |
Là où on rencontrerait en Delphi ou en Java un bloc "try", VB utilise le déroutement "On Error Goto Etiquette", où "Etiquette" constitue le point d'entrée d'un traitement des erreurs, inclus ou non dans la même sous-routine où l'erreur a été déclenchée.
Ce traitement sert classiquement à corriger l'erreur si possible, sinon à informer l'utilisateur de sa mauvaise manipulation et lui demander de recommencer, ou bien à arrêter immédiatement l'application si nécessaire. Le mot-clé Resume permet, à la fin du traitement, de retourner au début de l'instruction fautive, alors que Resume Next permet un branchement vers l'instruction suivant immédiatement celle ayant déclenché l'erreur. On peut aussi effectuer un branchement avec Resume Etiquette, qui revient en fait à un simple Goto (l'étiquette doit se trouver dans la même sous-routine que l'instruction qui a provoqué l'erreur).
L'aide en ligne de VB 6 présente ces différentes possibilités ainsi :
1.2 Portée de l'instruction
On Error Goto
Les instructions couvertes par la gestion d'erreur sont toutes celles qui suivent l'instruction On Error Goto, et ce jusqu'à la fin de la procédure dans laquelle elle se situe (c'est-à-dire jusqu'à la prochaine instruction Exit Sub, Exit Function,Exit Property, End Sub, End Function ou End Property). |
Cela signifie notamment
qu'il ne peut y avoir qu'un seul gestionnaire d'erreur par procédure,
contrairement aux langages possédant les exceptions (comme Delphi ou
Java) où try/except ou try/catch sont des blocs que
l'on peut précisément délimiter.
1.3 Désactivation de la gestion d'erreurs
Ceci peut s'effectuer grâce à l'instruction On Error Goto 0, ce qui peut permettre de soustraire une ou plusieurs instructions au traitement d'erreur :
1.4 Description de l'objet global Err
Le mécanisme
de déclenchement et de traitement des erreurs est entièrement
centré autour de l'objet global Err : VB renseigne les propriétés de cet objet lorsqu'il
génère une erreur.
La propriété Number contient le numéro de l'erreur d'exécution qui s'est produite le plus récemment. On peut noter qu'il est très peu pratique de retrouver la signification d'une erreur à partir de son numéro. |
La propriété Description contient une courte description de l'erreur : on peut s'en servir dans le cas d'une erreur non prévue par le développeur, pour informer un minimum l'utilisateur en l'affichant dans une boîte de message. |
La propriété Source contient le nom de l'objet ou de l'application qui a généré l'erreur à l'origine. Elle est accessible à la fois en lecture-écriture. |
Les propriétés HelpFile et HelpContext servent si l'on a créé une rubrique spécifique à l'erreur. |
La propriété LastDLLError renvoie un code d'erreur système produit par un appel à une DLL (propriété en lecture seule). |
La méthode Raise permet de déclencher soi-même une erreur d'exécution. Elle prend comme unique paramètre le numéro d'erreur concerné. |
Les propriétés de l'objet Err sont remises à zéro ou remplacées par des chaînes de longueur nulle ("") après une instruction Exit Sub, Exit Function, Exit Property ou Resume Next, dans le cadre d'une routine de gestion d'erreur. La méthode Clear peut être utilisée pour réinitialiser Err de façon explicite.
Remarque
Il faut noter que l'on peut créer ses propres constantes d'erreur en prenant comme base vbObjectError + 512 (pour éviter tout conflit avec les versions ultérieures de Visual Basic). |
|
On peut ensuite les déclencher avec l'appel de la méthode :Err.Raise(constante_erreur).
1.5 Ecriture d'un gestionnaire d'erreurs
Celui-ci est généralement placé à la fin de la procédure. Il est précédé de son étiquette, elle-même précédée d'une instruction Exit Sub ou Exit Function, permettant de ne pas exécuter le gestionnaire si aucune erreur ne s'est produite.
Le corps du gestionnaire contient la plupart du temps une structure Select Case permettant de traiter plusieurs types d'erreurs; la clause Case Else est importante : elle indique le traitement à effectuer pour les erreurs inattendues. Le plus souvent, on arrête alors l'application après avoir annoncé l'erreur à l'utilisateur.
|
Function VerifyFile As String |
Lorsqu'il détecte une erreur d'exécution dans une procédure,Visual Basic cherche un gestionnaire d'erreur d'abord dans la procédure elle-même, puis remonte la pile des appels.Par exemple, si une fonction a appelle une fonction b qui appelle une fonction c, VB cherche d'abord dans la fonction c, puis dans la fonction b, puis enfin dans la fonction a. Ainsi, si une erreur se produit dans la fonction c, elle peut n'être traitée que dans la fonction a.
Il faut donc être prévoyant et faire en sorte qu'une procédure ne possédant pas de gestionnaire d'erreur déclenche ses propres erreurs, qui pourront éventuellement être traitées par la procédure appelante.
2. Méthodes alternatives de gestion des erreurs :
Le traitement en ligne
Exemple avec la fonction Dir (qui retourne le premier fichier dont le nom correspond à celui du fichier spécifié et retourne une chaîne de longueur nulle si aucun fichier correspondant n'est trouvé) :On peut aussi traiter les erreurs à la façon du C, en utilisant en permanence des fonctions qui retournent un nombre indiquant le type d'erreur rencontré. On peut utiliser l'instruction On Error Resume Next qui ne renvoie pas à un gestionnaire d'erreur mais à l'instruction suivant immédiatement l'instruction fautive. L'instruction suivante peut alors être un test If sur le numéro de l'éventuelle erreur.
On peut éventuellement utiliser des valeurs de retour de type Variant : ce type peut contenir le code "erreur", ce qui se vérifie grâce à la fonction IsError.