Vous êtes sur la page 1sur 5

6 GESTION DES ERREURS

Il existe trois grandes catgories d'erreurs. La premire regroupe les erreurs de syntaxe. Elles sont faciles dtecter car le compilateur les signale. L'diteur de VB les dtecte mme au cours de la frappe. La deuxime partie est constitue des erreurs de logique (algorithme). Cette partie est plus importante et ces erreurs sont plus difficiles corriger. Cela peut tre des compteurs de boucles qui n'avance pas, ou des tests de sortie jamais vrifis qui entranent des boucles infinies. La troisime recense les erreurs de fonctionnement. Par exemple, tenter d'ouvrir un fichier qui n'existe pas. Ces erreurs peuvent tre gres dans le code et interceptes pour ne pas interrompre le droulement du programme. Pour tre rattrapes, ces erreurs doivent tre anticipes. Nous allons voir deux mthodes pour y parvenir.

6.1

Lobjet Err

VB met disposition un objet qui rcupre les erreurs renvoyes par le systme lors de lexcution du programme. Cet objet stocke un numro en fonction de lerreur survenue, ainsi quune description. Le programmeur peut ainsi grer les erreurs en fonction des numros retourns par Err. Proprits principales de Err : Number : Valeur indique comme argument pour l'instruction Error. Il peut s'agir de n'importe quel numro d'erreur valide. Source : Nom du projet Visual Basic en cours. Description : Chane correspondant la valeur renvoye par la fonction Error pour la proprit Number indique, si cette chane existe. Si la chane n'existe pas, l'argument Description contient le message "Erreur dfinie par l'application ou par l'objet". On utilise lobjet avec linstruction On Error place en dbut de procdure. Cette instruction prcise le comportement du programme en cas derreur. On utilise aussi Resume qui prcise o reprendre lexcution aprs la gestion dune erreur.
Private Sub Toto() On error Resume Next Cette instruction prcise quen cas derreur, on poursuit lexcution la ligne suivant celle qui a provoqu lerreur. Code End Sub Private Sub Toto() On error Goto Piege_a_erreur Code Ver 2.2.0 - 27 / 02 / 2006

Exemple :

56

Cette instruction prcise quen cas derreur, on saute Piege_a_erreur puis on excute le code qui suit cette tiquette. Piege_a_erreur : Code End Sub

directement

ltiquette

6.2

Pige erreurs

Cette mthode consiste aller une tiquette aprs toute erreur. On peut grer les erreurs dans une sous partie de la procdure. On utilise l'instruction On Error Goto Une Etiquette pour atteindre la gestion d'erreur situe en fin de procdure. On ajoute une instruction Exit Sub ou Exit Function pour quitter la procdure sans excuter la gestion d'erreur si la procdure se droule normalement.
Sub MaProcedure() On Error Goto Trait_Erreur 'Etiquette atteindre si erreur Code Trait_Fin: Exit Sub 'Sortie si pas d'erreur sans excuter ce qui suit

Ex :

Trait_Erreur: Select Case Err 'Traitement de l'erreur selon le numro Case 1004 Resume Next Excution de la ligne suivant celle qui Case Else a gnr lerreur MsgBox "Erreur numro : " & Err.Number & vbcrlf & _ "Description : " & Err.Descripion Resume Trait_Fin End Select End Sub

6.3

Traitement en ligne

Le principe est de tester lobjet Err aprs une ligne suspecte pour grer une ventuelle erreur. On utilise linstruction On Error Resume Next. Cette instruction prcise quil faut excuter la ligne suivante en cas derreur. Cette technique impose danticiper efficacement les erreurs possibles car seules certaines lignes seront suivies dun test de lobjet Err. On utilise la mthode Clear pour rinitialiser l'objet Err.
Ver 2.2.0 - 27 / 02 / 2006 57

Par scurit, on utilise un pige erreur pour traiter les erreurs non prvues. On quitte ainsi la procdure toujours proprement.
Sub Toto() On Error Resume Next 'Passe l'instruction suivante si erreur 'Instruction suspecte (si rpertoire inexistant) ChDir "C:\AIGEM" Gestion de lerreur Select Case Err Case 76 MkDir "C:\AIGEM" ChDir "C:\AIGEM" Err.Clear Case Else Goto Trait_Erreur End Select

'Erreur de chemin d'accs 'Cration du rpertoire 'Changement de rpertoire 'Lerreur est gre on vide lobjet 'erreur non gre (cas imprvu)

Exit Sub Trait_Erreur : 'Pige erreur Select Case Err Case Else MsgBox "Erreur numro : " & Err.Number & vbcrlf & _ "Description : " & Err.Descripion End Select End Sub

Voici enfin un exemple efficace de gestion d'erreur. Il permet d'excuter une partie de code quoi qu'il arrive. Cette technique repose sur le pigeage des erreurs.
Sub MaProcedure() On Error Goto Trait_Erreur 'Etiquette atteindre si erreur Code Trait_Fin: 'Ce code est excut qu'il y ait des erreurs ou non Code Exit Sub 'Sortie si pas d'erreur sans excuter ce qui suit Trait_Erreur: 'Etiquette atteinte sur erreur Select Case Err 'Traitement de l'erreur selon le numro Case 1004 Resume Next Case Else 'Traitement d'erreurs imprvues MsgBox "Erreur numro : " & Err.Number & vbcrlf & _ "Description : " & Err.Descripion Resume Trait_Fin 'Reprise de l'excution l'tiquette de sortie de procdure End Select End Sub

Cette mthode prsente lavantage de toujours excuter le code plac entre les tiquettes Trait_Fin et Trait_Erreur . En effet, si tout se droule sans erreur, la section Code va sexcuter jusqu linstruction Exit Sub place aprs Trait_Fin.
Ver 2.2.0 - 27 / 02 / 2006 58

Si une erreur non gre spcifiquement survient, le cas Case Else sera excut et linstruction Resume Trait_Fin renvoie lexcution du programme ltiquette spcifie. Cest loccasion de librer les variables objet, de fermer les fichiers, annuler une transaction etc.

Lessentiel

N'oubliez pas que l'aide en ligne est votre premier support de dveloppement. N'hsitez pas la consulter frquemment. La connaissance exhaustive de tous les vnements, de toutes les proprits et mthodes de tous les objets est illusoire. Ainsi, vous apprendrez un langage et vous formerez sur chaque nouvel objet ou contrle. Vous trouverez divers ouvrages pour obtenir de l'information sur ce qui a t trait ici, notamment l'accs aux donnes qui constitue un lment important du dveloppement VB. Intressez-vous SQL, langage indispensable de manipulation de donnes. Vous pouvez enfin poursuivre avec les thmes suivants. Ils sont prsents dans un ordre cohrent et vous permettront d'aller plus loin avec Visual Basic.

Ver 2.2.0 - 27 / 02 / 2006

59

Ver 2.2.0 - 27 / 02 / 2006

60