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

  • Initiateur de la discussion Initiateur de la discussion BChaly
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
800
Réponses
6
Affichages
764
Réponses
5
Affichages
864
Retour