Bonjour à tous,
Je rencontre un petit problème avec une macro pourtant a priori très simple. J'ai pas mal cherché sur internet et notamment sur ce forum, j'ai testé pas mal des réponses que j'ai pu trouver mais aucune n'a résolu mon problème.
Ce que je cherche à faire :
Extraire des infos d'un classeur. Les infos sont dispatchées dans plusieurs onglets et je cherche à les regrouper. Il s'agit de données de types dépenses, recettes etc. qui ont la date pour "clé".
Voici mon code :
Donc pour résumer : je veux créer dans mon nouveau fichier une ligne par mois qui contienne en colonnes les infos contenues dans mes 4 onglets sources. Sauf que chaque onglet n'a pas forcément de ligne pour chaque mois (ex : en onglet 1 je peux avoir des données de janvier 2014 à mars 2015 et en onglet 2 n'avoir des données qu'en 2015). De ce fait la fonction Match renverra parfois une erreur, que je pensais gérer avec On Error GoTo pour pouvoir simplement passer à l'onglet suivant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Do While Application.WorksheetFunction.EoMonth(firstMonth, decalage) <= actualMonth Onglet1: On Error GoTo Onglet2 pos = Application.Match(Application.WorksheetFunction.EoMonth(firstMonth, decalage), Workbooks(wb).Worksheets("Onglet1").Range("A:A"), 0) .Cells(lig, 1) = Workbooks(wb).Worksheets("Onglet1").Cells(pos, 1) .Cells(lig, 2) = Workbooks(wb).Worksheets("Onglet1").Cells(pos, 2) Onglet2: On Error GoTo Onglet3 pos = Application.Match(Application.WorksheetFunction.EoMonth(firstMonth, decalage), Workbooks(wb).Worksheets("Onglet2").Range("A:A"), 0) .Cells(lig, 1) = Workbooks(wb).Worksheets("Onglet2").Cells(pos, 1) .Cells(lig, 3) = Workbooks(wb).Worksheets("Onglet2").Cells(pos, 9) Onglet3: On Error GoTo Onglet4 pos = Application.Match(Application.WorksheetFunction.EoMonth(firstMonth, decalage), Workbooks(wb).Worksheets("Onglet3").Range("A:A"), 0) .Cells(lig, 1) = Workbooks(wb).Worksheets("Onglet3").Cells(pos, 1) .Cells(lig, 4) = Workbooks(wb).Worksheets("Onglet3").Cells(pos, 2) Onglet4: On Error GoTo Suivant pos = Application.Match(Application.WorksheetFunction.EoMonth(firstMonth, decalage), Workbooks(wb).Worksheets("Onglet4").Range("A:A"), 0) .Cells(lig, 1) = Workbooks(wb).Worksheets("Onglet4").Cells(pos, 1) .Cells(lig, 5) = Workbooks(wb).Worksheets("Onglet4").Cells(pos, 12) .Cells(lig, 6) = Workbooks(wb).Worksheets("Onglet4").Cells(pos, 13) Suivant: lig = lig + 1 decalage = decalage + 1 Loop
Sauf que j'ai bien compris qu'une fois la première erreur trouvée, mon instruction ne fonctionne plus. Et je ne sais pas comment gérer ça. Dans tous les exemples que j'ai pu lire il n'y avait qu'une seule ligne qui posait problème dans la boucle. Or moi j'en ai 4 (une par appel à la fonction Match) et de ce fait je ne sais pas où faire mon Resume qui, si j'ai bien compris, est indispensable pour réinitialiser la gestion d'erreur.
Quelqu'un pourrait-il me venir en aide ?
Partager