Formule pour comptage base filtrée

31combien.xlsm (173.40 Ko)

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

21mjc55-combien.xlsm (180.39 Ko)

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 Sub

Cdlt

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

Rechercher des sujets similaires à "formule comptage base filtree"