Rechercher : dans
Par :

VB6 Gestion d'erreurs sur tout le programme

Dernière réponse le 15 oct 2008 à 17:35:17 cedricpah, le 17 jun 2008 à 11:34:57 
 Signaler ce message aux modérateurs

Bonjour,

Je vais finir par faire un FAQ à moi tout seul.
Voilà ma question est simple, je cherche à gérer les erreurs sous VB6. Bien sur je connais l'intruction On error Goto ... mais ce que je souhaiterais c'est que quelque soit la procédure qui est en cours, me rendre à un endroit précis. En fait je n'ai pas envie d'écrire dans chacune des fonctions on error goto et écrire ensuite un code de gestion d'erreur, mais j'ai envi que la gestion d'erreur soit global à tout le document. Si quelqu'un à une solution (si elle existe), qu'il n'hésite pas! merci!

Meilleures réponses pour « VB6 Gestion d'erreurs sur tout le programme » dans :
Gestion des erreurs Voir Par défaut, en Pascal, la gestion des erreurs est assurée par le compilateur. C’est pour cette raison que le programme s’arrête en affichant un message commençant par Runtime error suivi par le numéro de l’erreur … Alors si le programmeur désire...
[Linux] Installer les programmes (gestion des paquets, compil) Voir************************************************************** * INSTALLER UN PROGRAMME SOUS LINUX : **** * LA GESTION DES PAQUETS ou COMMENT SE SIMPLIFIER LA VIE * * UN EXEMPLE DE COMPILATION POUR SE FAIRE LA MAIN ...
Télécharger Graphical Boot Manager VoirGraphical Boot Manager est un programme de gestion de programmes. L'application est lancée quand votre ordinateur se met en marche et vous permet de choisir le système opérationnel que vous choisissez d'utiliser. Ces principales caractéristiques : ...
Enterprise Resource Planning (ERP) - Progiciel de Gestion Intégr VoirIntroduction aux ERP Les ERP (en anglais Enterprise Resource Planning), aussi appelés Progiciels de Gestion Intégrés (PGI), sont des applications dont le but est de coordonner l'ensemble des activités d'une entreprise (activités dites verticales...
Java - Les exceptions VoirLa nécessité de détecter les erreurs Tout programme comporte des erreurs, même si celui-ci semble fonctionner à merveille. Chaque programmeur essaye de réduire au minimum le nombre d'erreurs, mais toutes les erreurs ne peuvent pas forcément être...
C++ - l'orienté objet VoirStyles de programmation supportés Le C++ est un langage de programmation polyvalent qui supporte non seulement la programmation orientée objet, mais aussi l’abstraction des données et la programmation générique en complément des techniques de...

1

choubaka, le 17 jun 2008 à 11:44:44

Salut

il suffit de créer une procédure publique dans un module séparé.

il te suffira alors d'effectuer un call de cette procédure

Chouba,
Pochard d'assaut .. 

Répondre à choubaka

2

cedricpah, le 17 jun 2008 à 11:50:14

Merci,
alors ce n'est pas bien claire pour moi...
tu peux me mettre un exemple de code pour la procédure publique? Puis je récupérer la sub qui fait appel à la procédure? Et je dois mettre call nom_de_la_procedure ou ?

Répondre à cedricpah

3

Polux31, le 17 jun 2008 à 11:56:29

Bonjour,

Bien qu'étant autorisé en VB le "On Error Goto..." n'est pas très "propre" ni très fiable. Il est préférable d'utiliser "On Error Resume Next" et récupérer l'erreur en faisant :
If Err.Number > 0 Then .... End If.
C'est un avis personnel, mais par expérience je n'utilise plus le "On Error Goto".

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

4

cedricpah, le 17 jun 2008 à 11:58:23

Alors d'accord je pourrais utiliser On Error Resume Next mais dois-je l'écrire en haut de chacune de mes fonctions?

Répondre à cedricpah

5

Polux31, le 17 jun 2008 à 12:07:42
  • +1

Oui c'est préferable et en fin de fonction du fait le If Err.Number > 0 Then ...

Tu peux récupérer ainsi le numéro et la description de l'erreur et les passer en paramètre à une procédure public:

Function myFonction()

On Error Resume Next

'le code ...

If Err.Number > 0 Then
   Call procErrmsg(Err.Number, Err.Description)
   Exit Fuction
End If

End Function
----------------------------------

Sub procErrmsg(ByVal numErr As Integer, ByVal msgErr As String)

   MsgBox msgErr, VbExclamation, "Erreur: " & numErr

End Sub


;o)

Polux «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

6

cedricpah, le 17 jun 2008 à 12:20:58

