Sub Test()
'déclaration des variables
Dim ws1 As Worksheet 'Feuille de départ
Dim ws2 As Worksheet 'feuille qui reçoit les données
Dim rg1 As Range 'cellule de départ
Dim rg2 As Range 'cellule qui reçoit les données
Dim i As Long 'compteur
Dim MaxLignes As Long 'nombre de lignes max
Set ws1 = ThisWorkbook.Sheets("Feuil1")
Set ws2 = ThisWorkbook.Sheets("Feuil2")
Set rg1 = ws1.Range("B1") 'première cellule qui contient les données
Set rg2 = ws2.Range("A1")
'*** attention à l'instruction suivante, car efface tout ! ***
ws2.UsedRange.ClearContents 'vide le contenu de la feuille 2
ws2.UsedRange.ClearFormats
MaxLignes = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row 'dernière ligne dans la colonne A
Do Until IsEmpty(rg1) 'boucle tant qu'il y a des données dans la ligne 1
'on commence par écrire le nom trouvé
rg2 = rg1
Set rg2 = rg2.Offset(1, 0) 'décaler de 1 ligne
For i = 2 To MaxLignes 'boucle sur toutes les lignes
If Cells(i, rg1.Column) <> "" Then 's'il y a une valeur sous le nom alors
ws1.Cells(i, "A").Copy rg2.Offset(0, 1) 'copier la valuer de la colonne A
ws1.Cells(i, rg1.Column).Copy rg2.Offset(0, 2) 'copier la valeur sous le nom
Set rg2 = rg2.Offset(1, 0) 'on passe à la prochaine ligne
End If
Next i
Set rg1 = rg1.Offset(0, 1) 'décale de une colonne
Loop
End Sub