Sommeprod Multicritères - Filtrer sur une liste d'élements dans une cellule

pacoako

XLDnaute Occasionnel
Bonjour,

Je me demandais s'il est possible d'adapter un sommeprod pour qui filtre sur une liste d'éléments qui est a l'intérieur d'une même cellule

Je peux filtrer sur une liste qui est dans un tableau Excel comme suit :

VB:
=SOMMEPROD(NB.SI(MESÉLÉMENTS;Tableau1[Champ1])*(Tableau1[ChampValeur]))

mais si mes éléments sont inscrit dans une même cellule séparé par des ";" évidemment ça ne fonctionne pas

VB:
=SOMMEPROD(NB.SI(MESÉLÉMENTS_DANSCELLULE;Tableau1[Champ1])*(Tableau1[ChampValeur]))

Si vous avez un moyen de formuler le tout pour que ça fonctionne ça serait plus qu'apprécié! Merci d'avance pour votre aide,

(voir pj)
 

Pièces jointes

  • SOMMEPROD_LISTINCELL.xlsx
    10.9 KB · Affichages: 53

Modeste

XLDnaute Barbatruc
Bonjour pacoako,

Je ne sais pas si j'ai compris, ni si la solution conviendra ... un essai avec une fonction personnalisée dans le fichier joint.

Les résultats que nous obtenons sont différents à cause du 'Relish' devenu 'Relist' en D17.

Option Compare Text en tête du module permet que la fonction ne soit pas sensible à la casse. Si tu veux que 'moutarde' soit considéré comme différent de 'Moutarde', supprime cette ligne.
 

Pièces jointes

  • SOMMEPROD_LISTINCELL (pacoako).xlsm
    17.3 KB · Affichages: 48

Modeste

XLDnaute Barbatruc
Bonjour,
Salut CISCO :)

Mais tu la sors d'où, cette formule :eek:. En la voyant, il y a quelques instants, j'ai d'abord cru qu'on n'avait pas compris la question de la même manière. Dans un second temps, j'ai même émis l'hypothèse (mais je n'en dirai rien à personne!) que tu t'étais mis à boire :D ...
Je ne peux dire qu'une chose: "Jamais elle ne me serait même venue à l'esprit, cette utilisation de SUBSTITUE!". Tu m'impressionnes, une fois de plus!
NBCAR m'a perturbé pendant un moment ... Pour essayer de comprendre, j'ai testé
Code:
=SOMMEPROD((SUBSTITUE(MESÉLÉMENTS_DANSCELLULE;A2:A7;"")<>MESÉLÉMENTS_DANSCELLULE)*B2:B7)
... qui semble donner les mêmes résultats? (à vérifier: j'ai peut-être encore loupé un truc évident!?)

... Ne reste plus, le cas échéant, qu'à ajouter (si pacoako repasse par ici et s'il en a besoin) un système pour que la comparaison ne tienne pas compte de la casse.

Merci, CISCO, pour ces 15 minutes de stimulation neuronale!! (j'ai ma dose pour un mois au moins :rolleyes:)
 

CISCO

XLDnaute Barbatruc
Bonjour

SOMMEPROD((SUBSTITUE(MESÉLÉMENTS_DANSCELLULE;A2:A7;"")<>MESÉLÉMENTS_DANSCELLULE)*B2:B7)
Effectivement, cela donne le même résultat, et c'est plus court... J'avais déjà utilisé cette association NBCAR(SUBSTITUE... (peut être pas en "matriciel"). Je n'ai pas pensé à tester ici sans le NBCAR et en modifiant le test.

Merci aussi pour cette modif. :)

@ plus
 

pacoako

XLDnaute Occasionnel
Rebonjour les gars,

En fait après quelques tests de cas de figure j'ai réalisé que la formule compte en double lorsqu'on filtre sur une chaine de caractère (eg "AA") et que dans les données il y a des "A" et des "AA"

La formule semble faire la somme des "A" et des "AA"

Si vous avez une solution paliative je suis évidement preneur,

Merci encore pour votre aide,

Voir pj
 

Pièces jointes

  • SOMMEPROD_LISTINCELL.xlsx
    11 KB · Affichages: 44

CISCO

XLDnaute Barbatruc
Bonsoir

Tu dois pouvoir faire avec
Code:
SOMMEPROD((SUBSTITUE("µ"&SUBSTITUE(MESÉLÉMENTS_DANSCELLULE;";";"µ;µ")&"µ";"µ"&Tableau1[Champ1]&"µ";"")<>"µ"&SUBSTITUE(MESÉLÉMENTS_DANSCELLULE;";";"µ;µ")&"µ")*(Tableau1[ChampValeur]))

@ plus
 

CISCO

XLDnaute Barbatruc
Bonsoir

Histoire de comprendre la méthode :
On remplace ";" par "µ;µ" et on rajoute "µ" devant et derrière le texte MESÉLÉMENTS_DANSCELLULE. On rajoute µ" devant et derrière chaque texte "A", "AA","AAA"...
Ainsi, la fonction SUBSTITUE ne cherche pas à remplacer "A" dans "AA" (ce qu'elle pourrait faire, à tord ici, car ce n'est pas ce qu'on veut), mais "µAµ" dans "µAAµ" et n'y arrive pas. Par contre, avec "µAAµ", cela fonctionne.

De même, si MESÉLÉMENTS_DANSCELLULE contient "AA;BB", la formule travaillera avec "µAAµ;µBBµ".

@plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

Avec presque la même méthode (en mettant des ";" à la place des "µ" devant et derrière, et n'en mettant pas en plus dedans), mais en plus court (;) Modeste)
Code:
SOMMEPROD((SUBSTITUE(";"&MESÉLÉMENTS_DANSCELLULE&";";";"&Tableau1[Champ1]&";";"")<>";"&MESÉLÉMENTS_DANSCELLULE&";")*(Tableau1[ChampValeur]))

@ plus

P.S : Bien sûr, cela ne fonctionne que si les textes dans MESÉLÉMENTS_DANSCELLULE sont séparés par des ";" et pas par un autre caractère ou un espace.
 
Dernière édition:

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou