Se connecter avec
S'enregistrer | Connectez-vous

Boucle On Error GoTo

Dernière réponse : dans Programmation
Partagez

Bonjour tout le monde!

Ca fait un moment que je n'étais pas venu sur le forum!
Est ce que vous pourriez m'aider concernant la gestion d'erreur avec "On Error GoTo"
Voila, j'importe des pages web sous excel pour aller chercher des infos, mais avec le temps (nombre de pages importées durant la macro) l'importation devient incomplete. J'utilise l'application suivante pour importer mes pages web:

  1. With ActiveSheet.QueryTables.Add(Connection:=url_page, Destination:=Sheets("YAHOO").Range("A1"))
  2. ..
  3. ..


Comme solution temporaire je dis a la macro de reimporter la page web si elle est incomplete sous excel.
Mais j'ai decouvert qu'en utilisant "On Error GoTo" le renvoi ne s'effectuait qu'une seule fois.

  1. On Error GoTo erreur
  2.  
  3. erreur:
  4. toto = InputBox(ksbvflo)
  5. Sheets(1).Cells(1, 1) = toto
  6. Sheets(1).Cells(2, 1) = toto / 2
  7. 'si toto n'est pas un nombre, erreur est relancé


Moi je voudrais que erreur soit relancé autant de fois qu il est necessaire, jusqu à ce qu il n'y ait plus de probleme.

En meme temps si vous connaissez une solution pour eviter que l'importation soit incomplete... je suis toute ouie!

Merci beaucoup!!

Adri

Autres pages sur : boucle error goto

Si je comprends bien l'import provoque une erreur.
Alors Tu devrais plutot faire un truc du genre :

  1. import:
  2. On Error GoTo erreur
  3.  
  4. With ActiveSheet.QueryTables.Add(Connection:=url_page, Destination:=Sheets("YAHOO" ).Range("A1" ))
  5.  
  6.  
  7. erreur:
  8. toto = InputBox(ksbvflo)
  9. Sheets(1).Cells(1, 1) = toto
  10. Sheets(1).Cells(2, 1) = toto / 2
  11. 'si toto n'est pas un nombre, erreur est relancé
  12. resume import
  13. sortie:
  14. exit sub


C'est pas forcément très propre mais ca te reverra à ta ligne tout seule, et systématiquement il me semble

Mmmm... non desolé ce code ne fonctionne pas comme je le souhaite
  1. import:
  2. On Error GoTo erreur
  3.  
  4. erreur:
  5. toto = InputBox(ksbvflo)
  6. tata = toto / 2
  7.  
  8. Resume import
  9. sortie:
  10. Exit Sub


En fait ce que j'essaye de dire c reviens au debut tant qu'il y a une erreur. Une sorte de boucle sur l'erreur tant qu'elle serait presente.

  1. On Error GoTo erreur
  2.  
  3. erreur:
  4. toto = InputBox(ksbvflo)
  5. tata = toto / 2
  6. 'on revient a erreur tant que toto/2 donne une erreur
  7.  
  8. ...
  9. ... 'suite du code


Dans l'exemple ci dessus on sortirait de cette boucle une fois que toto est un nombre.

Je cherche à rendre ce processus plus general pour ensuite l'appliquer à de l'import de données.

Merci beaucoup

Soluce crade (j'en ai honte) :
  1. Sub solucecradejenaihonte()
  2. On Error GoTo erreur
  3.  
  4. revenir:
  5. toto = InputBox(ksbvflo)
  6. tata = toto / 2
  7. On Error GoTo 0
  8.  
  9. ' // suite du code
  10. Exit Sub
  11. erreur:
  12. GoTo revenir
  13. End Sub


Soluce propre :
  1. Sub solucepropre()
  2. Dim toto As String
  3.  
  4. Do
  5. toto = InputBox(ksbvflo)
  6. Loop While Not IsNumeric(toto)
  7.  
  8. ' // suite du code
  9. End Sub


EDIT: Ose me dire que tu choisis la première et je t'envoie chez les télétubbies pour un mois entier :fou: 

LOL Merci Zeb ! :) 

La deuxieme solution m'a permis de trouver la solution à mon probleme:

  1. Sub solucepropre()
  2.  
  3. Dim toto As Range
  4.  
  5. Do
  6. Set toto = Sheets(1).Cells.Find("toto", lookat:=xlWhole)
  7. Loop While toto Is Nothing
  8.  
  9. toto.Select
  10. ' // suite du code
  11. End Sub


Mais pour revenir au probleme plus general de la boucle avec erreur,
la tu fais verifier que toto est bien un nombre car on était dans un cas simple,
mais si on ne veut pas definir les caractériques de cette variable,
est ce qu'il est possible de refaire la manip tant que cette variable est incorrecte?

Ben oui, on peut.

>>variable est incorrecte
On boucle tant que TA condition n'est pas respectée. Une condition ça peut être complexe.
Posez votre question