Compiler 3 trois tableaux en un seul en VBA [Fermé]

Signaler
-
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
-
Bonjour,
Je recherche de l'aide sur vba/excel, afin de résoudre ma problématique :
J'ai 3 tableaux de données, sur 3 feuilles différentes (Feuil1, Feuil2, Feuil3), même nombres de colonnes mais avec des nombres de lignes différents et variables. Je souhaiterai compiler ces 3 tableaux un en seul, de la manière suivante:

Feuil1
1111
1111

Feuil2
2222
2222
2222

Feuil3
3333
3333
3333
3333

Feuil4, le résultat que souhaite:
1111
1111
2222
2222
2222
3333
3333
3333
3333

Je recherche donc l'algo et code en vba qui me permettra de réaliser cela.

Merci pour votre aide

4 réponses

Messages postés
16374
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 janvier 2021
3 116
Bonjour,

essaies cette proc

Sub compiler()
Dim nbre As Byte, cptr As Byte, derligx As Long, derlig4 As Long
Dim tablo

nbre = ThisWorkbook.Sheets.Count
Application.ScreenUpdating = False

For cptr = 1 To nbre - 1
    With Sheets(cptr)
        derligx = .Range("A65536").End(xlUp).Row
        tablo = .Range("A1:D" & derligx)
    End With
    With Sheets(4)
        derlig4 = .Range("A65536").End(xlUp).Row
        .Cells(derlig4, 1).Resize(derligx, 4) = tablo
    End With
Next
End Sub
Merci michel,
ta soluce a en partie résolu mon pb, il m'a juste fallu faire une petite modif pour que la compilation se fasse sans supprimer une ligne précédemment introduite.

Sub essai()

Dim nbre As Byte, cptr As Byte, derligx As Long, derlig4 As Long
Dim tablo


nbre = ThisWorkbook.Sheets.Count
Application.ScreenUpdating = False

For cptr = 1 To nbre - 1
With Sheets(cptr)
derligx = .Range("A65536").End(xlUp).Row
tablo = .Range("A1:D" & derligx)
End With
With Sheets(4)
derlig4 = .Range("A65536").End(xlUp).Row
Cells(derlig4 + 1, 1).Resize(derligx, 4) = tablo
End With
Next

End Sub

merci
Bonjour,

suite à ta réponse, comme je l'avais souligné c'est OK sur le principe, le code marche. Mon document a maintenant évolué et en plus de maintenant compiler le contenu de mes tableaux, j'aimerais garder la mise en forme de mes tableaux (contour, couleur de remplissage). Ma question reformulée est donc :


Dans un classeur excel, je compile sur la feuil5, 4 tableaux sur les feuil1, 2, 3, 4. Ces tableaux peuvent variés en terme de ligne. Pour cela, j'utilise le code suivant :

Dim nbre As Byte, cptr As Byte, derligx As Long, derlig4 As Long
Dim tablo, coul As Byte

nbre = ThisWorkbook.Sheets.Count
Application.ScreenUpdating = False

For cptr = 1 To nbre - 1
With Sheets(cptr)
derligx = .Range("E65536").End(xlUp).Row + 1
tablo = .Range("A1:L" & derligx)
End With

With Sheets(5)
derlig4 = .Range("E65536").End(xlUp).Row
.Cells(derlig4 + 1, 1).Resize(derligx, 12) = tablo

End With

Cela marche, cependant ce code ne garde pas la mise en forme de mes tableaux (contour, remplissage). Un copier/coller le fait, mais je n'arrive pas avec ce même algorithme à utiliser un copier/coller. Quelles solutions aurais tu?

Merci pour ton aide
Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
6 590
Bonsoir tout le monde,

Pour emmener les formats comme tu le dis il faut copier/coller.
En gardant une partie de tes lignes essaie avec :
    For cptr = 1 To nbre - 1
        derligx = Sheets(cptr).Range("A65536").End(xlUp).Row
        derlig4 = Sheets(4).Range("A65536").End(xlUp).Row
        Sheets(cptr).Range("A1:D" & derligx).Copy (Sheets(4).Cells(derlig4 + 1, 1))
    Next

eric
Merci éric

ca marche, merci. Juste un détail, le copy/paste gère mal les cellules fusionnées, mais je devrais pouvoir m'en sortir. Pour info, as-tu une soluce pour gèrer des cellules fusionnées comme avec un copier coller classic dans excel.

Merci encore

francois
Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
6 590
Non, il faut fuir les cellules fusionnées, on peut (presque) toujours s'en passer.
N'oublie pas que pour centrer horizontalement dans 'format de cellule / alignement' tu as 'horizontal / centrer sur plusieurs colonnes'
eric
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
Bonjour tou(te)s,
Peu être une piste...
pour gérer des séries avec des cellule fusionnées et non fusionnée.
A+