Somme.si.ens (contient ou (*A*;*B*)

  • Initiateur de la discussion Initiateur de la discussion Marjo2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Marjo2

XLDnaute Occasionnel
Bonjour,
Je cherche à faire une formule qui me dirait faire la somme de mon 1er critère (date); puis qui commence par ("111*") et dans le libellé est écrit soit "AAAA", soit "BBBB" etc
L'idée est que si dans le libellé est écrit AAAA et BBBB qu'il ne me l'additionne pas en double.

=somme.si.ens(Feuil2!K:K;Feuil2!F:F;'EXPORT'!A5;Feuil2!A:A;"111*";Feuil2!D😀;"*AAAA*";Feuil2!D😀;"*BBBB*";Feuil2!D😀;"*CCCC*")

Cela ne fonctionne pas et si je passe en matricielle, il va me compter de fois aussi.

Une idée ?
 
=SOMME.SI.ENS(Feuil2!D😀;Feuil2!A:A;Feuil1!A1;Feuil2!B:B;"111*";Feuil2!C:C;{"*AAAA*";"*BBBB*";"*CCCC*"})
Comme c'est du texte, je rajoute * * mais le montant renvoyé est faux.
Je ne comprends pas et j'ai l'impression d'être dans une impasse….
 

Pièces jointes

Bonjour à tous,

avec un sommeprod() + une fonction personnalisée qui te retourne une matrice de VRAI/FAUX si une des chaine est incluse, ligne à ligne.
VB:
Function ouTxt(libel As Range, crit As Range)
    Dim data1, data2, result() As Boolean
    Dim i As Long, j As Long
    data1 = libel.Value: data2 = crit.Value
    ReDim result(1 To UBound(data1), 1 To 1)
    For i = 1 To UBound(data1)
        For j = 1 To UBound(data1)
            If data1(i, 1) Like "*" & data2(j, 1) & "*" Then result(i, 1) = True: Exit For
        Next j
    Next i
    ouTxt = result
End Function
Code:
=SOMMEPROD((A1:A5=A1)*(B1:B5=B1)*(ouTxt(C1:C5;H1:H3))*(D1:D5))
eric
 

Pièces jointes

Merci pour avoir traiter le sujet mais la solution n'est pas là.
Les produits qui commencent par 111 et qui contiennent ou AAAA, BBBB, CCCC et ne pas compter en doublon mais qu'une seule fois si le libellé du produit contient AAAA BBBB par exemple
 
Bonjour Marjo2, Jocelyn, eriiiic, JB,

@ eriiiic : ça ne va pas si on efface "AAAA" en Feuil2!C1.

Mais avec une colonne auxiliaire pas besoin de VBA.

Formule en Feuil2!E1 =SOMMEPROD(--ESTNUM(CHERCHE(H$1:H$3;C1)))

Formule en Feuil1!C1 :
Code:
=SOMMEPROD((Feuil2!A1:A5=A1)*(Feuil2!B1:B5=B1)*SIGNE(Feuil2!E1:E5);Feuil2!D1:D5)
Fichier .xlsx joint.

A+
 

Pièces jointes

Bonjour,
Salut job,
effectivement, un oubli de transformer UBound(data1) en UBound(data2) suite à un copié-collé :
VB:
Function ouTxt(libel As Range, crit As Range)
    Dim data1, data2, result() As Boolean
    Dim i As Long, j As Long
    data1 = libel.Value: data2 = crit.Value
    ReDim result(1 To UBound(data1), 1 To 1)
    For i = 1 To UBound(data1)
        For j = 1 To UBound(data2)
            If data1(i, 1) Like "*" & data2(j, 1) & "*" Then result(i, 1) = True: Exit For
        Next j
    Next i
    ouTxt = result
End Function


Marjo, tu as vu ce que tu as écrit ?
Code:
=SOMMEPROD(Feuil2!A:A=Feuil1!A1)*(Feuil2!B:B="111*")*(outxt(Feuil2!C:C;Feuil2!H:H))*(Feuil2!D:D)
- il manque la parenthèse globale du Sommeprod()
- tu fais sur des colonnes entières, totalement prohibé pour un sommeprod(). Fait une recherche sur les noms dynamique, ça pourra te servir.
- Feuil2!B:B="111*" donnera toujours faux

Code:
=SOMMEPROD((Feuil2!A1:A5=Feuil1!A1)*(GAUCHE(Feuil2!B1:B5;3)="111")*(outxt(Feuil2!C1:C5;Feuil2!H1:H3))*(Feuil2!D1:D5))
sera plus correct.
eric
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour