Re,
La version 02 adaptée... Le code :
Sub Macro1()
Dim OL As Worksheet 'déclare la variable OL (Onglet Liste)
Dim OD As Worksheet 'déclare la variable OD (Onglet Donnees)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim NF As Integer 'déclare la variable NF (Nombre de Fois)
Dim PAC As Range 'déclare la variable PAC (Plage À Copier)
Dim J As Integer 'déclare la variable J (incrément)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim PAS As Range 'déclare la variable PAS (Plage À Supprimer)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (tableau des Ligne)
Dim K As Integer 'déclare la variable K (incrément)
Dim COL As Byte 'déclare la variable COL (COLonne)
Set OL = Worksheets("Liste") 'définit l'onglet OL
Set OD = Worksheets("Donnees") 'définit l'onglet OD
OL.Rows("3:" & Application.Rows.Count).Delete 'supprime d'éventuelles anciennes données de l'onglet OL
Application.ScreenUpdating = False 'masque les rafraîchissemetns d'écran
DL = OD.Cells(Application.Rows.Count, "A").End(xlUp).Row 'de'finit la dernière ligne éditée DL de la colonne A de l'onglet OD
NF = Int(DL / 27) + 1 'de'finit le nombre de fois NF
Set PAC = OL.Range("A1:H2") 'définit la plage à copier PAC
For J = 1 To NF 'boucle 1 : de 1 au nombre de fois NF
TV = OD.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 29 To 2 Step -1 'boucle 2 : inversée des lignes 29 à 2 en remontant
On Error Resume Next 'gestion des erreur (en cas d'erreur passe à la ligne suivante)
'condition : si le nom/prénom de la ligne I est différent du nom/prenom de la ligne I-1
If Not TV(I, 2) & TV(I, 3) = TV(I - 1, 2) & TV(I - 1, 3) Then 'dans le dernier tableau TV(I,...) va générer une erreur
DL = I - 1 'redéfinit la ligne DL
Exit For 'sort de la boucle 2
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
On Error GoTo 0 'annule la gestion des erreur
Set DEST = OL.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
Set PAS = OD.Rows("2:" & DL) 'définit la plage à supprimer PAS
TMP = PAS
PAS.Delete 'supprime la plage à supprimer PAS
K = 1
For I = 1 To UBound(TMP, 1)
If TMP(I, 1) = "" Then GoTo suite
ReDim Preserve TL(1 To 8, 1 To K)
TL(1, K) = TMP(I, 1)
TL(2, K) = TMP(I, 2) & " " & TMP(I, 3)
Select Case TMP(I, 7)
Case "DOMAINE DE LA MUSIQUE"
COL = 3
Case "DOMAINE DES ARTS DE LA PAROLE ET DU THEATRE"
COL = 5
Case "DOMAINE DE LA DANSE"
COL = 7
End Select
TL(COL, K) = TMP(I, 4)
TL(COL + 1, K) = TMP(I, 5) & "(" & TMP(I, 6) & ")"
K = K + 1
Next I
suite:
DEST.Resize(UBound(TL, 2), 8).Value = Application.Transpose(TL)
If Not J = NF Then 'condition : si J n'est pas la dernière fois NF
Set DEST = OL.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'redéfinit la cellule de destination DEST
PAC.Copy DEST.Offset(1, 0) 'copy la plage à copier dans DEST
End If 'fin de la condition
Next J 'prochaine fois de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissemetns d'écran
End Sub
Le fichier :