Macro pour copier/coller des lignes sur une autre tab sans le titre

bool2gom

XLDnaute Junior
Bonjour,

J'ai attaché le fichier pour plus de clarté.
Départ : ce que j'ai
Arrivée : ce que je veux

Copier/coller des lignes de plusieurs tableaux vers un autre tab en ne gardant que le titre des colonnes du 1er tableau.

Le nombre de lignes et de colonnes variera, évidemment, il me faudrait donc une macro qui ne tienne pas compte de ce critère.

Merci d'avance !

Bon week-end,
 

Pièces jointes

  • Exemple.xlsx
    9.1 KB · Affichages: 36
  • Exemple.xlsx
    9.1 KB · Affichages: 43
  • Exemple.xlsx
    9.1 KB · Affichages: 42
C

Compte Supprimé 979

Guest
Re : Macro pour copier/coller des lignes sur une autre tab sans le titre

Bonjour bool2gom ;)

Essaye ce code
Code:
Sub CopierCollerTab()
  Dim ShtS As Worksheet, ShtD As Worksheet
  Dim Col1 As Long, ColFin As Long
  Dim LigFin As Long
  ' Définir les feuilles Source et celle de Destination
  Set ShtS = Worksheets("départ")
  Set ShtD = Worksheets("arrivée")
  ' Initialiser les variables
  Col1 = 1
  ' Avec la feuille de destination
  With ShtD
    ' Calculer la dernière ligne et colonne
    ColFin = .Cells(1, Columns.Count).End(xlToLeft).Column
    LigFin = .Cells(Rows.Count, 1).End(xlUp).Row
    ' Effacer le contenu des cellules
    .Range(.Cells(1, 1), .Cells(LigFin, ColFin)).ClearContents
  End With
  ' Copier le 1er tableau
  ColFin = ShtS.Cells(1, Col1).End(xlToRight).Column
  LigFin = ShtS.Cells(Rows.Count, Col1).End(xlUp).Row
  ShtS.Range(ShtS.Cells(1, Col1), ShtS.Cells(LigFin, ColFin)).Copy Destination:=ShtD.Range("A1")
  ' Boucler pour chaque tableau
  Do While ColFin < Columns.Count
    ' 1ère colonne du prochain tableau
    Col1 = ShtS.Cells(1, ColFin).End(xlToRight).Column
    ' Colonne de fin
    ColFin = ShtS.Cells(1, Col1).End(xlToRight).Column
    ' Ligne de fin
    LigFin = ShtS.Cells(Rows.Count, Col1).End(xlUp).Row
    If ColFin < Columns.Count Then
      ' Copier coller le tableau sans l'entête
      ShtS.Range(ShtS.Cells(2, Col1), ShtS.Cells(LigFin, ColFin)).Copy Destination:=ShtD.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    End If
  Loop
  ' Libérer les variables objet
  Set ShtD = Nothing
  Set ShtS = Nothing

End Sub

A+
 

bool2gom

XLDnaute Junior
Re : Macro pour copier/coller des lignes sur une autre tab sans le titre

Merci beaucoup Bruno, c'est excellent.
Je vais faire mon chiant, mais si mes tableaux commencent à la ligne "x", que dois-je modifier dans la macro ? (les données devront toujours être copiées en cellule A1 dans la 2e tab)

Merci,
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Macro pour copier/coller des lignes sur une autre tab sans le titre

Bonjour bool2gom, BrunoM45,

En deuxième position après BrunoM45 (que je salue :)), une autre proposition:
VB:
Sub essai()
Dim xrg As Range, xzone As Range, lig&, col&, Deux As Boolean

Application.ScreenUpdating = False
With Sheets("départ")
  lig = 1
  col = .Cells(1, .Columns.Count).End(xlToLeft).Column + 2
  Set xrg = .Rows(1)
  On Error Resume Next
  Set xrg = xrg.SpecialCells(xlCellTypeConstants, 23)
  If xrg Is Nothing Then Exit Sub
  If xrg.Areas.Count <= 1 Then Exit Sub
  For Each xzone In xrg.Areas
    Set xzone = xzone.CurrentRegion
    If Deux Then Set xzone = xzone.Offset(1).Resize(xzone.Rows.Count - 1)
    xzone.Copy .Cells(lig, col)
    lig = lig + xzone.Rows.Count
    Deux = True
    xzone.CurrentRegion.Clear
  Next xzone
  xrg.Clear
