Bonjour,
Un essai en passant par un tableau VBA, le traitement est plus rapide :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Debut As Integer
Dim fin As Integer
Dim colNb As Integer
Dim tablo, Plage As Range
Debut = 7
fin = 150
colNb = 4
' on affiche toutes les lignes
Range(Cells(Debut, colNb), Cells(fin, colNb)).EntireRow.Hidden = False
' on récupère la colonne de données sous VBA = traitement d ela boucle plus rapide car pas d'accès à la feuille pour chaque cellule
tablo = Range(Cells(Debut, colNb), Cells(fin, colNb))
' on boucle sur ce tableau en "recalant" les valeurs de début et de fin
For i = Debut - 6 To fin - 6
' on test si la valeur est égale à rien
If tablo(i, 1) = "" Then
' si le range "Plage est non vide"
If Not Plage Is Nothing Then
' on ajoute cette cellule à la plage
Set Plage = Union(Plage, Cells(i + 6, colNb))
Else
' sinon la plage est égale à la première cellule dont le test est vrai
Set Plage = Cells(i + 6, colNb)
End If
End If
Next i
' si la plage est différente de rien, alors on masque les lignes
If Not Plage Is Nothing Then Plage.EntireRow.Hidden = True
End Sub
@ bientôt
LouReeD