Bonjour,
Je cherche le code VBA pour concaténer plusieurs onglets sur une seule feuille, en sachant qu'il faut partir de la 2 éme ligne jusqu'à la dernière remplie et cela pour tous les onglets.
Merci par avance à vous.
Anthony
Bonjour,
Je cherche le code VBA pour concaténer plusieurs onglets sur une seule feuille, en sachant qu'il faut partir de la 2 éme ligne jusqu'à la dernière remplie et cela pour tous les onglets.
Merci par avance à vous.
Anthony
Concaténer des chaines de caractères, je comprends ce que ça signifie.
En revanche, concaténer des onglets, c'est beaucoup moins clair et ça demande un peu plus d'explications.
Hello,
Tu pourrais peut-être t'inspirer de ce post
Bat
https://www.developpez.net/forums/d1...glet-synthese/
Voici le code pour la première feuille est-il possible d'intégrer une boucle pour qu'il renouvelle cela pour toutes les feuilles ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub concatener() Feuil1.Range("C47").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Sheets("Feuil1").Select Range("B1").Select Selection.End(xlDown).Offset(1, 0).Select ActiveSheet.Paste End Sub
Bonjour,
Ca s'appelle la "consolidation" faire :
Données - Outils de Données - Consolider
puis fairesur l'icone directement sans cliquer
extrait de l'aide :
Pour synthétiser et afficher des résultats de données sur des feuilles de calcul distinctes, vous pouvez consolider les données de chaque feuille dans une feuille de calcul (ou feuille maître). Les feuilles que vous consolidez peuvent figurer dans le même classeur en tant que feuille maître ou dans des classeurs différents. Lorsque vous consolidez les données dans une feuille de calcul, vous pouvez plus facilement les mettre à jour et les agréger régulièrement ou en fonction des besoins.
Par exemple, si vous disposez d’une feuille de calcul de frais pour chaque bureau régional, vous pouvez utiliser une consolidation des données pour rassembler ces chiffres dans une feuille de calcul de dépenses d’entreprise. Cette feuille maître peut contenir les ventes totales et moyennes, les niveaux de stock actuels et les produits les plus performants pour toute l’entreprise.
Il existe deux méthodes principales pour consolider les données :
Consolider par position Faites appel à cette méthode lorsque les données de plusieurs zones source sont organisées dans le même ordre et utilisent les mêmes étiquettes de lignes et de colonnes, par exemple, lorsque vous utilisez une série de feuilles de calcul de frais créées à partir du même modèle.
Consolider par catégorie Faites appel à cette méthode lorsque les données de plusieurs zones source sont organisées différemment, mais que les mêmes étiquettes de lignes et de colonnes sont utilisées. Par exemple, vous pouvez y avoir recours lorsque vous utilisez une série de feuilles de stock pour chaque mois qui utilisent la même disposition, chaque feuille de calcul contenant différents éléments ou un nombre différent d’éléments.
...
Bonjour,
Voici un exemple de fichier, je souhaite copier les feuilles 1 à 5 sur la feuille Synthèse. La sélection des lignes à partir de la 11 jusqu'à ce que la colonne A soit vide.
Merci à vous par avance
Test concaténation.xlsx
Salut.
Voici un code qui copie les feuilles Janvier,Février, Mars dans la feuille Regroupement.
Pour l'exemple, les feuilles mensuelles contiennent deux colonnes, la feuille de regroupement en contient une troisième pour récupérer le nom de la feuille source. Les données à copier commencent en ligne 2
A adapter à ton cas.
PS: Pense aux balises code svp: sélection du code puis bouton # sur la barre d'édition du message... Merci
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 Sub MergeDatas() Dim Sheets Dim Sheetname Dim Source As Range Dim Target As Range Dim LastRow As Long Dim TargetSourceNameRange As Range Sheets = Array("Janvier", "Février", "Mars") For Each Sheetname In Sheets LastRow = Worksheets(Sheetname).Range("a" & Worksheets(1).Rows.Count).End(xlUp).Row Set Source = Worksheets(Sheetname).Range("a2:b" & LastRow) Set Target = Worksheets("Regroupement").Range("a" & Worksheets(1).Rows.Count).End(xlUp)(2) Set TargetSourceNameRange = Target(1, 3).Resize(Source.Rows.Count) Source.Copy Target TargetSourceNameRange.Value = Sheetname Next End Sub
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Merci Pierre pour ta réponse, peux tu m'aider à modifier le code
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 Sub MergeDatas() Dim Sheets Dim Sheetname Dim Source As Range Dim Target As Range Dim LastRow As Long Dim TargetSourceNameRange As Range Sheets = Array("feuil1", "feuil2", "feuil3", "feuil4", "feuil5") For Each Sheetname In Sheets LastRow = Worksheets(Sheetname).Range("a" & Worksheets(1).Rows.Count).End(xlUp).Row Set Source = Worksheets(Sheetname).Range("a11:u" & LastRow) Set Target = Worksheets("Synthese").Range("a" & Worksheets(1).Rows.Count).End(xlUp)(2) Set TargetSourceNameRange = Target(1, 3).Resize(Source.Rows.Count) Source.Copy Target TargetSourceNameRange.Value = Sheetname Next End Sub
Hello,
Pierre est absent du forum en ce moment (du moins je crois) alors je répond :
il suffit de désigner les feuilles par leur index.
Exemple pour afficher le nom des feuilles de la troisième à la cinquantième :
Ami calmant, J.P
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Sub ListerFeuilles() Dim I As Integer Dim Feuille As Worksheet For I = 3 To 50 Set Feuille = Sheets(I) Debug.Print Feuille.Name Next I End Sub
Bonjour JP,
Merci pour votre aide.
Toutefois je dois également modifier le reste de la formule de Pierre qui permet de «*grouper*» les colonnes dans un onglet regroupement.
Sauriez-vous quelles sont les modifications à apporter ?
Merci
Bonjour,
J.P. vous a donné la réponse, il suffit de remplacer la ligne 10 du code de Pierre soit For Each Sheetname In Sheets par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Dim I As Integer For i = 3 To 50 Set Sheetname = Worksheets(i)
J'attire tout de même votre attention que ce code date de 2018 et que maintenant, vous pourriez le faire à l'aide de Power Query
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer suret si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Comme tu n'expliques pas ce qui ne fonctionne pas, j'en suis réduit à déduire que c'est la ligne
Essaie de bien comprendre comment ce code fonctionne (cette ligne mais également l'ensemble de la proc)
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set TargetSourceNameRange = Target(1, 3).Resize(Source.Rows.Count)
La proc boucle sur les feuilles renseignés (Ok)
Pour chaque feuille, elle détermine la plage A11:Uxx (xx étant la dernière ligne calculée par .End(xlUp) (OK)
Elle détermine la cellule d'arrivée dans la feuille de destination (OK)
Elle détermine la colonne qui viendra à droite de la dernière colonne copiée (PAS OK). Moi, je t'ai donné un code pour deux colonnes source et donc une colonne C qui récupère le nom de la feuille source. Puisque tu copies non pas A:B, mais A:U, la colonne qui doit recevoir le nom de la feuille source est donc la V (logique, n'est-ce pas?). Dès lors, tu dois utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set TargetSourceNameRange = Target(1, 22).Resize(Source.Rows.Count)
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Merci beaucoup pour votre aide. J'ai réussi enfin![]()
Partager