Gestion d'erreur

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 2 juin 2006 à 15:40
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 8 juin 2006 à 00:19
Juste une petite question pour parfaire mes connaissance en
gestion d'erreur.

Donc pour gérer une erreur en VB il faut faire :

on error goto Truc 'Début de procédure

    Exécution 'Instruction de la procédure

    exit sub (ou function suivant le cas) 'Fin des instructions
donc quitte sans exécuter la gestion d'erreur (vue que il n'y à pas hu
d'erreur)

Truc: 'Balise de début de gestion

    Gestion d'erreur 'Gestion de l'erreur


1)

Mais que se passe t'il si dans l'exécution une autre procédure/fonctio? Si j'ai
bien compris si cette procédure/fonction n'a pas de gestion d'erreur et quelle
rencontre une erreur alors c'est la gestion Truc (celle de la procédure appelante)
qui sera exécuter. Si par contre elle à une gestion d'erreur alors c'est cette
gestion d'erreur qui sera exécuter. Mais ensuite que se passe-t-il à la sortie
de ma procédure/fonction? La gestion truc se lance ou je contigu mon exécution
normalement?


2)

Dans une même procédure/fonction est t'il envisageable de faire plusieurs
gestion différente? Je m'explique. Je lance par exemple Excel puis avec j'ouvre
un document.

on error goto OuvertureExcelImpossible

Set MyXl = CreateObject("Excel.Application")

on error goto OuvertureFichierImpossible

MyXl.application.open ("Machin.xls")

exit sub

OuvertureExcelImpossible:

    msgbox "Impossible d'ouvrir Excel"

    exit sub

OuvertureFichierImpossible:

    msgbox "Impossible d'ouvrir le fichier excel"


3)

Dans une exécution je met en place une gestion d'erreur je lance une procédure
(sans gestion d’erreur) qui ouvre Excel et je rencontre une erreur. Dans ce cas
je veux pouvoir fermer Excel dans ma gestion d'erreur. Comment je fais? Car si
je fais ce qui suit ca ne marche pas!

GestionErreur:

    on error resum next 'Cas c'est pour ignorer les erreur

    Set MyXl = GetObject(, "Excel.Application") 'Qui génère
une erreur si excel n'est pas ouvert

    MyXl.application.exit

Dans ce cas une erreur apparait (si excel n'est pas ouvert) comme si je n'avais
pas de gestion (alors que j'ai mit l'instruction ignore les erreurs!)

Command je fais???


4)

Dans une procédure je met en place une gestion d'erreur et dans une fonction appeler
(par ma procédure de départ) l'instruction "on error goto 0"
apparait. Que ce passe t'il? Ma gestion est annuler ou cette instruction n'est
valide que pour cette fonction?


Bon je pense qu'avec cas je devrais être au point. Merci



D'oh! Nuts!
Mmmmm...
 DONUTS

6 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 juin 2006 à 17:42
1) pas trop compris

    gestion d'erreur dans la fonction appelante

    en cas d'erreur dans la fonction appelée, elle est arrêtée

    et c'est la gestion d'erreur qui prend relais, tout dépend de ce qu'il y a dedans


2) plusieurs gestion d'erreur

    parfaitement possible

    en fait il n'y en a qu'une à la fois


3) "une erreur apparaît comme si je n'avais pas de gestion"

    ha bon bizarre ?

    dans ce cas teste le code erreur

    If Err = 0 Then MyXl.application.exit


4) si dans la fonction appelée "On Error GoTo 0"

    non, ça n'annulera que celle qui est en cours dans la fonction elle même

   pas celle de la fonction appelée


PS: pour savoir tout ça, il suffit de générer une erreur toi même

      pas besoin de debug


Private Sub Command1_Click()

    On Error Resume Next

    Error 5

    Error 6

    Call DAN

    MsgBox "suite"

End Sub


Private Sub DAN()

    On Error GoTo 0

    Error 7

    MsgBox "DAN"

End Sub

Daniel
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
2 juin 2006 à 17:44
3)

    on error resum next 'Cas c'est pour ignorer les erreur

    Set MyXl = GetObject(, "Excel.Application")

    MyXl.application.exit


C'est bizarre. Ca fait deux erreur consécutives, mais je pense pas que
ça devrait poser problème... Par contre, l'algo n'est pas franchement
logique je trouve.


Moi, j'aurais fait ça :


    on error goto suite


    Set MyXl = GetObject(, "Excel.Application")


    MyXl.application.exit

suite:


4) Le gesetionnaire d'erreur fonctionne très probablement comme les
gestionnaire d'exception des autres langages... Donc a priori, l'erreur
ne serait traitée que par le dernier On Error ... rencontré durant
l'execution (Celui de la routien la plus "basse").
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
2 juin 2006 à 16:31
Salut,
1) Mets toi en Debug et tu verras bien ou passe ton programme.
2) Idem point 1

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 juin 2006 à 02:09
Salut Polack !

Pour compléter le 2/, tu peux gérer plusieurs erreurs. A toi de malmener ton prog et de mettre des MsgBox pour connaitre les numeros d'erreurs, pour les gérer comme ceci :

On error GoTo GestionErreur
...Instructions...
Exit Sub
GestionErreur:

If Err.Number = 2 Then
Call Procédure1
ElseIf Err.Number = 7 Then
Call Procédure2
Else
MsgBox "Une erreur s'est produite !"
End If

Là j'ai pas d'exemple concrêt sur moi mais j'ai un prog ou je n'ai pas bloqué (va savoir pourquoi !!) la saisie de "texte" dans des texbox où tu mets l'heure et vu que j'ai des ânes qui me saisissent les infos, à coup sûr j'ai eu au lieu de l'horaire, des trucs style "heure inconnue" ou mon préféré : "je ne connais pas l'heure d'arivée") mais le truc c'est que mes données sont de type 'Integer' donc => malaise avec les string...

J'ai pas gérer le type car on m'avait filé le N° de l'erreur (et y'avait un autre problème en +) donc j'ai fais sur le principe que je t'ai donné.

Voilà, beaucoup de charabia pour pas grand chose mais ça faisait un moment qu'on t'avait pas vu, donc je me suis laché sur le clavier.

Allez, bon WE Polack !

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règ
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 juin 2006 à 10:30
Salut Mortalino. Merci de ta réponce. lol tes utilisateurs. Test la valeur des textbox au momand de la sortie (Private Sub CommandButton4_Exit(ByVal Cancel As MSForms.ReturnBoolean)) comme cas plus de "je ne connais pas l'heure d'arivée"

Bon j'ai les réponces à toutes mes question. Merci à tous Je suis bon pour la gestion d'erreur. Merci encors

Pour quand même répondre à [auteurdetail.aspx?ID=464943 rt15] 
je pense affectivement que ton code est mieu que le mien
'---------------------------------
     on error goto suite
    Set MyXl = GetObject(, "Excel.Application")
    MyXl.application.exit
suite:
'---------------------------------

Merci

    Bonne semaine à tous (même si une journée
pas payer, vous saviez que votre brut d'aujourd'hui part au impôt. Mais saviez
vous que votre patron est exonérer de charge patronal, donc votre patron
débourse 100% de votre brut au lieu de ~ 180% de votre brut, soit le brut pour
vous, et, 80% du brut en impôt. Cas profite vraiment au retraite???)

D'oh! Nuts!
Mmmmm...
 DONUTS
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
8 juin 2006 à 00:19
Moi je m'en fiche, je suis travailleur "non posté", c'est à dire que j'ai le droit de récupérer cette journée (en rtt) et je suis quand même payé sur la base du férié.

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
Rejoignez-nous