Merci beaucoup, cela m'embête de devoir coller On Error Resume Next. Je vais peut être pas le faire partout (par exemple pas dans le code de chaque bouton ou dans le code de chaque menu) bon toujours est il que ta fonction m'est bien utile, et je vais sauver l'erreur dans un fichier texte (et oui il faut que l'erreur soit presque transparente).
dernière petite question, le Err.number retombe-t-il automatiquement à 0 à la sortie de la fonction?

Répondre à cedricpah

7

Polux31, le 17 jun 2008 à 12:52:01

Err.Number renvoit le numéro de l'erreur, il n'y a pas besoin de l'initialiser. Si il n'y a pas d'erreur ça renvoit 0 tout simplement.

Effectivement, il n'est pas nécessaire de coller On Error Resume Next partout dans le code. Il faut cibler les procédures et fonctions pouvant lever une éxception.

Bon courage pour la suite.

;o)

Polux «Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

8

cedricpah, le 17 jun 2008 à 13:45:21

Merci, encore un problème de résolu grâce à toi!

Répondre à cedricpah

9

Polux31, le 17 jun 2008 à 14:18:03

De rien, c'est avec plaisir

Bonne continuation.

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

10

gg2laba, le 15 oct 2008 à 16:06:18

Bonjour

désolé pour le vieux up,

Cependant :

J'ai regardé la date : il serait temps de passer à .NET :-D, ou un truc qui gère un pepu mieux les erreurs.

Vous me direz :

Comment es-tu tombé sur ce message si tu ne t'interressais pas à "VB6 Gestion d'erreurs sur tout le programme" ?, héhé c'est bien ce que je cherchais hélas ^^ ( Office ... , vieux programmes ...)

... Merci égallement à toi.

Répondre à gg2laba

11

Polux31, le 15 oct 2008 à 16:12:33

Salut,

Pourquoi en .Net les erreurs seraient-elles mieux gérées ???

Il suffit de se donner la peine de vouloir les gérer en VB.

Bonne continuation.

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

12

gg2laba, le 15 oct 2008 à 16:36:17

J'ai oublier de préciser sinon euh en fait à mes souvenirs "on error goto" est plus pratique (par rapport à "on error resume next") : le "on error resume next" de cette façon ne previent pas lors d'une erreur même lors du debugage. voilà ce que je propose pour les prochains :

Private Sub maSub()

On Error GoTo gErr

...

gErr:
If Err.Number = 2452 Then 'pas de parent
Else
Resume Next

End Sub

après question propreté .. je ne suis pas trop monsieur propre non plus :-p.

après avoir vu le message de Polux31 -->

Je vois que tu est très attentif sur le forum Polux31, merci à toi.

pour la gestion des erreurs, je suis d'accord que on peut faire ca bien quand même, mais pour moi un "on error goto/resume" ca ne vaut pas un try/catch ! après c'est peut-etre possible de faire ca en VB6 (pas simple). mais même pour moi .NET > VB6 ( pas forcement en tout points ) sans problème, si tu n'a jamais essayé c'est l'ocasion en plus il ya des versions gratuites !

salut !

Répondre à gg2laba

13

Polux31, le 15 oct 2008 à 16:52:24

Merci, je connais .NET.

Pour info: Le On Error Resume Next permet de récupérer l'erreur de la même manière que On Error Goto. Le Resume Next laisse le code s'executer jusqu'à l'interception de l'erreur par un If Err.Numbre <> 0 Then ... par exemple. Un Goto gErr envoie directement à gErr: sans executer tout le code. Ce qui peut être génant

Je ne vois pas beaucoup de différences entre un try/catch et un On Error Goto ou Resume Next. Ni en quoi c'est mieux. L'un et l'autre servant à gérer des exceptions. Le tout c'est de se donner la peine de les utiliser.

bonne soirée

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

14

 gg2laba, le 15 oct 2008 à 17:35:17

"Merci, je connais .NET. " ( ? ) -->

désolé d'avoir mal interpreté ta phrase : "Pourquoi en .Net les erreurs seraient-elles mieux gérées ??? " j'avais compris : Pourquoi, en .Net les erreurs seraient-elles mieux gérées ?

"Un Goto gErr envoie directement à gErr: sans executer tout le code. Ce qui peut être génant" -->
ou peu prendre tout son interret. et puis le resume next positionné après l'étiquette gErr: permet de revenir dans des cas définits. Un point d'arret après l'étiquette permet de voir quand une erreur est détectée (lors du debugage), dès quelle l'est.

"Je ne vois pas beaucoup de différences entre un try/catch" -->
si quand même ! une grosse que je connais : avec le try catch il ya un système de remontée d'erreur dans la pile d'appels des fonctions, les erreurs peuvent etre gérées au niveau que tu veux, je ne me rappelle pas super avec .NET non plus mais il doit faire comme les autres je pense !.

"bonne soirée" -->
merci pareillement.

Répondre à gg2laba
Collection CommentÇaMarche.net