Réinitialiser un gestionnaire d'erreur

Résolu
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 2 nov. 2009 à 21:48
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 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

7 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
2 nov. 2009 à 22:42
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
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 nov. 2009 à 08:33
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
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
3 nov. 2009 à 08:49
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
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 nov. 2009 à 21:49
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
0

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

Posez votre question
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
2 nov. 2009 à 22:03
Bonsoir,

Pardonne-moi (fatigué et prêt à aller faire dodo).
Il me semble que tu pourrais et devrais jouer avec Err.clear
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 nov. 2009 à 22:10
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 nov. 2009 à 08:59
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
0
Rejoignez-nous