|
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
|