Re,
Un essai par macro.....
Sub test()
Dim col%, lig%, i%, j%
Dim derlig%, derncol%
Application.ScreenUpdating = False '.....................................désactive le rafraichissement de l'écran pendant la boucle
Sheets("Feuil2").Range("A1").CurrentRegion.Offset(1, 0).ClearContents '..efface les données existantes sur feuil2
With Sheets("Feuil1") '..................................................agit sur la Feuil1
derlig = .Range("a" & Rows.Count).End(xlUp).Row '.......................définit la dernière ligne
j = 6 '.............................................................ligne de départ Feuil1
col = 1 '.............................................................colonne de départ Feuil2
lig = 2 '.............................................................ligne de départ Feuil2
Do While j <= derlig '..................................................boucle de la ligne 6 à la dernière
derncol = .Cells(j, Cells.Columns.Count).End(xlToLeft).Column '.......dernière colonne de la ligne Feuil1 en fonction de j
For i = 1 To derncol '................................................boucle de la colonne 1 à la dernière sur Feuil1
If .Cells(j, i) <> "" Then '.........................................si cellule est remplie
.Cells(j, i).Copy Sheets("Feuil2").Cells(lig, col): col = col + 1 '.copie/colle la valeur + incrémente la colonne de 1
If col = 4 Then '..................................................si on atteint la colonne 4 de Feuil2
col = 1: lig = lig + 1 '..........................................on revient à la colonne 1, on change de ligne
End If
End If
Next i '.............................................................passe à la colonne suivante
j = j + 1 '...........................................................passe à la ligne suivante sur Feuil1
Loop
End With
Sheets("Feuil2").Activate '.............................................on active la Feuil2
Application.CutCopyMode = False '........................................on désactive la copie
End Sub
Cordialement,