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.
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
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
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
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?
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.
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
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
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