Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Compter les lignes dans une feuille en présence de filtres activés - Compter le nombre de lignes sélectionnées

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Legendre

XLDnaute Nouveau
Bonjour
Je souhaite compter les lignes de ma feuille (onglet)
Pour ce faire j'ai le code suivant (Sans filtres activés)
-----------------------------------------------------------------------------------------
Private Sub CommandButton23_Click()
If ActiveWorkbook.Name <> ThisWorkbook.Name Then ThisWorkbook.Activate
Dim compteur, derligne As Integer
Dim cellule As Range
derligne = Worksheets("Materiels").Range("A" & Rows.Count).End(xlUp).Row
For Each cellule In Worksheets("Fiches").Range("A2:A" & derligne)
If cellule <> 0 Then
compteur = compteur + 1
End If
Next
'MsgBox compteur
MsgBox "Nombre de Matériels : " & compteur
End Sub
---------------------------------------------------------------------------------------
Cependant, comment puis-je améliorer le code en présence de filtres activés afin de ne compter que les lignes filtrées et non la totalité des lignes de l'onglet "Matériels" ?

Merci

Jacques
 
Bonjour,

Déjà l'instruction communément utilisée:
VB:
derligne = Worksheets("Materiels").Range("A" & Rows.Count).End(xlUp).Row
est sensible aux lignes filtrées, ce que peu de monde sait.
Donc si les dernières lignes sont filtrées elle ne seront pas comptées.

Pour obtenir le n° de dernière ligne de manière sûre et non sensible au filtrage, utiliser l'instruction:
VB:
With Application
    derligne = .Max(.IfError(.Match("z",  Worksheets("Materiels") .Columns(1)), 0), .IfError(.Match(9 ^ 99,  Worksheets("Materiels") .Columns(1)), 0))
End With

Pour compter les lignes non filtrées:
VB:
NbLignesNonFiltrées =  Worksheets("Materiels").Range("A1:A" & derligne).SpecialCells(xlCellTypeVisible).Count

Pour compter les lignes filtrées:
VB:
NbLignesFiltrées =  derligne - Worksheets("Materiels").Range("A1:A" & derligne).SpecialCells(xlCellTypeVisible).Count
 
Bonjour Legendre, bonjour le forum,

Peut-être comme ça :

VB:
Private Sub CommandButton23_Click()
Dim C As Workbook
Dim M As Worksheet, F As Worksheet
Dim compteur As Integer, derligne As Integer
Dim cellule As Range

Set C = ThisWorkbook
Set M = C.Worksheets("Materiels")
Set F = C.Worksheets("Fiches")
derligne = M.Range("A" & Rows.Count).End(xlUp).Row
For Each cellule In F.Range("A2:A" & derligne)
    If cellule.Value <> 0 And F.Rows(cellule.Row).Visible = True Then
        compteur = compteur + 1
    End If
Next
MsgBox "Nombre de Matériels : " & compteur
End Sub

[Édition]
Bonjour Dudu, nos posts se sont croisés...
 
Merci Robert
Mais j'ai fais une erreur dans mon code de départ
Corriger
derligne = Worksheets("Materiels").Range("A" & Rows.Count).End(xlUp).Row
For Each cellule In Worksheets("Fiches").Range("A2:A" & derligne)
Pour lire
derligne = Worksheets("Materiels").Range("A" & Rows.Count).End(xlUp).Row
For Each cellule In Worksheets("Materiels").Range("A2:A" & derligne)
pour lire
 
Bonjour Legendre, Dudu2, Robert,

Compter les cellules d'une feuille filtrée se fait avec la fonction SOUS.TOTAL.

Si CommandButton23 est sur la feuille filtrée nommée "Materiels" :
VB:
Private Sub CommandButton23_Click()
MsgBox "Nombre de Matériels : " & Application.Subtotal(3, Range("A2:A" & Rows.Count))
End Sub
Si le bouton n'est pas sur cette feuille :
VB:
Private Sub CommandButton23_Click()
With ThisWorkbook.Sheets("Materiels")
    MsgBox "Nombre de Matériels : " & Application.Subtotal(3, .Range("A2:A" & .Rows.Count))
End With
End Sub
A+
 

Bonjour j'ai adapté le code suivant
Private Sub CommandButton31_Click()
Dim C As Workbook
Dim M As Worksheet
Dim compteur As Integer, derligne As Integer
Dim cellule As Range
Set C = ThisWorkbook
Set M = C.Worksheets("Materiels")
derligne = M.Range("A" & Rows.Count).End(xlUp).Row
For Each cellule In M.Range("A2:A" & derligne)
If cellule.Value <> 0 Then
compteur = compteur + 1
End If
Next
MsgBox "Nombre de Matériels : " & compteur
End Sub

J'ai utilisé un filtre et deux lignes sont affichées dans mon onglet "Matériels", je m'attendais à avoir deux plutot que 362 qui correspond au numéro ou emplacement de deuxième ligne affichée suite au filtre
 
Bonjour
Mon problème est résolu avec la solution de job75
Code suivant :
MsgBox "Nombre de Matériels : " & Application.Subtotal(3, Range("A2:A" & Rows.Count))
Merci à vous c'est plaisant quand cela fonctionne
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
582
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…