[excel] NB si à deux critères? [Résolu/Fermé]

Signaler
-
 beghinmatthieu -
Bonjour,
je voudrais faire la formule NB si avec deux critères. je dois ajouter un critère chiffré et un critère lettré.
Merci d'avance

38 réponses

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour Cris

essaie ceci si j'ai compris ton souci : il faut que les 2 plages aient la même taille et que les valeurs "x" et "y" soient situées sur la même position relative.

=SOMME((plage1="x")*(plage2="y")*1)

c'est une formule matricielle à valider par ctrl +maj + entrée



toujours zen
45
Merci

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

CCM 60511 internautes nous ont dit merci ce mois-ci

Bonjour,

Effectivement ça marche mieux avec une plage fixée et non toute la colonne.
j'avais la même erreur et je pensai que c'était lié à la réference à un autre onglet du classeur dans la formule mais finalement il faut limiter la plage des critères.

Merci Gbinforme.
Bonjour,

Effectivement ça marche mieux avec une plage fixée et non toute la colonne.
j'avais la même erreur et je pensai que c'était lié à la réference d'un autre onglet du classeur dans la formule mais finalement il faut juste limiter la plage des critères.

Merci Gbinforme.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour

Effectivement ça marche mieux avec une plage fixée et non toute la colonne.

C'est une des limitations de ce type de formule qui est très utile et il est tout de même possible d'utiliser toute la colonne (ou presque) en omettant seulement la dernière ligne (en Excel 2007, c'est le double) :
=SOMME(($B$1:$B$65535=1)*($T$1:$T$65535="1")*1)


je pensai que c'était lié à la réference d'un autre onglet du classeur dans la formule

Tu peux dans la formule faire référence à plusieurs autres onglets à la seule condition que les plages soient de même grandeur, avec par exemple :
=SOMME((Toulon!$B$1:$B$65535=1)*('La Garde'!$T$1:$T$65535=1)*1)

Bonjour,

C'est bon à savoir pour ces deux infos : taille et différence d'onglet, finalement le principe est bien de d'appliquer un "et" logique entre les même niveau de cellules. je viens de faire le test avec 3éme critère et ça marche toujours ! elle est vraiment magique cette formule.

je suis bien avancé graçe à vous.
Merci encore.
essaie ceci si j'ai compris ton souci : il faut que les 2 plages aient la même taille et que les valeurs "x" et "y" soient situées sur la même position relative. 
=SOMME((plage1="x")*(plage2="y")*1)


You saved my life !!! ;-)

MERCI. (ET VIVE LES FORUMS)
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
816
Bonjour,

personnellement j'utilise la fonction matricielle
{=Somme(si((mazone1=moncritèrenum)*(mazone2=moncritèrealpha);1;0))}
les accolades sont obtenues par une validation CTRL+SHIFT+ENTER de la formule.

cordialement

Super la formule matricielle !
Merci.
En voici pour info l'usage chez moi :
={SOMME(SI((INDIRECT("'"&C$1&"'!NiveauImportance")='Synthèse Dynamics AX'!$A12)*(INDIRECT("'"&C$1&"'!Réponses")=$A$5);1;0))}
la formule de gbin est bien plus simple et répond aussi a ce que je voulais faire,
mais j'aurais préféré trouver un opérateur "ou "
pour une formule de ce type:

=countif(plage,"text1" ou "text2")

désolé j'utilise une version en anglais de excel..
le countif = nb.si
et la virgule remplace le ;
évidemment le "ou" serait a remplacer avec un opérateur (un caractère) du type || ou un truc du genre.
qui permettrait d'éviter de retaper toute la séquence countif(plage1,xxx)+countif(plage1,xxx)
alors qu'on fait appel a la même fonction et qui plus est, sur la même plage...
Configuration: Windows XP Internet Explorer 6.0

Bonjour

Pour être plus précis je souhaite dans le cadre d'un planning calculé le nembre d'heure mensuel que chaque personne fait.

