La gestion des Erreurs
On sait que dans une application digne de ce nom, même lorsqu’une erreur se produit (fichier introuvable, mauvaise saisie au clavier, etc.) cette erreur ne donne pas lieu à un plantage inopiné du programme, mais qu’elle est gérée par ce programme. Cette brève section est donc consacrée aux erreurs à l’exécution, et au moyen de les prévoir (à défaut de pouvoir les empêcher).
1.1 L’objet Err
C’est là l’occasion de découvrir, après App, le deuxième objet de ce cours qui ne soit pas un contrôle : l’objet Err.
Cet objet, qui n’étant pas un contrôle, ne possède pas d’existence graphique, est utilisé par toute application pour stocker l’état des erreurs qu’elle a éventuellement provoquées. On pourra, dans le code, avoir recours à différentes propriétés de l’objet Err :
Number : désigne le code de cette erreur, permettant d’identifier son type
Description : il s'agit d'un rapide bla-bla sur la nature de l’erreur
Source : qui indique l’objet à l’origine de l’erreur
1.2 Gérer les erreurs
Il y a deux choses à savoir avant de pouvoir procéder :
Toute erreur provoque un événement appelé >Error.
VB impose de gérer les erreurs par une programmation non structurée. C'est une pure horreur, mais c'est comme ça, on n'y peut rien.
Il faudra donc, au début d’une procédure susceptible d’engendrer des erreurs (les mauvaises langues traduiront : "au début de chaque procédure...), taper la ligne suivante :
On Error GoTo Etiquette
Une étiquette, c’est une sorte de sous-titre à l’intérieur de la procédure, se terminant par le signe ":" (deux points).
Oui, je sais, c’est une pure horreur que d’obliger les gens à mettre des GoTo dans un joli programme structuré. Mais que voulez-vous, ici, Microsoft ne nous a pas laissé le choix. L’idée est donc que si une erreur, quelle qu’elle soit, survient au cours de cette procédure, au lieu de se planter bêtement, l’application ira gentiment rechercher l’étiquette que vous avez désignée, et exécutera son code.
Et du coup, pour éviter que le déroulement normal de la procédure n’exécute lui aussi ce qui se trouve sous l’étiquette, il faudra forcer la sortie de la procédure avant cette étiquette par l’instruction Exit Sub. Voilà ce que cela donne :
Public Sub Totoche()
On Error GoTo Oops
Tata = 12 / 0
Exit Sub
Oops:
Msgbox("Diviser par zéro, c’est pas malin !")
End Sub
Bien sûr, ici, notre gestionnaire d’erreurs est vraiment a minima. On peut faire quelque chose de beaucoup plus fin en y testant par exemple la propriété Err.Number, et en réagissant différemment selon le code (donc le type) de l’erreur qui est survenue.