Gestion d'erreurs dans une boucle

mathiouze22

XLDnaute Junior
Re-bonjour à tous,

Arès avoir cherché mon bonheur sur le forum, j'en sors bredouille donc je me permets de vous pousser ma question :

je vérifie en boucle que la référence de mes produits du fichier A est bien présente dans mon fichier B pour rapatrier les quantités de mon fichier B dans mon fichier A
le truc c'est que j'aimerais voir quelle référence de produit n'est pas retrouvée dans le fichier B et que :
1. ca me créé une ligne d'erreur dans un onglet erreur de mon fichier A
2. ca reprenne la boucle de ma recherche de références du fichier A dans mon fichier B, à l'enregistrement suivant l'erreur

J'ai essayé ça mais ca ne marche pas... du tout :s
je ne sais pas où mettre le on error goto, comment le faire reprendre au prendre "i", bref je n'ai rien compris à la gestion d'erreur dans une boucle :s

Code:
'activation de mon fichier A
Windows(h).Activate
v = ActiveSheet.Name
derlig4 = Range("AA65000").End(xlUp).Row
' pour toutes mes références de mon fichier A
For i = 3 To derlig4
'en cas d'erreur, le code qui marche pas
On Error GoTo erreur

'récupération de la référence du fichier A à récup dans le fichier B
ref = Cells(i, 5).Value & Cells(i, 7).Value
referr = Cells(i, 5).Value

'activation de mon fichier B
Windows(g).Activate

'c'est à cette ligne que l'erreur survient si la référence du fichier A n'est pas trouvée
Cells.Find(What:=ref).Activate
quantite = ActiveCell.Offset(0, 2).Value * ActiveCell.Offset(0, 10).Value
commande = ActiveCell.Offset(0, 2).Value * ActiveCell.Offset(0, 11).Value

Windows(h).Activate
Cells(i, 10).Value = quantite
Cells(i, 14).Value = commande
Next

Exit Sub
erreur:
'je réactive mon fichier A
Windows(h).Activate
'je sélectionne la feuille où je veux répertorier la référence de mon fichier A que je n'ai pas trouvé dans mon fichier B
Sheets("Erreur").Select
derlig6 = Range("AA65000").End(xlUp).Row + 1
Cells(derlig6, 1).Value = referr
Cells(derlig6, 2).Value = "Référence non présente dans le fichier B"
Sheets(v).Select
Resume Next

Pouvez-vous m'aider s'il vous plait? :)
 

mathiouze22

XLDnaute Junior
Re : Gestion d'erreurs dans une boucle

bonsoir CBernardT

Tu trouveras ci-joint le fichier A (reporting) et le fichier B (fichier 270.xml)
en espérant que cela vous aide :)
 

Pièces jointes

  • Reporting.xls
    117.5 KB · Affichages: 34
  • Reporting.xls
    117.5 KB · Affichages: 39
  • Reporting.xls
    117.5 KB · Affichages: 35
  • fichier 270.xls
    130 KB · Affichages: 30

mathiouze22

XLDnaute Junior
Re : Gestion d'erreurs dans une boucle

En fait le fichier 200 est juste un second fichier que je viens empiler dans le fichier 270 il n'y a donc pas de traitement lié aux erreurs effectué dessus :)
Il ne faut pas en tenir compte :)
Au pire si vraiment il vous parait indispensable je le joindrai demain depuis le travail.
 

CBernardT

XLDnaute Barbatruc
Re : Gestion d'erreurs dans une boucle

Bonsoir mathiouze22,

Le report des quantités en stock et de celles des commandes sont effectifs dans le classeur Reporting.

Les erreurs de référence sont reportées dans l'onglet "Erreur".
 

Pièces jointes

  • Reporting.xls
    122.5 KB · Affichages: 34
  • Reporting.xls
    122.5 KB · Affichages: 35
  • Reporting.xls
    122.5 KB · Affichages: 35

mathiouze22

XLDnaute Junior
Re : Gestion d'erreurs dans une boucle

Bonjour CBernardT

C'est parfait, non seulement tu as trouvé une solution, mais en plus tu as rendu mon code "propre"
étant un simple utilisateur de macro, tu as du le trouver bien brouillon ! :)

Merci pour tout
par contre du coup j'ai quelque question si cela ne te dérange, pour parfaire ma connaissance de vba

zz = false/true correspond à quoi ?
quel est l'avantage du with ? et je suppose que l'utilisation du with entraine obligatoirement l'ajout d'un pt "." avant les expressions ?

Encore merci :)
 

CBernardT

XLDnaute Barbatruc
Re : Gestion d'erreurs dans une boucle

Bonjour mathiouze22 et le forum,

Tu n'as pas à t'excuser, nous avons tous débuté pareillement. Pour se lancer dans les macros, l'utilisation de l'enregistreur de code est incontournable. Rien n’est acquis immédiatement, l’apprentissage progressant, le langage VBA dévoile ses immenses possibilités. C’est la découverte d’un autre monde, celui de la programmation. Programmation d’amateurs dirons certains, certes, cependant le charme de l’aventure ainsi que l’automatisation recherchée sont bien là. Un algorithmique bien ficelé, une syntaxe rapide, des tâches courantes automatisées, c’est que du bonheur. Des années sont nécessaires, c’est comme apprendre le chinois ! :)

Ton code pouvait être amélioré au niveau de la rapidité d’exécution en particulier. Je l’ai volontairement conservé au niveau de syntaxe que tu avais réalisée afin de ne pas te décourager.

Pour revenir à tes questions :

1-L'instruction With permet d'appliquer une série d'instructions à l'objet indiqué, sans avoir à qualifier le nom de l'objet à chacune de ses utilisations. Le point n’est apparent que parce que l’objet est enlevé.

2- La variable Boolean ZZ permet d’effectuer une opération conditionnelle :
If zz = False Then
Transfert de l’erreur
End If
Dans le cas où elle est False, c'est-à-dire quand la référence n’a pas été trouvée, l’opération de transfert de l’erreur est effectuée. Dans le cas contraire, lorsque la référence est trouvée, la variable ZZ passe à la valeur True et l’opération est sautée. En début de boucle suivante, la variable repasse à la valeur False.
 

Discussions similaires

Statistiques des forums

Discussions
312 391
Messages
2 087 941
Membres
103 679
dernier inscrit
yprivey3