ces heures ont une equivalence en lettre par exemple M (pour matin) = 7 H de 7h du matin à 14h, je dois attribué plusieurs M à plusieurs personnes dans différent lieu j'ai 6 lieux. Aussi pour identifier l'horaire à faire et le lieu j'utilise : M1,M2...M6. chaque association du M et d'une lettre vaut 7 heures aujourd'hui la formule pour avoir la somme de tout les M sur une ligne je fais formule suivante :
NB.SI(plage;"M1")*7+NB.SI(plage;"M2")*7+NB.SI(plage;"M3")*7+NB.SI(plage;"M4")*7+NB.SI(plage;"M5")*7+NB.SI(plage;"M6")*7

J'ai une dizaine de lettre différente encore a placer de la même manière. Je ne sais pas si c'est possible mais j'ai besoin de faire plus court car au bout 6 lignes de formules je ne peux plus enregistrer ma page.
existe-t-il quelque chose du type :
NB.SI(plage;"M1"+"M2"+...+"M6")*7 qui permettrait qu'à chaque fois qu'un M... existe la valeur 7 soit ajouté au total final ? et de la même manière pour B,N,L,S,D.... En sachant que B=6.5: N=10, total final sur la même cellule.

j'espère avoir été plus clair.
Merci d'avance de votre réponse
Cordialement
jean-louis
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour

Je suppose que tes données sont de A1 à B24.
En D1 tu saisis le code que tu veux totaliser.
Dans la cellule de totalisation tu mets la formule suivante :
=SOMME(($A$1:$A$24=$D$1)*($B$1:$B$24<>0)*1)

et tu valides avec CTRL + MAJ + ENTREE cette formule matricielle
qui sera ainsi mise entre crochets { formule } et fonctionne très bien.

Si tu veux additionner les sommes de la colonne B, tu peux faire de la même façon :
=SOMME(($A$1:$A$24=$D$1)*($B$1:$B$24))


Tiens nous au courant des tests...
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour simo,

Si tu avais essayé de comprendre les formules précédentes tu aurais vu que c'était assez simple :
=SOMME(($B$9:$B$86=1)*($T$9:$T$86=1)*1)


et tu valides avec CTRL + MAJ + ENTREE cette formule matricielle
qui sera ainsi mise entre crochets { formule } et fonctionne très bien.


Excel regarde dans chacune des plages, qui doivent être de même taille, le nombre de cellules de même rang qui satisfont au critère (=1) et pour avoir le nombre on multiple par 1 (*1).
Bonjour
j'ai également un problème de formule Excel
Voilà, j'ai deux colonnes:

A B

X 1
Y 0
Z 0
Z 4
Y 0
X 2

Je cherche une formule qui pour chaque lettre de la colonne A me compte le nombre de cases différentes de 0.
Ex: pour X: la formule doit inscrire 2, pour Y: 0, pour Z: 1

Pouvez vous m'aider?

Je vous remercie!!!
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour

si j'ai essayé mais ça donne 0 au lieu de 2

Vérifie la formule que tu as saisie et elle doit être incorrectement encodée.
Toutes les parenthèses sont obligatoires à la bonne position, mais je viens de vérifier et c'est correct.

L'addition se fait sur les cellules de même rang, c'est-à-dire qu'il faut à la fois b10=1 et t10=1, sinon c'est zéro.
sinon, si tu veux les 1 sur les deux plages quel que soit la position, c'est ceci :
=SOMME(($B$9:$B$86=1)*1)+SOMME(($T$9:$T$86=1)*1)


à toi de voir ce que tu recherches... et tiens nous au courant.


toujours zen
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour

je voudrai faire la formule NB si avec deux critères.

tu peux toujours faire : nb.si(plage;"x")+nb.si(plage;"y")

si c'est bien pour compter les occurences.

Messages postés
10
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
31 décembre 2011
2
tu peux toujours faire : nb.si(plage;"x")+nb.si(plage;"y")
ça serait pas plutôt ?
si(nb.si(plage;"x")*nb.si(plage;"y")>0;1;0)
Messages postés
1
Date d'inscription
vendredi 20 juillet 2007
Statut
Membre
Dernière intervention
25 juillet 2007

