On error goto ne fonctionne pas dans une boucle

Résolu
cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 - 7 nov. 2009 à 22:56
cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 - 8 nov. 2009 à 15:31
bonsoir à toutes et tous
j'ai pourtant l'habitude de gérer les erreurs mais je ne comprends pas le comportement de VB ici:
"For i = 2 To 15
path = App.path & "\Dicos" & i & "Def"
On Error GoTo erreur
MsgBox Err
Name path & "pasdef.txt" As path & "old_pasdef.txt"
Fichier = path & "old_PasDef.txt"
f = FreeFile(0)
Open Fichier For Input As #f
On Error GoTo 0
Do While Not EOF(f)
Input #f, buf
GetDef buf, path
Loop
Close #f
erreur:
On error goto 0
MsgBox Err

Next i"


à la première boucle si le fichier "pasdef.txt" n'existe pas le gestionnaire d'erreur m'envois bien l'erreur 53 et saute à l'étiquette erreur mais à la deuxième boucle, si le fichier "pasdef.txt" n'existe toujours pas, le gestionnaire d'erreur activé renvoi bien l'erreur 53 mais ne saute plus à la l'étiquette erreur .

Je ne comprends pas où est mon erreur????
A voir également:

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
8 nov. 2009 à 08:06
Bonjour,

Oui... et on en parlait récemment encore dans une discussion ouverte par Casy ...

Detoutes manières, il faut, chaque fois que possible, éviter une gestion inutile de l'erreur, qu'il suffit de ne pas provoquer.
Dans ton cas par exemple (et sans analyse de tes instructions, dont tu es seul à décider), ceci évite ta gestion d'erreur (puisqu'il n'y en a pas ... :

For i = 2 To 15 
  path = App.path & "\Dicos" & i & "Def" 
  If dir(path & "pasdef.txt", vbnormal or vbhidden) <> "" then 
    Name path & "pasdef.txt" As path & "old_pasdef.txt" 
    Fichier = path & "old_PasDef.txt" 
     f = FreeFile(0) 
     Open Fichier For Input As #f 
        Do While Not EOF(f) 
          Input #f, buf 
          GetDef buf, path 
        Loop 
   Close #f 
   Kill Fichier 
Next i 
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 nov. 2009 à 01:01
Salut
Err conserve sa valeur tant qu'une autre instruction n'a pas été exécutée.
MsgBox Err te renvoie donc la dernière erreur en mémoire.

Y a t-il une gestion d'erreur dans la Sub GetDef ?
Si tel est le cas, elle annule faite dans ces lignes ici.

A la sortie après le Close, tu passes ur l'étiquette Erreur, mais sans avoir d'erreur.
Les lignes qui suivent seront donc exécutées avec ou sans erreur - méfiance.
Ajouter un Exit Sub ou Exit Function avant l'étiquette Erreur

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
1
cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 1
8 nov. 2009 à 01:52
merci pour ton intéret
mais là n'est pas le problème à la deuxième boucle la valeur de err est bien à 0!
mais je viens de trouver sur un autre message:http://www.vbfrance.com/forum/sujet-PROBLEME-INSTRUCTION-ON-ERROR-GOTO_693869.aspx la réponse de "v.massip" : en fait le gestionnaire ne peut gérer qu'une erreur par procédure et il faut que l'erreur qu'il a traité soit terminée par l'instruction "resume"
donc j'ai réécrit comme ceci et ça fonctionne bien:

"
For i = 2 To 15
path = App.path & "\Dicos" & i & "Def"
On Error GoTo erreur
Name path & "pasdef.txt" As path & "old_pasdef.txt" 'renomme un fichier
Fichier = path & "old_PasDef.txt"
f = FreeFile(0)
Open Fichier For Input As #f
On Error GoTo 0
Do While Not EOF(f)
Input #f, buf
GetDef buf, path
Loop
Close #f
Kill Fichier 'suprime du disque dur le "fichier"
suite:
Next i
Exit Sub
erreur:
If Err = 53 Then 'si le fichier à renommer n'existe pas
Resume suite 'obliger de mettre une instruction résume pour remettre à zéro le gestionnaire d'erreur _
car le gestionnaire ne peut détourner qu'une erreur par procédure
Else
Error Err 's'il y avait une erreur inattendue!
End If
"
1
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 nov. 2009 à 04:27
Ouh la, j'avais pas vu que tu avais mis la gestion d'erreur à l'intérieur d'une boucle = pas bien
Pour ce qui est du Resume, ils en parlent dans l'aide de On Error, je pensais que tu avais commencé par là ...
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
8 nov. 2009 à 08:08
Pardon : un End If oublié avant Next I, hein ... bien sûr.
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
8 nov. 2009 à 09:11
Si, par contre, ta question était plus "générale" et ton exemple n'était là que pour illustrer ce que tu voulais dire :
Je t'ai parlé plus haut d'une discussion ouverte récemment par Casy. La voilà :
http://www.vbfrance.com/forum/sujet-REINITIALISER-GESTIONNAIRE-ERREUR_1371449.aspx
0
cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 1
8 nov. 2009 à 15:31
bonjour
merci pour votre intéret, c'est vrai qu'il est plus simple , plus logique d'éviter de générer une erreur, mais souvent on essaie de résoudre le pb d'erreur après l'avoir subi!
Je pensais qu'avec on "error goto 0" ca pouvait terminer l'erreur de gestion
et dans les recherche sur le forum on ne trouve pas toujours les bonnes réponses car notre question ne se retrouve pas dans les intitulés des discusions

merci encore
0
Rejoignez-nous