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" ?
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...
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...
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
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
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 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
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
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
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