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
Version imprimable
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:
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 faire :f1: sur l'icone directement sans cliquer
extrait de l'aide :
Citation:
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
Pièce jointe 365824
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... MerciCode:
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
Merci Pierre pour ta réponse, peux tu m'aider à modifier le code
Code:
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
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: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:Set TargetSourceNameRange = Target(1, 22).Resize(Source.Rows.Count)
Merci beaucoup pour votre aide. J'ai réussi enfin :D
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.PCode:
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 parCode:
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
Bonjour,
Merci pour votre aide.
Mon code est le suivant mais il ne fonctionne toujours pas
Sub MergeDatas()
Dim Sheets
Dim Sheetname
Dim I As Integer
Dim Source As Range
Dim Target As Range
Dim LastRow As Long
Dim TargetSourceNameRange As Range
For I = 3 To 127
Set Sheetname = Worksheets(I)
LastRow = Worksheets(Sheetname).Range("a" & Worksheets(1).Rows.Count).End(xlUp).Row
Set Source = Worksheets(Sheetname).Range("a7:c" & LastRow)
Set Target = Worksheets("synthese").Range("a" & Worksheets(1).Rows.Count).End(xlUp)(2)
Set TargetSourceNameRange = Target(1, 4).Resize(Source.Rows.Count)
Source.Copy Target
TargetSourceNameRange.Value = Sheetname
Next
End Sub
Savez-vous quelle est mon erreur ?
Encore merci pour votre aide
Bonjour,
"Ne fonctionne pas" n'est pas une indication très explicite.Citation:
Mon code est le suivant mais il ne fonctionne toujours pas
Si vous obtenez un message d'erreur, merci de nous l'indiquer ainsi que l'a ligne où elle a été levée
Pour déterminer la dernière ligne de la plage à copier on utilise la première feuille (worksheets(1)) . Est-ce que c'est ce que tu veux ?
Bonjour,
Du fait de la boucle For Each SheetName Je n'avais pas fait attention que cette variable n'était pas un objet.
Il faut donc remplacer l'instruction Set Sheetname = Worksheets(I) par Sheetname = Worksheets(i).NameIl faudrait que vous éditiez vos codes à l'aide des balises prévues à cet effet sinon, on est obligé de compter les lignes manuellement