Réinitialiser un gestionnaire d'erreur [Résolu]

Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
- - Dernière réponse : Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
22 août 2018
- 3 nov. 2009 à 08:59
Salut à tous,
A force de faire trop de .Net j'en oublie les bases de VB6

Le code
Public Sub MyFunction() as boolean
MyFunction = True
On Error GoTo erreur1
' Code pouvant générer une erreur
.....
MyFunction = False
Exit Function

erreur1:
On Error GoTo erreur2

'Code pouvant générer une erreur
.....
MyFunction = False
Exit Function

erreur2:
'Gerer cette erreur

End Function


Le principe :
J'ai un bout de code pouvant générer une erreur que je dois intercepter. SI c'est le cas, je dois essayer une seconde méthode. Cette seconde méthode peut elle aussi générer une erreur que je dois aussi intercepter.

Le problème :
Je n'arrive pas à réinitialiser le gestionnaire d'erreur
Lors du déclenchement de la seconde erreur, le code étant exécuté dans le cadre du gestionnaire d'erreur, tout déclenchement d'une nouvelle erreur renvoie à un éventuel gestionnaire d'une procédure appelante au lieu du second gestionnaire d'erreur.

Je sais qu'il existe un moyen de reseter le gestionnaire pour dire que l'erreur est traitée et que le code qui suit s'exécute dans un cadre normal et non plus dans le cadre du gestionnaire d'erreur.
Mais ma mémoire me fait défaut et je ne sais plus comment on fait.

J'avais gardé un bout de code en exemple mais je l'ai perdu dans un crash disque. Ah ces sauvegardes que l'on doit toujours faire, mais que l'on repousse toujours

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
3
Merci
Usine à gaz ?

Miam miam (c'est ma spécialité quand je suis fatigué).

Allez zou... on en fait une (t'es sûr que l'union européenne le permet, maintenant ?) :

Private Sub Command1_Click()
  On Error Resume Next
' Code pouvant générer une erreur
  toto = 1 / 0
  If Err Then GoTo erreur1
  Exit Sub

erreur1:
  MsgBox "etiquette erreur1 et mon erreur est " & Err.Number
  DoEvents
  On Error GoTo 0
  MsgBox "toujoutd etiquette erreur1 et mon erreur est " & Err.Number
  On Error Resume Next
  toto = 3 / 0
  If Err Then GoTo erreur2
  Exit Sub
  
erreur2:
  MsgBox "etiquette erreur2 et mon erreur est " & Err.Number
  DoEvents
  On Error GoTo 0
  MsgBox "toujoutd etiquette erreur2 et mon erreur est " & Err.Number
  MsgBox "eee"
  'Gerer cette erreur
End Sub

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 130 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jmf0
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
22 août 2018
54
3
Merci
Possible de jouer avec les n° de ligne :

Private Function MyFunction() As Boolean
On Error GoTo Handler
Dim nVal As Long
1   '# Erl contiendra le dernier n° de ligne croisé
    nVal = 1 / 0
2   nVal = 2 / 0
3   nVal = 3 / 0
    MyFunction = True
Exit Function
Handler:
    Select Case Erl
        Case 1
            MsgBox "Erreur à la ligne un"
        Case 2
            MsgBox "Erreur à la ligne deux"
        Case 3
            MsgBox "Erreur à la ligne trois"
    End Select
End Function


Renfield - Admin CodeS-SourceS - MVP Visual Basic

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 130 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
28
3
Merci
jmf > Gérer avec Resume Next, j'y avais penser, c'est d'ailleurs l'exemple donné dans le MSDN. J'ai au moins 4 lignes identifiées dans chaque bloc pouvant générer une erreur. Ça va faire un code un peu lourd et moche.

Renfield > Dans le gestionnaire d'erreur, il ne s'agit pas simplement d'afficher un message, il s'agit d'effectuer un second traitement susceptible lui aussi de générer des erreurs. Si ta solution permet de différencier l'erreur survenue, elle ne règle pas le problème de la double erreur

J'ai la solution aussi de séparer mon traitement en 2 fonctions, avec une 3eme gérant l'appel de ces 2 fonctions. Ça va rendre le code moins lisible, compliquer un peu la maintenabilité mais bon, c'est pas un code modifier tous les jours.

C'est dans ces cas là, ou on s'apperçoit que VB6, pourtant si moderne à l'époque, est maintenant un langage de dinosaures


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 130 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_casy
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
28
0
Merci
Comprendre :
Je n'arrive pas à réinitialiser le gestionnaire d'erreur après déclenchement de la première erreur



[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Commenter la réponse de cs_casy
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
Bonsoir,

Pardonne-moi (fatigué et prêt à aller faire dodo).
Il me semble que tu pourrais et devrais jouer avec Err.clear
Commenter la réponse de jmf0
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
28
0
Merci
Il me semblait moi aussi que c'était un truc du genre, mais avec un petit test rapide, ça n'a pas l'air de marcher.
Pourtant, je n'ai pas souvenir d'avoir mis en place une usine à gaz, il me semble que c'était un truc tout simple.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Commenter la réponse de cs_casy
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
22 août 2018
54
0
Merci
possible d'invoquer à loisir

Resume
ou
Resume Next

pour relancer l'instruction (en ayant bien sur changé un parametre pour en pas regénerer l'erreur)

ou passer à l'instruction suivant celle incriminée.

possible donc de centraliser ton gestionnaire au même endroit.

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield