Microsoft 365 Compiler plusieurs tableaux en un seul

ShuarS

XLDnaute Occasionnel
Salut à tous :)

Je cherche une petite macro simple pour compiler plusieurs tableaux répartis dans plusieurs feuilles (un tableau par feuille) dans une feuille récapitulative.
Voici un fichier pour exemple.

La quantité de lignes par tableau sera variable;
La quantité de feuilles et donc de tableaux sera variable également;
La feuille récapitulative servira à la construction d'un tableau croisé dynamique.

Merci pour votre aide,
Shu
 
Solution
Re

Ca marchera mieux ainsi ;)
VB:
Sub testB()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In Worksheets
If ws.Name <> "Compil" Then
Set desti = Sheets("Compil").ListObjects(1).DataBodyRange
ws.ListObjects(1).DataBodyRange.Copy desti.Offset(desti.Rows.Count)
Application.CutCopyMode = False
Set desti = Nothing
End If
Next
End Sub
NB: Si la feuille 2 n'avait point été là, j'aurais posté directement cette version. ;)

Staple1600

XLDnaute Barbatruc
Re

Je parlais de l'onglet: Discussions similaires à droite de l'écran.
(Cette question ayant été multi-traitée sur le forum)

PS: Si tu ne précises pas que tu as fais des recherches, on ne peut pas le deviner...:rolleyes:

EDITION: Bonjour Laurent950
 
Dernière édition:

ShuarS

XLDnaute Occasionnel
@Staple1600 , oui j'avais bien compris merci. Et j'ai bien parcouru les fils de discussion avant de poster mon message. Etes vous modérateur du forum ?

@laurent950 , c'est plutôt simple :
Je veux faire un copier/coller du tableau complet de la feuil1 dans la feuille récap, puis à la suite copier/coller le tableau de la feuil2, puis de la feuil3, etc.
Il faut gérer les en têtes qui sont toujours identiques.

L'objectif est de créer des tableaux et graphiques dynamiques à partir de la feuille récap.
Les tableaux des feuilles pourront évoluer avec le temps. Mais en lançant la macro, le tableau récap sera mis à jour et donc automatiquement les tableaux et graph dynamique en même temps.
 

ShuarS

XLDnaute Occasionnel
Bien sûr ! C'est aussi simple que les tableaux croisés dynamiques à vrai dire.
VB:
Insertion / Graphique et tableau croisés dynamique
A partir de là, on sélectionne sa plage et ensuite le type de graph comme on le ferait pour un graph classique. Seulement si la source change, le graph suivra. Et mieux on peut intégrer des champs de tri / filtre directement dans le graph :)
 

Staple1600

XLDnaute Barbatruc
Re

•>ShuarS:
Ah susceptible, on dirait... :rolleyes:
1) On ne peut pas deviner si tu précises pas.
C'est tout ce que j'ai dis. Ni plus, ni moins.
2) Tu devrais changer ton fichier exemple (à cause de la feuille 2)
Elle est masquée certes, mais pas supprimée.
NB: C'est d'ailleurs elle qui fait planter la macro ci-dessous
VB:
Sub test()
Dim ws As Worksheet
Set desti = Sheets("Compil").ListObjects(1).DataBodyRange
For Each ws In Worksheets
If ws.Name <> "Compil" Then
ws.ListObjects(1).DataBodyRange.Copy desti.Offset(desti.Rows.Count)
Application.CutCopyMode = False
End If
Next
End Sub

•>Laurent950
Petits problèmes de lunettes? ;)
(cf message#4 et #6)
 

Staple1600

XLDnaute Barbatruc
Re

Ca marchera mieux ainsi ;)
VB:
Sub testB()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In Worksheets
If ws.Name <> "Compil" Then
Set desti = Sheets("Compil").ListObjects(1).DataBodyRange
ws.ListObjects(1).DataBodyRange.Copy desti.Offset(desti.Rows.Count)
Application.CutCopyMode = False
Set desti = Nothing
End If
Next
End Sub
NB: Si la feuille 2 n'avait point été là, j'aurais posté directement cette version. ;)
 

laurent950

XLDnaute Accro
Volia c'est Ok

VB:
Option Base 1
Sub test()
Dim i As Integer: i = 1
Dim tabl() As Variant
ReDim tabl(i)

Dim Ws As Worksheet
    For Each Ws In Worksheets
        If Ws.Name Like "Equipe" & "*" Then
            If UBound(tabl) = 1 Then
                tabl(UBound(tabl)) = Ws.Range(Ws.Cells(1, 2), Ws.Cells(Ws.Cells(65536, 2).End(xlUp).Row, 7))
                ReDim Preserve tabl(UBound(tabl) + 1)
            Else
                tabl(UBound(tabl)) = Ws.Range(Ws.Cells(2, 2), Ws.Cells(Ws.Cells(65536, 2).End(xlUp).Row, 7))
                ReDim Preserve tabl(UBound(tabl) + 1)
            End If
        End If
    Next Ws
ReDim Preserve tabl(UBound(tabl) - 1)

For i = LBound(tabl) To UBound(tabl)
    Sheets("Compil").Cells(Sheets("Compil").Cells(65536, 2).End(xlUp).Row + 1, 2).Resize(UBound(tabl(i), 1), UBound(tabl(i), 2)) = tabl(i)
Next i

End Sub

Ps : Les valeurs sont consigné peux être pour faire un graphique a l'aide de VBA puisque les valeurs sont enregistrer dans le tableau ?
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 182
Messages
2 086 002
Membres
103 084
dernier inscrit
Hervé30120