Gestion des erreurs



0) Introduction

Lors de la conception d'un programme, il doit vous paraître clair que de nombreuses erreurs peuvent survenir àla suite d'incidents divers. Par exemple, si votre programme lit un fichier àchaque démarrage, et qu'un jour ce fichier reste introuvable, que se passera t'il ? Et bien vous obtiendrez lors de son exécution une fenêtre identique àcelle ci-dessous, et votre programme sera terminé!

Bien évidemment, vous ne pouvez pas vous permettre cela! La gestion des erreurs prend toute son importance : chaque erreur doit être prévisible, et une procédure prévue doit être lancée.
Làencore, Visual Basic va vous aider, car il possède plusieurs instructions de gestion locale des erreurs dans les procédures!

1) Routines de traitement d'erreur

Pour traiter une erreur, il faut tout d'abord la détecter. L'instruction On Error vous permet de choisir la procédure àréaliser lorsque erreur est détecter! Vous avez le choix entre 2 actions :

On Error Resume Next : en cas d'erreur, l'exécution du programme se poursuit avec l'instruction suivante. Par exemple, àla fin de votre programme, vous souhaitez supprimer un fichier. Mais ce fichier peut être ouvert ou tout simplement posséder l'attribut lecture seule (Read-Only). Si vous ne pouvez pas supprimer le fichier, l'exécution du programme ne doit pas pour autant être interrompue.

' ex: Suppression d'un fichier

Private Sub Command1_Click()

On Error Resume Next

Kill "c:\fichier.txt"' Suppression du fichier
...
...

End Sub

Cependant, vous devez savoir qu'avec cette méthode, les erreurs ne sont pas reconnues comme telles. Or, certaines erreurs ne doivent pas être négligées, sous risque de fausser le libre cours de votre programme.


On Error Goto Etiquette : en cas d'erreur, l'exécution du programme se poursuit àla ligne oùse trouve l'Etiquette. L'Etiquette est en fait un bloc de votre procédure, qui peut être appelégrâce àl'instruction Goto. L'avantage de cette méthode est que cette fois, vous gérez vos erreurs, et que l'exécution de votre programme s'en trouve changée.

' ex: Lecture d'un fichier

Private Sub Command1_Click()

On Error Goto Erreur_Stats

qnr = FreeFile

Open "c:\fichier.txt"For Input As #qnr ' Ouverture du fichier
Line Input #qnr, Temp$
Close #qnr ' Fermeture du fichier
...
...

Exit Sub

Erreur_Stats:
MsgBox "Impossible de lire le fichier !", vbCritical, "Erreur"

End Sub

Dans certains cas, l'erreur peut même être corrigée. Prenons l'exemple de l'erreur n°55 : Fichier déjàouvert.
Dans cet exemple, on fait appel àl'instruction Resume, qui entraîne une nouvelle tentative d'exécution de la ligne de l'erreur!

Private Sub Command1_Click()

On Error Goto Erreur_Stats

Open "c:\fichier.txt"For Output As #1 ' Ouverture du fichier
Kill "c:\fichier.txt"' Suppression du fichier
Exit Sub

Erreur_Stats:
Close #1 ' Fermeture du fichier
Resume

End Sub

Il existe aussi d'autres instructions telles que Resume Next, ou Resume Etiquette. Le premier commande la reprise de l'exécution après la ligne oùl'erreur s'est produite. Le deuxième appelle un nouveau bloc de la procédure. Cela peut être utile par exemple pour sauter un bloc de procédure.

2) Informations sur l'erreur

Maintenant que nous savons comment détecter une quelconque erreur et lancer une procédure prévue, nous allons voir comment différencier ces erreurs. En effet nous rencontrons une erreur lors d'une suppression de fichier, nous savons juste que le fichier ne peut pas être supprimé, mais rien de plus. Si nous cherchons àsurmonter l'erreur, nous nous devons de trouver la cause de celle-ci! La procédure àlancer est différente si le fichier est en lecture seule ou s'il est ouvert.
L'objet Err donne de nombreuses informations sur l'erreur elle-même, tel que son numéro, sa description...

' ex: Suppression d'un fichier

Private Sub Command1_Click()

On Error Goto Erreur_Stats

Kill "c:\fichier.txt"' Suppression du fichier
...
...
Exit Sub

Erreur_Stats:


Select Case Err

  Case
76 ' Erreur n°76 : erreur d'accès
    SetAttr "c:\fichier.txt", vbNormal ' Suppression de l'attribut Read-Only
    Resume

  Case Else ' Autre erreur
    MsgBox Err.Description &"( n°"&Err &")", vbCritical, "Erreur" ' Affichage de l'erreur

End Select

End Sub

Error$ est équivalent àErr.Description, et Err àErr.Number.

3) Générer une erreur

Et oui, vous pouvez même générer des erreurs, VB a tout prévu! Cela peut se révéler utile lorsque vous testez votre programme, vous savoir comment il va réagir ! Au lieu de mettre un fichier àsupprimer en lecture seule, créez vous-même l'erreur n°76, cela reviendra au même lors de l'exécution de votre programme.

- Pour générer une erreur (ici n°76) : Error 76

4) Obtenir la description d'une erreur sans la générer

Pour connaître toutes les erreurs auxquelles votre programme peut être confronter, inutile de générer une erreur, puis de lire sa description. L'instruction Error vous rend encore service en vous la donnant!

- Pour obtenir la description d'une erreur (ici n°76) : Temp$ = Error(76)

