Formule pour comptage base filtrée
Bonjour à tous,
Je sèche devant une forle qui me permettrait de compter 3 colonnes différentes après avoir mis un filtre sur une base de données !
Pour la pièce jointe, je souhaiterais savoir en cellule A1 combien de noms ==> facile = sous.total( 3; c3:C2000)
mais également combien de M et F dans la colonne sexe
et combien de L et R
Merci de votre aide
Bonjour,
Macro à appliquer après filtrage:
Sub Comptage_Apres_Filtrage()
Dim f1 As Worksheet
Dim c As Range
Dim Nb_Noms As Long, DerLig As Long
Dim D1 As Object, D2 As Object, D3 As Object, D4 As Object
Application.ScreenUpdating = False
Set f1 = Sheets("LISTE")
DerLig = f1.Range("C" & Rows.Count).End(xlUp).Row
Set D1 = CreateObject("Scripting.dictionary")
Set D2 = CreateObject("Scripting.dictionary")
Set D3 = CreateObject("Scripting.dictionary")
Set D4 = CreateObject("Scripting.dictionary")
'Comptage des noms
Nb_Noms = f1.Range("_FilterDataBase").Resize(, 1).SpecialCells(xlCellTypeVisible).Count - 1
'Comptage par sexe
For Each c In f1.Range(Cells(3, "F"), Cells(DerLig, "F"))
If Rows(c.Row).Hidden = False And c.Value = "F" Then
D1.Add c, ""
ElseIf Rows(c.Row).Hidden = False And c.Value = "M" Then
D2.Add c, ""
End If
Next c
'Comptage par R et L
For Each c In f1.Range(Cells(3, "I"), Cells(DerLig, "I"))
If Rows(c.Row).Hidden = False And c.Value = "R" Then
D3.Add c, ""
ElseIf Rows(c.Row).Hidden = False And c.Value = "L" Then
D4.Add c, ""
End If
Next c
'Restitution dans cellule A1
Range("A1").Value = Nb_Noms & " Noms dont " & D1.Count & " femmes " & D2.Count & " hommes, " & D3.Count & " R et " & D4.Count & " L"
Set D1 = Nothing
Set D2 = Nothing
Set D3 = Nothing
Set D4 = Nothing
End Sub
Cdlt
Bonjour le fil,
Une autre possibilité basée sur un TCD et des segments
Je me suis permis d'ajouter une colonne pour sélectionner l'année
Bonjour BrunoM45 et Arturo83,
Merci pour vos réponses positives et leur éfficacité
J'ai opté pour la macro pour des raisons pratiques.
Arturo, pourriez-vous regarder pourquoi les noms sont comptés même en cellules vides ? ex : appliquez la macro sur base non filtrée pour voir
Second problème : il faudrait compter les sexes uniquement dans les lignes de noms renseignés
Merci beaucoup pour votre aide précieuse
J'ai oublié de re-tester sans les filtres:
Sub Comptage_Apres_Filtrage()
Dim f1 As Worksheet
Dim c As Range
Dim Nb_Noms As Long, DerLig As Long
Dim D1 As Object, D2 As Object, D3 As Object, D4 As Object
Application.ScreenUpdating = False
Set f1 = Sheets("LISTE")
DerLig = f1.Range("C" & Rows.Count).End(xlUp).Row
Set D1 = CreateObject("Scripting.dictionary")
Set D2 = CreateObject("Scripting.dictionary")
Set D3 = CreateObject("Scripting.dictionary")
Set D4 = CreateObject("Scripting.dictionary")
'Comptage des noms
Nb_Noms = f1.Range("_FilterDataBase").Resize(, 1).SpecialCells(xlCellTypeVisible).Count - 1
If Nb_Noms <> DerLig - 2 Then 'c'est que le filtre est actif
'Comptage par sexe
For Each c In f1.Range(Cells(3, "F"), Cells(DerLig, "F"))
If Rows(c.Row).Hidden = False And c.Value = "F" Then
D1.Add c, ""
ElseIf Rows(c.Row).Hidden = False And c.Value = "M" Then
D2.Add c, ""
End If
Next c
'Comptage par R et L
For Each c In f1.Range(Cells(3, "I"), Cells(DerLig, "I"))
If Rows(c.Row).Hidden = False And c.Value = "R" Then
D3.Add c, ""
ElseIf Rows(c.Row).Hidden = False And c.Value = "L" Then
D4.Add c, ""
End If
Next c
'Restitution dans cellule A1
Range("A1").Value = Nb_Noms & " Noms dont " & D1.Count & " femmes " & D2.Count & " hommes, " & D3.Count & " R et " & D4.Count & " L"
Else
Nb_Noms = Application.CountIf(f1.Range("C3:C" & DerLig), "<>")
Nb_F = Application.CountIf(f1.Range("F3:F" & DerLig), "F")
Nb_H = Application.CountIf(f1.Range("F3:F" & DerLig), "H")
Nb_R = Application.CountIf(f1.Range("I3:I" & DerLig), "R")
Nb_L = Application.CountIf(f1.Range("I3:I" & DerLig), "L")
'Restitution dans cellule A1
Range("A1").Value = Nb_Noms & " Noms dont " & Nb_F & " femmes " & Nb_H & " hommes, " & Nb_R & " R et " & Nb_L & " L"
End If
Set D1 = Nothing
Set D2 = Nothing
Set D3 = Nothing
Set D4 = Nothing
End SubCdlt
Bonjour Arturo83
Merci pour cette sympathique macro qui me rends bien service !
Désolé de répondre aussi tardivement ! Quelques soucis d'ordre familial !!
Bien cordialement