Assembler plusieurs tableaux (VBA)

Bonjour tous le monde,

Je vous explique mon problème.

J'ai plusieurs tableaux avec les même colonne, répartie sur différente feuille. Je voudrais les assembler dans une seule feuille.

Je dois faire ça sous VBA mais j'y arrive pas ( d'ailleurs je ne sais même pas le faire sans VBA) Je rajoute aussi que les tableaux de base ne doivent pas disparaitre ^^

Pour illustrer ce que j'ai dit voici un exemple en piece jointe :

Les données du tableau de la feuille 1 et les données du tableau de la feuille 2 doivent se retrouver dans le tableau de la feuille 3.

Merci d'avance

Edit : J'ai donné un exemple que j'ai fait dans la piece jointe , mais dans ce que j'aurais a faire pour de vrai , c'est d'assembler plus de 10 tableaux , je pense que ca change grand chose au probleme mais je préfère vous le dire

34test.xlsx (11.75 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Bye !

68test-v1.xlsm (24.32 Ko)

Bonjour, bonjour !

Ce serait utile de poster les codes pour ceux ne pouvant télécharger de classeur avec macro !

Au risque de poster un doublon - mais comme souvent je vois des codes évitant la simplicité - voici une proposition

respectant la règle TBTO (ici ListObjects) vu la présence de listes en feuilles sources comme dans celle de destination :

Sub Demo()
    Feuil3.ListObjects(1).HeaderRowRange.Cells(1).Select

    For N% = 1 To 2
        Worksheets(N).ListObjects(1).DataBodyRange.Copy Feuil3.ListObjects(1).InsertRowRange.Cells(1)
    Next
End Sub

Bonjour gmb,

Bonjour Marc L,

Marc L, ton code ne fonctionne pas (chez moi ).

Ci-dessous une adaptation :

Option Explicit
Public Sub Essai()
Dim i As Long, lRow As Long
    On Error Resume Next
    Feuil3.ListObjects(1).DataBodyRange.Delete
    lRow = 2
    For i = 1 To 2
        Worksheets(i).ListObjects(1).DataBodyRange.Copy Feuil3.Cells(lRow, 1)
        lRow = Feuil3.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Next
End Sub

Merci beaucoup pour votre aide. Le code de gmb et de jean-eric marche à merveille

Il me restera plus qu'a le faire sur une dizaine de tableaux avec 30 colonnes chacun , mais ca devrait le faire 8)

Merci à vous 3 !

Merci Julien08.

Bonne journée et à bientôt sur le forum.

Pas de souci de mon côté, mais qu'a-t-elle donc cette version 2010 ?

Si tu pouvais indiquer ce qui déclenche l'erreur de ton côté …

Re,

On a erreur 91 (variable objet ou variable de bloc With non définie).

Worksheets(N).ListObjects(1).DataBodyRange.Copy Feuil3.ListObjects(1).InsertRowRange.Cells(1)

Cette erreur survient effectivement en retirant la ligne avec le Select avant la boucle et là ce n'est plus mon code !

InsertRowRange renvoie la ligne d'insertion uniquement si la liste est active …

Sinon si le code n'a pas été modifié, encore une fois aucun souci de mon côté avec le classeur joint dans le premier message,

j'aimerais savoir si tu peux tester dans la ligne quelle partie est la source de l'erreur,

merci d'avance car là je vais être offline pendant quelques heures …

Re,

Apparemment la propriété 'InsertRowRange' ne fonctionne plus sous Excel2007 et +.

Son usage est limité à Excel 2003.

Cdlt.

Mea culpa ‼ Il faut juste activer la feuille 3 à cause du Select :

Sub Demo()
    With Feuil3.ListObjects(1)
        .Parent.Activate
        .HeaderRowRange.Cells(1).Select

        For N% = 1 To 2
            Worksheets(N).ListObjects(1).DataBodyRange.Copy .InsertRowRange.Cells(1)
        Next
    End With
End Sub

Je devais être sur la feuille 3 lors des tests …


Jean-Eric a écrit :

Re,

Apparemment la propriété 'InsertRowRange' ne fonctionne plus sous Excel2007 et +.

Son usage est limité à Excel 2003.

Cdlt.

Ah bon ? Elle est pourtant toujours référencée dans la documentation de la version 2013 !

Jean-Eric a écrit :

Bonjour gmb,

Bonjour Marc L,

Marc L, ton code ne fonctionne pas (chez moi ).

Ci-dessous une adaptation :

Option Explicit
Public Sub Essai()
Dim i As Long, lRow As Long
    On Error Resume Next
    Feuil3.ListObjects(1).DataBodyRange.Delete
    lRow = 2
    For i = 1 To 2
        Worksheets(i).ListObjects(1).DataBodyRange.Copy Feuil3.Cells(lRow, 1)
        lRow = Feuil3.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Next
End Sub

Est ce que tu peux m'expliquer tes lignes de calcules s'il te plait ^^

J'essaye d'adapter ton macro sur un autre fichier Excel mais j'y arrive pas.

C'est les mêmes tableaux que le fichier précédent mais y en a un 3eme. Le nom des onglets ne sont pas les mêmes aussi ^^

C'est quels paramètres de ton macro qui changent?

Je pense qu'il y a la valeur de IROW qui doit changer, "Feuil3" doit également changer je pense mais il n'y a pas de différence

Merci

Re,

Essaie ainsi :

Option Explicit
Public Sub Essai()
Dim ws As Worksheet, wsD As Worksheet
Dim i As Long, lRow As Long

    Application.ScreenUpdating = False
    ' feuille de consolidation
    Set wsD = ActiveSheet
    On Error Resume Next
    wsD.ListObjects(1).DataBodyRange.Delete
    On Error GoTo 0
    lRow = 2
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> wsD.Name Then
            ws.ListObjects(1).DataBodyRange.Copy wsD.Cells(lRow, 1)
            lRow = wsD.Cells(Rows.Count, 1).End(xlUp).Row + 1
        End If
    Next ws
    Set wsD = Nothing

End Sub

J'ai l'erreur suivant quand je compile : erreur d’exécution 9

Et on m'indique que l'erreur vient de cette ligne

ws.ListObjects(1).DataBodyRange.Copy wsD.Cells(lRow, 1)

Re,

Cela fonctionne pour peu que tu lances la procédure de ta feuille de consolidation.

Cdlt.

Que veux tu dire par feuille de consolidation? C'est la feuille avec le tableau réunissant les autres?

EDIT : Merci j'ai trouvé , je n'avais pas mis les tableaux sous la bonne forme ^^'

Merci beaucoup en tout cas

J'ai encore une petite question

Enfaite quand je dois assembler les tableaux, il se peut que les tableaux n'ont pas la même forme , par exemple des colonne en plus ou des colonnes pas dans le même ordre. Donc quand je les assembles, ca ne donne pas un bon tableaux..

Je mets un fichier en pièce jointe pour que ca soit plus clair. Donc quand on regroupe dans le tableau de la feuille 1, il doit comprendre l’entête des autres tableaux pour assemblez. (et il doit également ignorer les colonnes des autres tableaux qui n'ont pas le même entête)

14document3.xlsx (12.97 Ko)
Rechercher des sujets similaires à "assembler tableaux vba"