Compter nombre d'apparence sur colonne filtrée

Bonjour,

Comment compter le nombre d’occurrence d'une chaine de caractère dans une colonne filtrée sans prendre en compte les occurrences filtrées.

Pour simplifier au max disons que j'ai :

  • De A1:A10 les chiffres 1 à 10
  • De A11:A20 les chiffres 1 à 10
  • De B1:B20 le texte OK
Si je filtre en colonne A le chiffre 1,

je voudrais compter le nombre d’occurrences apparentes de OK en colonne B.

Et avoir le résultat 2 même si elle contient 20 fois le texte OK.

J'ai vu des formules avec sous.total nbval etc mais je n'y arrive pas.

Merci d'avance pour votre aide.

Cordialement

Pour compter le nombre de lignes visibles après l'application d'un filtre la fonction SOUS.TOTAL semble pourtant la bonne.

Dans une cellule indépendante de la colonne de comtpage

=SOUS.TOTAL(Type;Colonne)

Type est un numéro :

3 correspond au nombre de valeurs visibles.

Par exemple, si je veux compter les lignes visibles de la colonne A après application du filtre (même si celui-ci se fait sur un critère d'une autre colonne), la formule sera :

=SOUS.TOTAL(3;A:A)

En rajoutant -1 s'il y a une ligne de titre par exemple

Merci pour votre réponse,

mais mon exemple était peut être un peut trop simplifié,

je le refais :

  • De A1:A10 les chiffres 1 à 10
  • De A11:A20 les chiffres 1 à 10
  • De B1:B10 le texte OUI
  • De B11:B20 le texte NON
Si je filtre en colonne A le chiffre 1,

Il me restera un OUI en B1 et un NON en B11

je voudrais compter le nombre d’occurrences apparentes de OUI en colonne B.

Et avoir le résultat 1 même si elle contient 10 fois le texte OUI.

Avec un =SOUS.TOTAL(3;B:B) ça me compte toutes les cases filtrées non vides, alors qu'il me faut uniquement le nombre d'entre elles qui contient OUI.

Bonjour,

Par macro c'est possible. Un exemple de comptage de cellules filtrées :

Sub Compter_Val_Filtrées()
Dim Nb_OK, As Integer
Nb_OK = 0
For Each Cell In Range("B2:B100").SpecialCells(xlCellTypeVisible)
    If Cell = "OK" Then
        Nb_OK = Nb_OK + 1
    End If
Next
   MsgBox = Nb_OK
End Sub

Bonjour ouisansdoute,

Merci pour ta réponse,

Peut tu m'aiguiller stp je n'y connais rien aux macros,

je viens d'ajouter le mode développeur,

je clique sur visual basic, insertion, module, je colle ton code.

Je ne sais pas comment faire pour lancer le code, ni comment choisir où afficher le résultat ?

Mon code affiche dans une fenêtre le nombre de valeurs de la plage B2:B100 contenant OK après application d'un filtre.

Pour l'exécuter tu peux :

1 - Dans le ruban développeur Cliquer sur la dalle Macro, sélectionner la ligne "Compter_Val_Filtrées" et cliquer sur exécuter

2 - associer la macro à un raccourcis clavier : même chose qu'en 1 mais cliquer sur Options au lieu de exécuter. Ensuite il suffit de saisir le raccourci pour qu'elle s'exécute

3 - (ma préférée) : Insérer un rectangle (insérer forme) pour en faire un bouton. Puis clic droit sur ce rectangle et "affecter une macro". Sélectionner la macro à affecter. A chaque fois que tu cliqueras sur le bouton, la macro s'exécutera.

Il est aussi possible de déclencher la macro sur un évènement du type changement de valeur dans une cellule mais c'est un peu plus complexe.

Pour l'affichage du résultat. Si tu le veux par exemple en A1 remplace le code

MsgBox Nb_OK

Par

range("A1") = Nb_OK

Bonjour,

je viens de créer un bouton que j'ai affecter à la macro.

j'ai remplacer

MsgBox Nb_OK

par

Range("C2") = Nb_OK

lorsque je clique sur le bouton ça me met :

Erreur de compilation

Erreur de syntaxe

avec

Sub Compter_Val_Filtrées() surligné en jaune (je pense que c'est normal)

Dim Nb_OK, As Integer écrit en rouge

Bonjour,

je relance, quelqu'un peut m'aider à débugger la formule svp ?

Revoici le code (sans la ",")

Sub Compter_Val_Filtrées()
    Dim Nb_OK As Integer
    Nb_OK = 0
    For Each Cell In Range("B2:B100").SpecialCells(xlCellTypeVisible)
        If Cell = "OK" Then
            Nb_OK = Nb_OK + 1
        End If
    Next
       Range("A1") = Nb_OK
End Sub
Rechercher des sujets similaires à "compter nombre apparence colonne filtree"