Faire une synthèse de plusieurs classeurs, boucle while
Bonjour à tous,
Problème rencontré : J'effectue 3 extractions hebdomadaires identiques dans le format que je souhaite synthétiser dans un seul classeur. J'ai mis en place une boucle, cependant le résultat n'est pas celui escomptée.
Explications :
3 classeurs : le n°1, le n°2 et le n°3. Le résultat souhaité est de coller les codes articles, qté et valo des différents classeurs les uns en dessous des autres.
résultats souhaités :
Article Qté Valo
1 1 1
2 2 2
3 3 3
résultats obtenus :
Article Qté Valo
1
1
1
2
2
2
3
3
3
Conséquences ; Lorsque j'utilise la formule ActiveSheet.UsedRange.Rows.Count + 1 pour trouver la première ligne ( par exemple en colonne B), le système prend tous les articles collés précedemment + 1 lignes => ce qui explique ce décalage.
Mais Je ne sais pas ce qu'il faut faire pour y arriver autrement....
ChDir "W:\PUBLIC\Planifier_Livrer\T00_Public\VEX\2016\Extraction\MAG PF"
Classeurlocal = Dir("W:\PUBLIC\Planifier_Livrer\T00_Public\VEX\2016\Extraction\MAG PF\*.XLS")
While Len(Classeurlocal) > 0
Workbooks.Open Classeurlocal
'Extraction de la colonne article
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("B4:B" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("A" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Activate
'Extraction de la colonne valo
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("C4:C" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("C" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Activate
'Extraction de la colonne qté
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("E4:E" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("D" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Activate
'Extraction des mouvements
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("I4:K" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("L" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Close False
Classeurlocal = Dir
Wend
Je vous remercie pour votre aide,
Cordialement,
Laurent.
Bonjour Laurent,
Est-il possible de joindre 4 fichiers simplifiés?
Les classeurs 1 - 2 - 3 et le dernier avec le code actuellement utilisé.
Ou alors d'éditer ton message, et de mettre les parties de code à l'intérieur des balises prévues à cet effet (bouton "Code" au dessus de la zone de saisie de message)
Bonjour,
Voici le code :
'Essai 1
ChDir "W:\FGR\FIC\PUBLIC\Planifier_Livrer\T00_Public\VEX\2016\Extraction\MAG PF"
Classeurlocal = Dir("W:\FGR\FIC\PUBLIC\Planifier_Livrer\T00_Public\VEX\2016\Extraction\MAG PF\*.XLS")
While Len(Classeurlocal) > 0
Workbooks.Open Classeurlocal
'Extraction de la colonne article
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("B4:B" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("A" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Activate
'Extraction de la colonne valo
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("C4:C" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("C" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Activate
'Extraction de la colonne qté
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("E4:E" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("D" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Activate
'Extraction des mouvements
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("I4:K" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("L" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Close False
Classeurlocal = Dir
Wend
Article Quantité Valo
1
1
1
2
2
2
3
3
3
Explication : Les données sont colées bout à bout et non l"une à côté de l'autre.
Je vois l'erreur mais je ne la comprends pas !
Merci pour votre aide,
Cordialement,
Laurent
d3d9x a écrit :Bonjour Laurent,
Est-il possible de joindre 4 fichiers simplifiés?
Les classeurs 1 - 2 - 3 et le dernier avec le code actuellement utilisé.
Ou alors d'éditer ton message, et de mettre les parties de code à l'intérieur des balises prévues à cet effet (bouton "Code" au dessus de la zone de saisie de message)
Bonjour,
Voici le code :
'Essai 1
ChDir "W:\FGR\FIC\PUBLIC\Planifier_Livrer\T00_Public\VEX\2016\Extraction\MAG PF"
Classeurlocal = Dir("W:\FGR\FIC\PUBLIC\Planifier_Livrer\T00_Public\VEX\2016\Extraction\MAG PF\*.XLS")
While Len(Classeurlocal) > 0
Workbooks.Open Classeurlocal
'Extraction de la colonne article
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("B4:B" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("A" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Activate
'Extraction de la colonne valo
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("C4:C" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("C" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Activate
'Extraction de la colonne qté
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("E4:E" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("D" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Activate
'Extraction des mouvements
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("I4:K" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
DebutNomFichier = ActiveSheet.UsedRange.Rows.Count + 1
Range("L" & ActiveSheet.UsedRange.Rows.Count + 1).Select
ActiveSheet.Paste
Workbooks(Classeurlocal).Close False
Classeurlocal = Dir
Wend
Article Quantité Valo
1
1
1
2
2
2
3
3
3
Explication : Les données sont colées bout à bout et non l"une à côté de l'autre. C'est à dire quand je colle mes données dans la colonne A2 (A1 = titre de la colonne = Article) jusqu'à A100 par exemple, la formule ActiveSheet.UsedRange.Rows.Count + 1 me colle les données qté dans la colonne B101 et non B2.
C'es un peu comme lorsque l'on fait un filtre sur une liste d'article et que l'on souhaite récupérer la valeur A2 jusqu'à la dernière ligne sans l'utilisation de la formulation caractère visible, la macro prend toutes les données sans tenir compte de ce filtre.
Dans ce cas présent, je souhaite qu'il prenne la première ligne vide de ma colonne B (B2) et qu'il ne tienne pas compte des données de la colonne A qu'il incrémente pour obtenir un B101.
Difficile d'être clair.
Merci pour votre aide,
Cordialement,
Laurent
Bonjour,
Ci dessous la solution que j'ai trouvé pour réussir cette boucle while.
ChDir "W:\PUBLIC\Planifier_Livrer\T00_Public\VEX\2016\Extraction\MAG PF"
Classeurlocal = Dir("W:\PUBLIC\Planifier_Livrer\T00_Public\VEX\2016\Extraction\MAG PF\*.XLS")
While Len(Classeurlocal) > 0
Workbooks.Open Classeurlocal
'Extraction de la colonne article
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
Range("B4:B" & DerniereLigne).Copy
Workbooks("Suivi_Magasin_0003 2016.xlsm").Activate
Range("A" & Rows.Count).End(xlUp).Select
Selection.Offset(1, 0).Select
ActiveSheet.Paste
En espérant que cela puisse vous aidez.
Cordialement,
Laurent