Sub Masquer()
Dim L As Long, C As Range
Set C = Cells.Find("*", , , xlPart, xlByRows, xlPrevious)
If Not C Is Nothing Then
L = C.Row
For i = L To 5 Step -1
If Application.CountA(Cells(i, 3).Resize(, 5)) = 0 Then
Rows(i).Hidden = True
End If
Next i
End If
End Sub
Sub Afficher()
Dim L As Long, C As Range
Set C = Cells.Find("*", , , xlPart, xlByRows, xlPrevious)
If Not C Is Nothing Then
L = C.Row
Range(L & ":5").EntireRow.Hidden = False
End If
End Sub
Sub Afficher2()
On Error Resume Next
Sheets("liste").AutoFilter.Range.AutoFilter
On Error GoTo 0
End Sub
Sub Masquer2()
Dim DernLigne
With Sheets("liste")
DernLigne = Evaluate("max(if(len(liste!C:C),row(liste!C:C),0))") 'ligne de la dernière cellule non-vide de C
.Range("C2:C" & DernLigne).AutoFilter 1, "<>"
End With
End Sub
OUI !!! J’ai toujours pensé qu’on devrait fusiller les gens qui fusionnent les cellules ! lol. Sérieusement, si tu fusionnes B5, B6 et B7, les cellules B6 et B7 sont vides. On peut s’en sortir si il y a toujours 3 lignes par nom, sinon, il faut tester la couleur ou les bordures. A toi de dire ce qu’il en est.
Sub Masquer()
Dim L As Long, C As Range
Set C = Cells.Find("*", , , xlPart, xlByRows, xlPrevious)
If Not C Is Nothing Then
L = C.Row
For i = L To 5 Step -1
If Application.CountA(Cells(i, 3).Resize(, 5)) = 0 And Cells(i, 3).Offset(, -1).Interior.ColorIndex <> -4142 Then
Rows(i).Hidden = True
End If
Next i
End If
End Sub
Sub Afficher()
Dim L As Long, C As Range
Set C = Cells.Find("*", , , xlPart, xlByRows, xlPrevious)
If Not C Is Nothing Then
L = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1
Range(L & ":5").EntireRow.Hidden = False
End If
End Sub
Daniel
Concrètement, sur mon fichier ce code concerne via un bouton les lignes 35 à 200.
Hors lorsque je clique, il reste quelques lignes apparentes à partir de la ligne 65 mais de façon aléatoire (67;68 visibles puis masquées jusqu’à 95,…)
Les lignes étant strictement identiques, je ne comprends pas…
Sub Masquer2()
Dim C As Range
With Sheets("Liste").Range("c5:c200") 'votre plage à vérifier (à adapter)
For Each C In .Cells
If Not C.MergeCells Then 'la cellule n'est pas fusionnée
If C.Offset(, -1).MergeCells Then 'celle à gauche l'est
If (WorksheetFunction.CountBlank(C.Resize(, 5)) + WorksheetFunction.CountIf(C.Resize(, 5), 0) = 5) Then C.EntireRow.Hidden = True 'ces 5 cellules sont vides ou contiennent 0
End If
End If
Next
End With
End Sub
Sub Afficher2()
With Sheets("Liste").Range("B5:B200") 'votre plage ( à adapter)
.EntireRow.Hidden = False
End With
End Sub
Je peux juste dire que mon code fonctionne pour le classeur que tu as fourni. Je teste sur la couleur de la colonne B. Il faut que les cellules soient colorées pour que la ligne soit masquée. Si le code de Cow18 ne convient pas non plus, il faudra que tu partages le classeur avec lequel tu fais les tests.