Menu

Compter cellules apres un filtre Excel [Résolu/Fermé]

- - Dernière réponse :  12 - 1 févr. 2018 à 09:10
Bonjour,

J'ai une petite question: J'ai un tableau en Excel et je suis censé de compter sur une colonne l'apparition du mot Médecin (avoir le total). Le problème vient du fait que j'applique un filtre et si j'utilise « nb.si() », la fonction compte tout même les cellules qui sont cachées derrière le filtre que moi j'ai besoin juste les données filtrées. Merci d’avance pour votre réponse.

Gabriel
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
476
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
21 juin 2017
166
49
Merci
Salut
La fonction sous.total répond à cette problématique

=Sous.total(3;'ton champs') : compte le nombre de valeur affichées
=Sous.total(9;'ton champs') : additionne les valeurs pour autant que ce soit des valeurs numériques


Il y'en a d'autres (de 1 à 9 je crois) mais je ne me rappelle que ces deux là. je vais les retrouver..

Dire « Merci » 49

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 40421 internautes nous ont dit merci ce mois-ci

> Kameomanu -
Super merci à vous ;)
il ne faut pas ajouter 10 mais 100 (ex: 10 : Var (INCLUE lignes masquees), 110: Var (SANS lignes masquees))
Merci beaucoup
Merci à vous.
Merci beaucoup c'est top !
Messages postés
476
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
21 juin 2017
166
19
Merci
Re
Ah ben non, il y'en a 11 :
1 MOYENNE
2 NB
3 NBVAL
4 MAX
5 MIN
6 PRODUIT
7 ECARTYPE
8 ECARTYPEP
9 SOMME
10 VAR
11 VAR.P


A+
Salut,

J’ai essayé ta solution et cela ne marche pas. En effet dans ma colonne je n’ai pas des valeurs numériques mais une liste qui comprenne les appellations suivantes ; ‘médecin’, ‘ infirmiers’, ‘chef de services’. Au début dans ma feuille j’ai une base de données qui couvre tout le mois. J’applique un filtre (filtre automatique en Excel) par date. Par exemple si je sélectionne le 7 juillet dans ma colonne « interlocuteur » ils restent 2 cellules « médecin », 1 « infirmier », 3 « chef de service ». J’aurais besoin de la fonction qui retourne ces valeurs. Merci pour ta réponse antérieure.

Gabriel
5
Merci
Une solution consiste à créer une colonne qui te dit si la ligne est masquée ou pas :

Une colonne avec comme formule =SOUS.TOTAL(3;D3), avec D3 une cellule toujours remplie (par exemple le numéro/compteur de ligne)

Et après la fonction NB.SI.ENS, filtre sur cette colonne et sur la colonne avec ton critère à compter.

Ainsi, quand tu vas appliquer les filtres, les sous.total vont être masqués et afficher '0', et ne compter que tes critères sur les lignes visibles.
Merci, effectivement cela fonctionne parfaitement.
Messages postés
22669
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 avril 2019
7333
2
Merci
Bonjour,

tu peux te faire une fonction personnalisée (dans un module, pas de le code de la feuille) qui te retourne 1 si la ligne de la cellule est visible ou 0 si elle est cachée.
Function visible(cellule As Range) As Integer
    visible = (Not cellule.EntireRow.Hidden) * -1
End Function


- Oter tous les filtres.
- Ajouter en C2: =visible(C2) que tu recopies vers le bas (cette colonne pourra être masquée si besoin)

- Avec les "médecin" en colonne B
=SOMMEPROD((B2:B10="médecin")*C2:C10) te retourne le nombre de "médecin" visibles.

Appliquer les filtres et tester

eric
Salut Eric,

Ta solution est pas mal. Par contre j’ai encore des soucis lol Moi j’applique un filtre automatique en Excel mais je passe par une macro…si j'applique un filtre manuel ta solution return la valeur souhaitée mais si je passe par macro (mon but) alors toute la colonne affiche #VALEUR ! en l’occurrence la cellule ou je fais mon calcul…t’as une idée pk ?

Gabriel
Messages postés
5
Date d'inscription
dimanche 1 décembre 2013
Statut
Membre
Dernière intervention
27 décembre 2018
2
1
Merci
j'ai eu le même problème et la proposition avec =SOUS.TOTAL marche du tonnerre

il faut choisir no_fonction=3, qui correspond à NBVAL

donc si toute ma colonne est sélectionnée, j'obtiens bien 618 éléments
si je ne sélectionne que 'médecin', j'obtiens 213 éléments
ainsi de suite

=SOUS.TOTAL(3;A2:A619)
Raymond PENTIER
Messages postés
48632
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
22 avril 2019
16115 -
C'est exactement la toute première réponse, donnée depuis le 18 juillet 2008 !
http://www.commentcamarche.net/forum/oldest/7465943-compter-cellules-apres-un-filtre-excel#1
Messages postés
48632
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
22 avril 2019
16115
0
Merci
Salut, Igabriel.
Et tout simplement, sans faire de macro, si tu appliquais la fonction SOMMEPROD évoquée par eriiic aux colonnes "Date" et "Appellation" ? C'est rapide et fiable, et ça répond exactement à ta demande.
Messages postés
22669
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 avril 2019
7333
0
Merci
Bonjour,

Si tu fais ton filtre par macro compte directement dans la macro sans faire de fonction alors... non ?
0
Merci
Bonjour Gabriel,
Je voudrais savoir si tu a trouvé une solution a ton probleme parce que jai le mm problem?
Merci
0
Merci
créer une colonne avec la formule si =SI(A1="médecin";1;0)
(A1 étant la cellule de la colonne censée éventuellement recevoir le mot médecin)
puis créer un sous total au dessus de l'étiquette de la colonne qui contient cette formule
le sous total sera donc égal au nombre de cellules comportants le mot médecin
Messages postés
17
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 juin 2013
0
Merci
Salut,

Pour ton pb il faut que tu passes par VBA /

SUB MacroNbMedecin ()

dim nbligneas long
dim colonne as long
dim nbMedecin as long
dim nbcolonne as long
dim rg as range

colonne = Tu mets le numéro de ta colonne que tu veux filtrer

'Cherche la première ligne non vide
lignedebut= cells(1,colonne).end(xldown).row

'Compte le nb de ligne et de colonne de la plage
nbligne= cells(rows.count,colonne).end(xlup).row
nbcolonne = cells(lignedebut,columns.count).end(xltoleft).column

'récupère la plage
Set rg = Cells(lignedebut, 1).Resize(nbligne, nbcolonne)

'On filtre
rg(1, 1).Offset(-1, 0).AutoFilter Field:=colonne, Criteria1:="=MEDECIN"

'Vérifie que ca existe
On Error Resume Next
If IsError(rg.SpecialCells(xlCellTypeVisible)) Then
On Error GoTo finProcRecupGP3Bis:
MsgBox "Aucune données comporte le mot MEDECIN", vbInformation, "Données"
End '==> on sort de la fonction
End If

'pour compter tu fais
nbMedecin = rg.SpecialCells(xlCellTypeVisible).Count / nbcolonne


cells(1,1) = nbMedecin '==> colle le nb de medecin dans la cellule A1

end SUB
eriiic
Messages postés
22669
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 avril 2019
7333 -
Bonjour,

oufff, il était temps, 5 ans qu'il attendait... ;-)
eric
Fethi93
Messages postés
17
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 juin 2013
-
Je n'ai pas fait attention...
Je suis nouveau sur ce forum.
Désoler.
ça peut servir à d'autres, même après plusieurs années....