C'est parfait !
Merci gbinforme :)
si j'ai essayé mais ça donne 0 au lieu de 2
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour

merci ça marche mais tout à fait juste

Bon là il y a réellement un problème car dans un tableur comme en arthmétique ou en mathèmatiques, les résultats sont justes ou faux mais jamais "pas tout à fait justes"

En colonne B tu as trois fois la valeur 1 lignes 9, 10, 11.
En colonne T tu as 25 fois la valeur 1 lignes 9, 10, 12, 14, 22, 23, 24, 25, 27, 31, 32, 34, 35, 38, 39, 42, 53, 55, 56, 57, 59, 60, 61, 65 ,67
Et tu constates qu'il n'y a que les lignes 9 et 10 communes.
Et en mettant n'importe où la formule suivante, sauf dans les plages concernées, j'obtiens bien 2.
=SOMME(($B$9:$B$86=1)*($T$9:$T$86="1")*1)


aussi si jveux mettre la formule sur une ligne autre que la ligne 9 ça donne #valeur# pourtant c la valeur absolu des plages qu'on mets

Si tu saisis comme moi sur ton classeur sur n'importe qu'elle colonne, en dehors de B ou T, la formule suivante :
=SOMME(($B$1:$B$65000=1)*($T$1:$T$65000="1"))*1

Tu obtiens aussi 2, ce qui me parait normal et si tu obtiens #valeur# c'est que tu ne saisis pas correctement la formule, mais je n'ai pas réussi a obtenir cette erreur, même si j'ai pu en provoquer d'autres, alors je suis incapable de te donner l'erreur de manipulation commise. Par contre, si tu mets :
=SOMME((B:B=1)*(T:T="1"))*1)

tu obtiens "#NOMBRE!" ce qui est normal car la plage ne peux être une colonne entière.

Donc comme je te met les formules en format correct, tu fait un copier(ctrl + c) de ma ligne de formule et tu fais coller (ctrl+v) sur ton classeur dans la cellule voulue et tu valides la formule par CTRL+ MAJ + ENTER, car c'est une formule matricielle. Et la valeur sera totalement juste !



toujours zen
il semble qu'on ne puisse pas effectuer de calcul avec un critère du type "*toto*"

par exemple:

=SOMME(($B$1:$B$65000=1)*($T$1:$T$65000="*toto*"))*1

En fait la formule est correcte, mais ca retourne toujours 0.

Dans mon cas, je ne devrais pas obtenir 0.

comment dois je proceder pour que ca prenne les * en compte??
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184 > rapham3
bonjour

Ce genre de fonction ne prend pas en compte ce type codification et donc il te faut procéder autrement, éventuellement avec une colonne où tu filtres ce que tu veux par exemple en U1 :

=SI(TROUVE("toto";T1;1);1;0)

puis

=SOMME(($B$1:$B$65000=1)*($U$1:$U$65000=1))*1
Bonjour à tous,
Une suggestion différente et que je trouve plus pratique à l'usage (et plus rapide) : sommeprod.
=sommeprod(--(condition1);--(condition2);...)
exemple : =sommeprod(--(Toulon!$B$1:$B$65535=1);--('La Garde'!$T$1:$T$65535=1))
(pas besoin de formule matricielle => un simple "entrée" sans ctrl-maj suffit)

Par ailleurs, si vous avez de grosses plages, je vous conseille de les nommer (menu Insertion-Nom), en plus ça clarifie l'expression. Vous pouvez même calculer l'expression qui définit vos plages nommées, mais c'est une autre histoire... (Essayez =decaler($A$1;0;nbval($A:$A)) pour couvrir toutes la partie utilisée d'une colonne.)
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour

j'utilise : M1,M2...M6. chaque association du M et d'une lettre vaut 7 heures...
NB.SI(plage;"M1")*7+NB.SI(plage;"M2")*7+NB.SI(plage;"M3")*7...J'ai une dizaine de lettre différente encore.


Comment faire simple quand on a épuisé la complexité, il me semble que c'est l'objet de la question.
C'est pourtant plus simple de faire ainsi :
=NB.SI(plage;"M*")*7


