Sub Macro1()
Cells.Clear ' Vide la feuille
Dim plage As Range, plage_a_supp As Range
Dim nb As Long, n As Long, i As Long, j As Long
Dim t, ii As Byte
t = Split("1 11 21 31") 'Permet de créer une petite table pour exemple
For ii = 0 To 3
Cells(t(ii), 1).Resize(10) = ii
Cells(t(ii), 2).Resize(10) = [=TRANSPOSE({1,2,3,4,5,6,7,8,9,10})]
Next ii
n = ActiveSheet.UsedRange.Rows.Count 'Compte le nombre de lignes dynamiques
nb = 4 'pour ôter 4 lignes en bas et 4 en haut
If plage Is Nothing Then
Set plage = Range("A1")
Set plage_a_supp = plage
End If
For i = 2 To n + 1 ' Après-dernière ligne du tableau
If Range("A" & i).Value = Range("A" & i - 1).Value Then
Set plage = Union(plage, Range("A" & i))
Else
If plage.Rows.Count >= nb * 2 Then
For j = 1 To nb
Set plage_a_supp = Union(plage_a_supp, plage(j, 1), plage(plage.Rows.Count + 1 - j, 1))
Next
Set plage = Range("A" & i)
If Range("A" & i).Value = "" Then Exit For
End If
End If
Next
plage_a_supp.EntireRow.Delete
End Sub