Sub Macro1()
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des lignes)
Dim R As String 'déclare la variable R (Référence)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim C As Byte 'déclare la variable C (Couleur)
Range("H2").CurrentRegion.ClearContents 'efface d'éventuelle anciennes valeurs à partir de H2
TV = Range("A1").CurrentRegion 'définit le tableau des valeurs TV
K = 1 'initialise la variable K
ReDim Preserve TL(1 To 2, 1 To K) 'redimensionne le tableau des lignes (2 lignes , K colonnes)
TL(1, K) = 2: R = TV(1, 1) 'récupère dans la ligne 1 de TL la ligne de début de plage K, définit la référence R
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 1) <> R And Not TV(I, 1) = "" Then 'condition : si la donnée en ligne I colonne 1 de TV est différente de R et non vide
TL(2, K) = I - 1 'récupère dans la ligne 2 de TL la ligne de fin de plage K
K = K + 1 'incrément K
ReDim Preserve TL(1 To 2, 1 To K) 'redimensionne le tableau des lignes
TL(1, K) = I + 1 'recupère dans la ligne 1 de TL la ligne de début de la plage K
R = TV(I, 1) 'redéfinit la référence R
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
TL(2, K) = Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la ligne de fin de la dernière plage
'le tableau TL contient la ligne de début et la ligne de fin de chaque plage ayant la même référence
For I = 1 To K 'boucle 1 : sur toutes les plages différentes
M = Application.WorksheetFunction.Max(Range(Cells(TL(1, I), 5), Cells(TL(2, I), 5))) 'définit la valeur max de la plage
For J = TL(1, I) To TL(2, I) 'boucle 2 : sur toutes les lignes de la plage
If TV(J, 5) = M Then 'condition : si la donnée ligne J colonne 5 de TV est égale à la valeur max M
PLV = Cells(Application.Rows.Count, "H").End(xlUp).Row + 1 'définit la première luigne vide PLV de la colonne H
Cells(J, 2).Resize(, 4).Copy Cells(PLV, "H") 'copie la ligne J dans la cellule ligne PLV colonne H
Exit For 'sort de la boucle 2
End If 'fin de la condition
Next J 'prochaine ligne de la boucle 2
Next I 'prochaine plage de la boucle 1
End Sub