re, faute dans mon dernier message
je vous offre 2 options, une pour supprimer et une pour cacher (mais vous pouvez les mélanger, si vous voulez).
Pour des raisons évident, il faut supprimer dans une séquence descendant
Sub Test_Supprimer()
Dim c As Range, s As String
t = Timer
Set c = Sheets("feuil1").Range("A1:A1000")
s = ""
For i = c.Rows.Count To 1 Step -1 'if faut reculer !!! du dernier vers le premier
If c(i, 1).Value = "" Then 'cellule est vide
s = s & "," & c(i, 1).Address(0, 0) 'string avec les addresses des cellules vides séparé par une virgule
If Len(s) >= 250 Then Supprimer c, s 'le longueur max du string =255, donc juste avant, lancer "Supprimer"
End If
Next
Supprimer c, s 'pour le reste des lignes
MsgBox Timer - t
End Sub
Sub Supprimer(c As Range, s As String)
If Len(s) > 1 Then c.Parent.Range(Mid(s, 2)).EntireRow.Delete
s = ""
End Sub
Sub Test_Cacher()
Dim c As Range, UN As Range
t = Timer
Set c = Sheets("feuil1").Range("A1:A1000")
c.EntireRow.Hidden = False
For i = 1 To c.Rows.Count 'direction n'a pas d'importance
If c(i, 1).Value = "" Then 'cellule est vide
If UN Is Nothing Then Set UN = c(i, 1) Else Set UN = Union(UN, c(i, 1))
If UN.Cells.Count >= 100 Then Cacher UN 'ce n'est pas nécessaire, mais c'est souvent plus vite de vider UN régulièrement
End If
Next
Cacher UN 'pour le reste des lignes
MsgBox Timer - t
End Sub
Sub Cacher(c As Range)
If c Is Nothing Then Exit Sub
c.EntireRow.Hidden = True
Set c = Nothing
End Sub