Bonjour,
Désolé de déterrer ce vieux message. Mais j'ai quasi le mème problème mais uniquement pour 2 colonnes (et non pas 3 ou 4 comme demandé) que je dois mettre les unes en dessous des autres.
Debut:
ColA ColB ColC ColD
1234 123 14524 1224
Resultat souhaité:
ColA ColB
1234 123
14524 1224
J'ai en fait 170 colonnes et 470 lignes.
J'ai essayé de triturer plusieurs fois les réponses apportées mais je reste bloqué ! ;(
Code proposé pour 3 (ou 4 en fait) colonnes :
Sub copierColler()
Dim derLigSource As Integer, derLigDest As Integer, derCol As Integer
Dim wsSource As Worksheet, wsDest As Worksheet
Set wsSource = Sheets("données")
Set wsDest = Sheets("copie")
wsDest.Range("A:C").EntireColumn.Delete
wsSource.Activate
derCol = wsSource.Cells(2, Columns.Count).End(xlToLeft).Column
For i = 1 To derCol - 2 Step 4
derLigDest = wsDest.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
derLigSource = wsSource.Cells(Columns(i).Cells.Count, i).End(xlUp).Row
wsSource.Range(Cells(2, i), Cells(derLigSource, i + 2)).Copy Destination:=wsDest.Cells(derLigDest + 1, 1)
Next i
wsDest.Activate
wsDest.Rows(1).EntireRow.Delete
Application.CutCopyMode = False
End Sub
Mon meilleur essai mais apparemment j'ai un dépassment de capacité ou lors d'un essai j'ai bien eu 2 colonnes mais résultat n'est pas complet :
Sub copierColler2Col()
Dim derLigSource As Integer, derLigDest As Integer, derCol As Integer
Dim wsSource As Worksheet, wsDest As Worksheet
Set wsSource = Sheets("données")
Set wsDest = Sheets("copie")
wsDest.Range("A:B").EntireColumn.Delete
wsSource.Activate
derCol = wsSource.Cells(2, Columns.Count).End(xlToLeft).Column
For I = 1 To derCol - 1 Step 2
derLigDest = wsDest.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
derLigSource = wsSource.Cells(Columns(I).Cells.Count, I).End(xlUp).Row
wsSource.Range(Cells(1, I), Cells(derLigSource, I + 1)).Copy Destination:=wsDest.Cells(derLigDest + 1, 1)
Next I
wsDest.Activate
wsDest.Rows(1).EntireRow.Delete
Application.CutCopyMode = False
End Sub
Cf. Fichier joint
Merci d'avance