Const gErreur1 = 1 + vbObjectError + 512

Const gErreur2 = 2 + vbObjectError + 512 

 
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.
 

Exemple de gestionnaire d'erreur (tiré de l'aide en ligne)
Function VerifyFile As String
Const mnErrBadFileName = 52, _
mnErrDriveDoorOpen = 71
Const mnErrDeviceUnavailable = 68, _
mnErrInvalidFileName = 64
Dim strPrompt As String, strMsg As String, _
strFileSpec As String
strPrompt = "Tapez la spécification de fichier à vérifier :"
StartHere:
' Commence par une spécification par défaut.
strFileSpec = "*.*"
strMsg = strMsg & vbCRLF & strPrompt
' Permet à l'utilisateur de modifier la spécification par défaut.
strFileSpec = InputBox(strMsg, "Recherche du fichier", _
strFileSpec, 100, 100)
' Sort si l'utilisateur supprime la spécification par défaut.
If strFileSpec = "" Then Exit Function
On Error GoToHandler
VerifyFile = Dir(strFileSpec)
Exit Function
Handler:
' Analyse le code d'erreur et charge le message.
Select Case Err.Number
Case ErrInvalidFileName, ErrBadFileName
strMsg = "Votre spécification de fichier " 
strMsg = strMsg & "n'est pas valide;essayez-en une autre."
Case MnErrDriveDoorOpen
strMsg = "Fermez le volet du lecteur " 
strMsg = strMsg & "et essayez de nouveau."
Case MnErrDeviceUnavailable
strMsg = "Le lecteur spécifié est introuvable." 
strMsg = strMsg & " Essayez de nouveau."
Case Else
Dim intErrNum As Integer
intErrNum = Err.Number
' Efface l'objet Err.
Err.Clear
' Régénère l'erreur.
Err.Raise Number:= intErrNum
End Select
' Retour à l'étiquette StartHere pour que l'utilisateur puisse 
' essayer un autre nom de fichier.
Resume StartHere
End Function
 
 

1.6 Ordre d'appel des gestionnaires d'erreur

 
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
 

  • 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.
  • 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 é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.