Copier Tableau possédant un nombre de lignes variables en VBA

BChaly

XLDnaute Occasionnel
Bonsoir,

Je souhaite copier un tableau A1:C6, sur la premiere ligne vide d'une autre feuille.
(Le nombre de lignes du tableau pourra varié).

Comment puis-je copier un tableau de 6 lignes en A1:C6, A7:C12, A13:C18 etc...?

Le code suivant copie le tableau en se basant sur la première cellule vide:

Code:
Sub CopieTab()
Sheets("Sheet2").Select
    For MaLigne = 1 To 65536
        If IsEmpty(Cells(MaLigne, 1)) Then Exit For
    Next MaLigne
Sheets("Sheet1").Select
    Range("A1:C6").Select
        Selection.Copy
Sheets("Sheet2").Select
    Cells(MaLigne, 1).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub

Merci pour votre aide.

Cordialement,

BChaly
 

Pièces jointes

  • CopieTab.xls
    42.5 KB · Affichages: 58

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Copier Tableau possédant un nombre de lignes variables en VBA

Bonsoir BChaly,

Un essai dans le fichier joint.

Le code la la macro:
VB:
Sub CopieTab2()
Dim xrg As Range, xDerLig&, yrg As Range, yDerLig&
  
  With Sheets("Sheet1")
    On Error Resume Next
    Set xrg = .Columns("A:C").SpecialCells(xlCellTypeConstants, 23)
    On Error GoTo 0
    If xrg Is Nothing Then
      Exit Sub
    Else
      xDerLig& = xrg.Areas(xrg.Areas.Count).Row + xrg.Areas(xrg.Areas.Count).Rows.Count - 1
      Set xrg = .Range(.Cells(1, 1), .Cells(xDerLig, 3))
    End If
  End With
  
  With Sheets("Sheet2")
    On Error Resume Next
    Set yrg = .Columns("A:C").SpecialCells(xlCellTypeConstants, 23)
    On Error GoTo 0
    If yrg Is Nothing Then
      Set yrg = .Cells(1, 1).Resize(xDerLig, 3)
    Else
      yDerLig& = yrg.Areas(yrg.Areas.Count).Row + yrg.Areas(yrg.Areas.Count).Rows.Count - 1
      Set yrg = .Cells(yDerLig + 1, 1).Resize(xDerLig, 3)
    End If
  End With
  
  yrg.Value = xrg.Value
End Sub
 

Pièces jointes

  • CopieTab v1.xls
    46.5 KB · Affichages: 72

BChaly

XLDnaute Occasionnel
Re : Copier Tableau possédant un nombre de lignes variables en VBA

Bonjour,

Merci pour ce code qui fonctionne bien.

Y-a-t-il une possibilité de copier également le format (couleur, bordures)?

Pouvez-vous svp m'indiquer ce que signifie "23" dans "(xlCellTypeConstants, 23)" et
que signifie "3" dans "Resize(xDerLig, 3)"?

Merci pour votre aide.

Cordialement

BChaly
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Copier Tableau possédant un nombre de lignes variables en VBA

Bonsoir BChaly,

(...)
Y-a-t-il une possibilité de copier également le format (couleur, bordures)?

Pouvez-vous svp m'indiquer ce que signifie "23" dans "(xlCellTypeConstants, 23)" et
que signifie "3" dans "Resize(xDerLig, 3)"? (...)

1) remplacer yrg.Value = xrg.Value par xrg.Copy yrg

2) 23 indique quelle type de constante, on doit chercher. 23 est la somme des 4 types:
xlErrors (qui est égal à 16), xlLogical (qui est égal à 4), xlNumbers (qui est égal à 1 ) et de xlTextValues (qui est égal à 2 )

3) Resize(xDerLig, 3) indique qu'on redéfinit la taille du range .Cells(1, 1) à xDerLig lignes en hauteur et à 3 colonnes en largeur.
 

Pièces jointes

  • CopieTab v2.xls
    52 KB · Affichages: 49

BChaly

XLDnaute Occasionnel
Re : Copier Tableau possédant un nombre de lignes variables en VBA

Bonsoir,

Vous êtes un Génie!!! Ceci fonctionne parfaitement, et c'est exactement ce que je cherchais à faire.

Merci pour cette superbe solution,
Merci pour les explications qui sont très claires,
Merci pour le temps que vous avez passé à m'aider.

Cordialement,

BChaly
 

Discussions similaires

Réponses
3
Affichages
651

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 685
Messages
2 090 943
Membres
104 704
dernier inscrit
uranium