Attention àne pas confondre la syntaxe et àdéclencher l'erreur !!

4) Liste des erreurs

Erreur n°3 : Return sans GoSub
Erreur n°5 : Argument ou appel de procédure incorrect
Erreur n°6 : Dépassement de capacité
Erreur n°7 : Mémoire insuffisante
Erreur n°9 : Indice en dehors de la plage
Erreur n°10 : Ce tableau est fixe ou temporairement verrouillé
Erreur n°11 : Division par zéro
Erreur n°13 : Type incompatible
Erreur n°14 : Espace de chaîne insuffisant
Erreur n°16 : Expression trop complexe
Erreur n°17 : Impossible d'exécuter l'opération requise
Erreur n°18 : Interruption par l'utilisateur
Erreur n°20 : Resume sans gestion d'erreur
Erreur n°28 : Espace de pile insuffisant
Erreur n°35 : Procédure Sub ou Function non définie
Erreur n°47 : Trop de clients application pour cette DLL
Erreur n°48 : Erreur de chargement de la DLL
Erreur n°49 : Convention d'appel de DLL incorrecte
Erreur n°51 : Erreur interne
Erreur n°52 : Nom ou numéro de fichier incorrect
Erreur n°53 : Fichier introuvable
Erreur n°54 : Mode d'accès au fichier incorrect
Erreur n°55 : Fichier déjà ouvert
Erreur n°57 : Erreur d'entrée/sortie de périphérique
Erreur n°58 : Ce fichier existe déjà
Erreur n°59 : Longueur d'enregistrement incorrecte
Erreur n°61 : Disque plein
Erreur n°62 : Lecture après la fin du fichier
Erreur n°63 : Numéro d'enregistrement incorrect
Erreur n°67 : Trop de fichiers
Erreur n°68 : Périphérique non disponible
Erreur n°70 : Permission refusée
Erreur n°71 : Disque non prêt
Erreur n°74 : Impossible de renommer avec un lecteur différent
Erreur n°75 : Erreur dans le chemin d'accès
Erreur n°76 : Chemin d'accès introuvable
Erreur n°91 : Variable objet ou variable bloc With non définie
Erreur n°92 : Boucle For non initialisée
Erreur n°93 : Chaîne de masque non valide
Erreur n°94 : Utilisation incorrecte de Null
Erreur n°96 : Impossible de supprimer les événements de cet objet car celui-ci génère déjà le nombre maximal d'événements géré vers des destinataires
Erreur n°97 : Impossible d'appeler une fonction friend sur un objet qui n'est pas une instance de classe de définition
Erreur n°98 : Une propriété ou un appel à une méthode ne peut pas utiliser une référence vers un objet privé, que ce soit comme argument ou comme valeur de retour
Erreur n°321 : Format de fichier incorrect
Erreur n°322 : Impossible de créer le fichier temporaire nécessaire
Erreur n°325 : Format incorrect dans le fichier ressource
Erreur n°380 : Valeur de propriété incorrecte
Erreur n°381 : Index de tableau de propriétés incorrect
Erreur n°382 : Affectation non gérée à l'exécution
Erreur n°383 : Affectation non gérée (propriété en lecture seule)
Erreur n°385 : Index de table de propriété requis
Erreur n°387 : Affectation non autorisée
Erreur n°393 : Lecture non gérée à l'exécution
Erreur n°394 : Lecture non gérée (propriété en écriture seule)
Erreur n°422 : Propriété introuvable
Erreur n°423 : Propriété ou méthode introuvable
Erreur n°424 : Un objet est obligatoire
Erreur n°429 : Le composant ActiveX ne peut pas créer l'objet
Erreur n°430 : La classe ne gère pas Automation
Erreur n°432 : Nom de fichier ou de classe non trouvé pendant une opération Automation
Erreur n°438 : Cet objet ne gère pas cette propriété ou cette méthode
Erreur n°440 : Erreur Automation
Erreur n°442 : La connexion à la bibliothèque de types ou d'objets pour processus distant a été perdue. Choisissez OK pour afficher le dialogue de suppression de référence.
Erreur n°443 : L'objet Automation n'a pas de valeur par défaut
Erreur n°445 : Cet objet ne gère pas cette action
Erreur n°446 : Cet objet ne gère pas les arguments nommés
Erreur n°447 : Cet objet ne gère pas les paramètres régionaux en cours
Erreur n°448 : Argument nommé introuvable
Erreur n°449 : Cet argument n'est pas facultatif
Erreur n°450 : Nombre d'arguments incorrect ou affectation de propriété invalide
Erreur n°451 : Cet objet n'est pas une collection
Erreur n°452 : Ordinal incorrect
Erreur n°453 : Fonction DLL spécifiée introuvable
Erreur n°454 : Ressource de code introuvable
Erreur n°455 : Erreur de verrouillage de ressource de code
Erreur n°457 : Cette clé est déjà associée à un élément de cette collection
Erreur n°458 : La variable utilise un type Automation non géré par Visual Basic
Erreur n°459 : L'objet ou la classe ne gère pas le jeu d'événements
Erreur n°460 : Format de presse-papiers incorrect
Erreur n°481 : Image incorrecte
Erreur n°482 : Erreur d'imprimante
Erreur n°735 : Impossible d'enregistrer le fichier dans TEMP
Erreur n°744 : Le texte recherché est introuvable
Erreur n°746 : Remplacements trop longs









(c) - CYBER@TOM ASSOCIATION 2000-2004