End With
End Sub
 

Pièces jointes

  • bool2gom-copie blocs v1.xlsm
    17.9 KB · Affichages: 24

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Macro pour copier/coller des lignes sur une autre tab sans le titre

Re,
[...] mais si mes tableaux commencent à la ligne "x", que dois-je modifier dans la macro ? (les données devront toujours être copiées en cellule A1 dans la 2e tab) [...]

Une version v2. il suffit de modifier la valeur de la ligne dans la macro : Const L0 = x
 

Pièces jointes

  • bool2gom-copie blocs v2.xlsm
    18.4 KB · Affichages: 31
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Macro pour copier/coller des lignes sur une autre tab sans le titre

Re,

J'avions raté le fait de placer le résultat sur la deuxième feuille. C'est corrigé.

Edit: une version v3.b qui améliore la recopie des en-têtes et qui retire une scorie des précédentes versions qui avait échappé à ma vigilance (ne faisait pas le boulot s'il n’y avait qu'un seul bloc)
VB:
Sub essai()
'v3.b
Const LigneTableaux = 5, FeuilDep = "départ", FeuilArr = "arrivée"
Dim xrg As Range, xzone As Range, lig&, Deux As Boolean

Application.ScreenUpdating = False
Sheets("arrivée").[a1].CurrentRegion.Clear
lig = 1
With Sheets(FeuilDep)
  Set xrg = .Rows(LigneTableaux)
  On Error Resume Next
  Set xrg = xrg.SpecialCells(xlCellTypeConstants, 23)
  If xrg Is Nothing Then Exit Sub
  For Each xzone In xrg.Areas
    Set xzone = xzone.CurrentRegion
    If Deux Then
      xzone.Rows(1).Copy Sheets(FeuilArr).Cells(1, "a")
      Set xzone = xzone.Offset(1).Resize(xzone.Rows.Count - 1)
    End If
    xzone.Copy Sheets(FeuilArr).Cells(lig, "a")
    lig = lig + xzone.Rows.Count
    Deux = True
  Next xzone
End With
End Sub
 

Pièces jointes

  • bool2gom-copie blocs v3b.xlsm
    18.7 KB · Affichages: 24
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Macro pour copier/coller des lignes sur une autre tab sans le titre

Bonsoir bool2gom,

Pour vous embeter jusqu'au bout, comment avoir le même résultat mais avec une structure dans "départ" sans colonne entre les tableaux ?

Cela mérite, au minimum, un fichier exemple (un peu plus précis que votre premier fichier) et des précisions sur comment reconnaître les différents blocs.

Ceci pour éviter de partir de n'importe quoi et arriver à pas grand-chose :).
 

bool2gom

XLDnaute Junior
Re : Macro pour copier/coller des lignes sur une autre tab sans le titre

Bonsoir bool2gom,



Cela mérite, au minimum, un fichier exemple (un peu plus précis que votre premier fichier) et des précisions sur comment reconnaître les différents blocs.

Ceci pour éviter de partir de n'importe quoi et arriver à pas grand-chose :).
Fichier attaché. Merci.
Je voudrais aussi pouvoir modifier manuellement la cellule d'arrivée dans le tab d'arrivée.
 

Pièces jointes

  • Exemple.xlsm
    9.1 KB · Affichages: 27
  • Exemple.xlsm
    9.1 KB · Affichages: 33
  • Exemple.xlsm
    9.1 KB · Affichages: 33

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Macro pour copier/coller des lignes sur une autre tab sans le titre

(re)....

Une version v4a qui se base sur les titres de colonnes.

Pour indiquer la feuille de départ, la feuille d'arrivée, la ligne des en-têtes des tableaux au sein de la feuille de départ, la cellule de la zone résultat (coin supérieur gauche de la zone résultat), il faut modifier les constantes au début du code de la macro.
 

Pièces jointes

  • bool2gom-copie blocs v4a.xlsm
    24.2 KB · Affichages: 40

bool2gom

XLDnaute Junior
Re : Macro pour copier/coller des lignes sur une autre tab sans le titre

C'est fantastique, merci.
Plus qu'une question et après on sera bons, lorsque la valeur d'une cellule est issue d'une formule, la macro ne copie pas la valeur (cellule vide). Peut-on forcer la copie dans ce cas ?

Merci beaucoup !!
 

Discussions similaires

Réponses
6
Affichages
421

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 536
dernier inscrit
komivi