Gestion des erreurs dans une boucle

SkyCorp

XLDnaute Junior
Bonsoir à tous,

J'ai une boucle du style :
Code:
For i = 1 To n
Set VariableA = PotentiellementQuelqueChose
[COLOR="#0000FF"]poursuite du code[/COLOR]
Next
[COLOR="#0000FF"]poursuite du code[/COLOR]

Le problème, c'est que ma ligne Set VariableA = ... peut fournir une erreur (erreur 70 dans mon cas)
Ce qu'il me faut, c'est qu'à détection de l'erreur, le code fasse certaines opérations, puis se place juste avant le Next.
J'ai en tête de mettre un On Error GoTo errorHandler juste avant ma ligne Set VariableA = ...
Mais ensuite, où placer ma balise errorHandler, ou alors, comment revenir juste avant Next ? Avec un autre GoTo ?

Merci d'avance pour votre aide
 

job75

XLDnaute Barbatruc
Re : Gestion des erreurs dans une boucle

Bonsoir SkyCorp,

Code:
For i = 1 To n
  On Error GoTo 1
  Set VariableA = PotentiellementQuelqueChose
  'suite
  GoTo 2
1 'ici le code à exécuter en cas d'erreur
  'suite
2 On Error GoTo 0
Next
Bonne fin de soirée.
 
Dernière édition:

SkyCorp

XLDnaute Junior
Re : Gestion des erreurs dans une boucle

J'ai fait plusieurs tests :

Code:
For i = 1 To n
   On Error GoTo errorHandler
   Set VariableA = PotentiellementQuelqueChose
   [COLOR="#0000FF"]poursuite du code[/COLOR]
poursuiteProgramme:
Next
[COLOR="#0000FF"]poursuite du code[/COLOR]
errorHandler:
If Err.Number = 70 Then
   MsgBox "Erreur 70"
   Cells(i + 3, 1) = i
   Cells(i + 3, 2) = VarA
   Resume poursuiteProgramme
Else
   MsgBox "Une autre erreur est survenue" & vbCrLf & "Erreur #" & Err.Number & vbCrLf & Err.Description
End If
Ca fonctionne. J'ai aussi essayé avec GoTo à la place de Resume. J'ai l'impression qu'il n'y a aucune différence entre les 2, et l'exécution du programme semble le confirmer.

Autre code, qui suit ton exemple :
Code:
For i = 1 To n
   On Error GoTo 1
   Set VariableA = PotentiellementQuelqueChose
   [COLOR="#0000FF"]poursuite du code[/COLOR]
1  If Err.Number = 70 Then
   MsgBox "Erreur 70"
   Cells(i + 3, 1) = i
   Cells(i + 3, 2) = VarA
   Else
      MsgBox "Une autre erreur est survenue" & vbCrLf & "Erreur #" & Err.Number & vbCrLf & Err.Description
   End If
2  On Error GoTo 0
Next
[COLOR="#0000FF"]poursuite du code[/COLOR]
Dans ce cas, j'ai un msgbox qui s'affiche pour tous les cas valides, et qui indique Une erreur est survenue Erreur #0. Donc le programme n'évite pas la partie sur la gestion des erreurs, même si il n'y a pas d'erreur. Faudrait éviter ça.

Dans le 1er cas, est-ce optimal de gérer les erreurs comme cela, avec des allers-retours multiples ?
 

Discussions similaires

Statistiques des forums

Discussions
312 685
Messages
2 090 947
Membres
104 705
dernier inscrit
Mike72