Macro : compteur ligne visible (filtre)
Bonjour,
Je souhaite réaliser un code ne s'appliquant que sur les lignes visibles d'une feuille excel.
En fait, je souhaite masquer des lignes visibles qui sont vides pour certaines conditions (si 2 lignes visibles et vides se suivent alors masquer une ligne).
Mon problème est que je n'arrive pas à compter uniquement les lignes visible de la feuille.
Quand j'utilise for i = 0 to Sheets("données graph").Range("B" & Rows.Count).End(xlUp).Row , je voudrai que le comptage se fasse pour toutes les lignes visibles sinon mon code ne marche pas.
Avec mon code, si deux lignes visibles vides sont séparées d'une autre ligne masquée alors ça compte la ligne masquée.
je voudrais que ça compte uniquement les lignes visibles.
Par exemple: ligne 1 visible; ligne 2 masquée, ligne 3 visible.
Mon compteur i à la ligne 3 devrait être i = 2 et non i = 3.
Sub MasquerLignesVides()
Dim i As Long
Dim MyRng As Range
Dim VisibleRows As Long
Dim Derlig As Long
Derlig = Sheets("données graph").Range("B" & Rows.Count).End(xlUp).Row
Set MyRng = Sheets("données graph").Range("B5:B" & Derlig)
VisibleRows = MyRng.Cells.SpecialCells(xlCellTypeVisible).Cells.Count
For i = 1 To VisibleRows
If Sheets("données graph").Range("B" & i).Value = " " And Sheets("données graph").Range("B" & i + 1).Value = " " Then
Sheets("données graph").Range("B" & i).Rows.Hidden = True
End If
Next
End Subdans l'exemple que j'ai donné précédemment avec ce code ça marche :
Sub MasquerLignesVides()
Dim i As Long
Dim MyRng As Range
Dim VisibleRows As Long
Dim Derlig As Long
Derlig = Sheets("données graph").Range("B" & Rows.Count).End(xlUp).Row
Set MyRng = Sheets("données graph").Range("B5:B" & Derlig)
VisibleRows = MyRng.Cells.SpecialCells(xlCellTypeVisible).Cells.Count
For i = 1 To Derlig
If Sheets("données graph").Range("B" & i).Value = " " And Sheets("données graph").Range("B" & i + 1).Rows.Hidden = True And Sheets("données graph").Range("B" & i + 2).Value = " " Then
Sheets("données graph").Range("B" & i).Rows.Hidden = True
End If
Next
End SubCependant étant donné que le nombre de lignes masquées entre chaque ligne vide visible est variable alors je ne peux pas appliquer ce code à tous les cas de figures.
il faut donc que mon compteur ne compte que les lignes visibles pour avoir un code indépendant du nombre de lignes cachées séparant deux lignes visibles vides :
For i = ? To ?
If Sheets("données graph").Range("B" & i).Value = " " And And Sheets("données graph").Range("B" & i + 1).Value = " " Then
Sheets("données graph").Range("B" & i).Rows.Hidden = True
End Ifcomment faire? j'arrive pas a trouver de solution sur internet!
pour être encore plus claire il faudrait que ça compte comment ça dans mon for :
A1 visible i=1
A2 cachée
A3 cachée
A4 cachée
A5 visible i=2
A6 visible i=3
A7 cachée
A8 visible i=4
Bonjour
Ne sachant pas trop ce que veux faire essayes
Sub MasquerLignesVides()
Dim Cel As Range
Dim MyRng As Range
Dim Derlig As Long
Dim Ligne As Long
With Sheets("données graph")
Derlig = .Range("B" & Rows.Count).End(xlUp).Row
Set MyRng = .Range("B5:B" & Derlig)
For Each Cel In MyRng.SpecialCells(xlCellTypeVisible)
If Cel = " " Then
If Ligne > 0 Then
.Rows(Ligne).Hidden = True
End If
Ligne = Cel.Row
Else
Ligne = 0
End If
Next Cel
End With
End SubSi pas ça, joins un fichier avec ce que tu as et ce que tu veux
merci beaucoup c'est exactement ça!