Private Sub Worksheet_Change(ByVal Target As Range)
Dim derlig&
Application.ScreenUpdating = False
Application.EnableEvents = False
If FilterMode Then ShowAllData 'si la feuille est filtrée
derlig = Cells(Rows.Count, 1).End(xlUp).Row
If derlig < 4 Then Exit Sub 'sécurité
With Rows("4:" & derlig)
.Sort .Columns(4), Header:=xlNo 'tri sur les classes
.Columns(27) = "=RANK(Z4,OFFSET(Z$4,MATCH(D4,D:D,0)-4,,COUNTIF(D:D,D4)))"
.Columns(27) = .Columns(27).Value 'supprime les formules
.Sort .Columns(2), xlAscending, Header:=xlNo 'tri alphabétique sur les noms des élèves
End With
Application.EnableEvents = True
End Sub