Formule filtre avec plusieurs critères

Bonjour,

Je souhaite filtrer un tableau pour obtenir une liste que je vais ensuite utiliser pour créer une liste déroulante.

Voir ci-dessous un exemple de mon tableau.

Je souhaite pouvoir obtenir par exemple la liste des noms pour lesquels on a une valeur F_1 et F_3 en colonne "habil form" et une valeur "T_1" en colonne "habil test" : en l'occurrence, ici, 1 seul nom doit être renvoyé : CF

J'ai essayé avec la formule FILTRE (cf ci-dessous) mais cela ne fonctionne pas. Est-ce que quelqu'un connait la syntaxe qui fonctionnerait ?

image

merci par avance pour votre aide :)

Bonjour,

Peut-être :

=FILTRE(A2:A8;((B2:B8=F1)+(B2:B8=F2))*(C2:C8=G1))

Cordialement

Merci pour cette proposition, mais je m'aperçois que mon exemple pouvait prêter à incompréhension.

Si mon tableau devient comme suit je veux encore que cela renvoie le nom CF puisque c'est la seule personne qui a à la fois "F_1", "F_3" et "T_1"

Je ne veux pas le nom AB puisque cette personne n'a pas "F_1"

image

Bonsoir à tous !

Une proposition ?

Bonjour à tous,

Une autre proposition au cas où, (vu que je l'avais préparée), sur ton tableau exemple initial :

=LET(n;A2:A8;hf;B2:B8;ht;C2:C8;SIERREUR(UNIQUE(FILTRE(n;BYROW(n;LAMBDA(p;PRODUIT(NB.SI.ENS(n;p;hf;F1:F2))*NB.SI.ENS(n;p;ht;G1)))>0));""))

Cordialement

Merci JFL cela a l'air de fonctionner.

Du coup j'aimerais bien comprendre la formule, il y a plein de fonctions que je ne connais pas dedans (LET, MAP, LAMBDA) et j'ai du mal à comprendre l'ensemble

Merci en tout cas !

als35 merci aussi ça fonctionne également

et j'aimerais bien également comprendre la formule

merci

Bonsoir à tous !

Décomposition de la formule dans le classeur joint :

Merci beaucoup d'avoir pris le temps de dérouler la formule de façon très pédagogique

C'est top !

Bonjour à tous !

Je vous remercie de ce retour.

Légère correction de la formule proposée :

=LET(
Noms;A2:A8;
Crit_hf;B2:B8;
Crit_ht;C2:C8;
Noms_uniq;UNIQUE(Noms);
FILTRE(Noms_uniq;MAP(Noms_uniq;LAMBDA(r;(SOMME(FILTRE(NB.SI.ENS(tCF[Crit_form];Crit_hf);Noms=r))>=NBVAL(tCF[Crit_form]))*SOMME(FILTRE(NB.SI.ENS(tCT[Crit_test];Crit_ht);Noms=r))));"--")
)

Cette correction traite le cas particulier où, pour un nom donné, le nombre insuffisant de critères "form" serait compensé par le nombre de critères "test".

Bonjour à tous,

Pour ma part, avec un peu de retard, week-end prolongé oblige, quelques explications à partir de ton exemple initial et sur la formule :

=LET(n;A2:A8;hf;B2:B8;ht;C2:C8;UNIQUE(FILTRE(n;BYROW(n;LAMBDA(p;PRODUIT(NB.SI.ENS(n;p;hf;F1:F2))*NB.SI.ENS(n;p;ht;G1)))>0;"")))

Je calcule pour chaque nom combien de fois on trouve le nom associé à chaque critère pour les trois critères voulus (situés en F1, F2 et G1) (ex : NB.SI.ENS(A2:A8;A1;B2:B8;F1)), puis j'en fais le produit, ce qui fait un ET entre les critères : PRODUIT(NB.SI.ENS(A2:A8;A1;B2:B8;F1:F2)*NB.SI.ENS((A2:A8;A1;C2:C8;G$)

Je filtre les noms ayant un produit >supérieur à 0, et j'en prends la valeur unique : UNIQUE(FILTRE(A2:A8;...>0))

La fonction BYROW intégrant la fonction LAMBDA paramétrée, permet de parcourir le tableau des noms en appliquant à chaque ligne la fonction LAMBDA calculant le produit souhaité.

La fonction LET permet de nommer des plages de cellules, ou des formules, afin d'améliorer la lisibilité et d'optimiser le temps de calcul.

Dans le fichier fourni par JFL, cette formule pourrait s'écrire :

=LET(n;A2:A8;hf;B2:B8;ht;C2:C8;UNIQUE(FILTRE(n;BYROW(n;LAMBDA(p;PRODUIT(NB.SI.ENS(n;p;hf;tCF[Crit_form]))*PRODUIT(NB.SI.ENS(n;p;ht;tCT[Crit_test]))))>0;"")))

et pas certain d'avoir la même compréhension que JFL sur la prise en compte du critère habil test. À toi de voir.

Cordialement

Rechercher des sujets similaires à "formule filtre criteres"