Compiler 3 trois tableaux en un seul en VBA

francois -  
lermite222 Messages postés 9042 Statut Contributeur -
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
Configuration: Windows XP
Firefox 3.5.6

4 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    
    0
    1. francois
       
      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
      0
    2. francois
       
      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
      0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    0
    1. Francois
       
      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
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour tou(te)s,
    Peu être une piste...
    pour gérer des séries avec des cellule fusionnées et non fusionnée.
    A+
    0