Toutes les valeurs qui commencent par "M" seront prises en compte avec le caractère "*" et si tu ne veux que limiter sur un caractère quelconque il faut utiliser "?".
Merci, c logique cke tu m'a expliké là mé ça marche pas non plus si tu veux jt'envoi le doc poour voir toi même
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 184
bonjour simo_lem,

Dans la colonne T tu as des formules dans le style :
=SI(S9>21;"1";SI(S9>10;"2";SI(S9>6;"3";SI(S9>3;"4";SI(S9>1;"5";" ")))))

Donc tu obtiens une valeur "texte" égale à "1" et en colonne B tu tapes le "chiffre" 1, donc pour que ta formule fonctionne, il faut l'écrire ainsi :
=SOMME(($B$9:$B$86=1)*($T$9:$T$86="1")*1)

En gardant les bonnes définitions de format, tu verras que la formule fonctionne correctement !
En ayant les formules de la colonne T ainsi écrites, la formule que je t'avais donnée aurait parfaitement fonctionné :
=SI(S9>21;1;SI(S9>10;2;SI(S9>6;3;SI(S9>3;4;SI(S9>1;5;" ")))))

Il ne faut jamais mélanger les valeurs numériques avec les valeurs alphanumériques car elles ne sont surtout pas équivalentes.
Bonjour,
merci ça marche mais tout à fait juste au moins c'est la première fois que ça me donne un chiffre, le problème c'est que ça me donne un 1 alors que normalement ça devrait donner 2, si tu regarde bien il y a 2 fois où l'on trouve 1 sur les 2 plages donc ça doit me donné 2, aussi si je veux mettre la formule sur une ligne autre que la ligne 9 ça donne #valeur# pourtant c la valeur absolu des plages qu'on mets
merci tout de même pour ton coup de main.
Bonjour,

merci à tous , je vais essayer et je vous tiens au courant
Bonjour,
c bon ça marche bien Merci Gbinforme.
en fait cke jé fé com coneri c ke j'ai changer le caractère 1 du t9 en nombre mais jlé pas appliké sur toute la colone.
grand merci tu m'as rendu un grand service.
bonjour a tous

Je vois que vous ete bien calle sur Excell. Vous pourriez peut etre m aider.

Je desire moi aussi utiliser la formule nb.si mais avec un critere non precis. C'est a dire que je veux calculer le nombre de cellule ou il y aurait par exemple le mot "Bonjour" dans une phrase entiere ?

Des idees

Merci d'avance
Bonjour,

Rien de plus simple : il suffit de remplacer le texte que l'on ne connaît pas par "*" ; exemple : =NB.SI(A1:A100;"*Bonjour*").

Notez que NB.SI ne différencie pas les majuscules des minuscules.

Pour faire la même chose avec seulement un caractère inconnu, il faut utiliser le "?" : NB.SI(A1:A100;"?ès") reconnaît dès et "lès" (et "1ès", "$ès", etc.), mais pas "très".

Du coup, si vous souhaitez trouver "*" ou "?" dans un texte (y compris dans la fonction recherche - ctrl-F d'excel, d'ailleurs), il faut le faire précéder de "~" : NB.SI(A1:A100;"Hôtel ~*~*~*") trouvera "Hôtel ***" et pas "Hôtel abc".
Bonjour
J'ai 2 colonnes : la première contenant un critère intitulé profil (A, B, C, D), la deuxième contient un autre critère intitulé fonction (1, 2, 3, 4)
J'aimerais avoir la formule qui me permet de sélectionner et de compter tous les A2 et B2... Est-ce que quelqu'un pourrait m'aider ?

A 2
B 4
C 2
A 1
B 2
C 3
D 4
A 2
A 1
Sur Excel 2007. il y a une nouvelle fonction tres pratique :

NB.SI.ENS(plage_critères1; critère1; [plage_critères2; critères2]…)

tu peux combiner plusieurs criteres : tu specifie ta plage; ton premier critere; deuxieme plage; critere2, et ainsi de suite ...

Salam alaikom