|
Rappel : Ce cours est enseigné dans la |
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 :
1.2 Gérer les erreurs
Il y a deux choses à savoir avant de pouvoir procéder :
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.
Jusqu’ici, toutes les procédures que nous avons utilisées étaient des procédures
événementielles : leur nom était régi par des règles strictes, qui
spécifiaient le déclenchement de leur exécution. Mais, nous l’avons dit en
introduction, , VB permet comme tout langage de créer des procédures
traditionnelles, baptisées selon votre bon vouloir. Leur exécution sera
alors déclenchée non par une action de l’utilisateur, mais par une
instruction de votre programme. C’est donc l’équivalent VB du Gosub cher
aux cœurs de certains (d'ailleurs, les nostalgiques intégristes peuvent
toujours utiliser Gosub, qui est une instruction reconnue en VB).
Je rappelle que de tels appels peuvent comporter des paramètres, ou non, cela ne change
rien de fondamental à l’affaire.
Un cas banal d’utilisation de cette technique est celui de l’initialisation d’une
Form. Pour que cette Form soit propre, on veut que toutes les zones de
textes soient vierges. Pour peu qu’on ait besoin de procéder à
l’initialisation à plusieurs moments différents de notre application, au
lieu de répéter à chaque fois les mêmes codes, on va créer une procédure
Init() qui comportera les lignes de code nécessaires :
Private Sub Init()
Nom.Text = "" Prénom.Text = "" Etc. End Sub
Pour appeler cette procédure, il suffira ensuite de passer l’instruction
suivante :
Call Init
Et le tour est joué. Quelques éléments supplémentaires toutefois :
Lors du lancement de l’application (du projet), VB a besoin de savoir quelle
procédure (ou quelle Form), est la procédure (la Form) par défaut. Si vous
ne touchez à rien, il s’agit toujours de la première Form qui a été créée
dans le projet. Mais en cas de copier-coller sauvages de Forms , VB peut
finir par se mélanger les pédales et ne plus savoir par où votre
application est censée commencer. Il vous envoie alors un magnifique
message d'erreur, le très classique :
Si vous souhaitez changer de Form par défaut, ou la redéfinir en cas d'erreur, ou
si vous souhaitez lancer le projet par une procédure principale
indépendante de toute Form, cela se passe dans le menu
Projet – Propriétés. Vous y choisissez de lancer l’application :
|