Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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 ?
 

Jocelyn

XLDnaute Barbatruc
Bonjour le Forum,
Bonjour Marjo2,

Je ne sais pas si je pourrais t'aider, mais une chose est sure sans fichier exemple de quelque ligne avec le résultat attendu je n'ai pas compris ce que tu attends

Cordialement
 

Marjo2

XLDnaute Occasionnel
=SOMME.SI.ENS(Feuil2!D;Feuil2!A:A;Feuil1!A1;Feuil2!C:C;{"AAAA";"BBBB";"CCCC"};Feuil2!B:B;"111*")

Si ça contient OU (AAAA;BBBB;CCCC) et ça ne fonctionne pas
 

Pièces jointes

  • EXEMPLE.xlsx
    9.4 KB · Affichages: 4

Marjo2

XLDnaute Occasionnel
=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

  • EXEMPLE.xlsx
    9.6 KB · Affichages: 4

Jocelyn

XLDnaute Barbatruc
re,

bon pas trop de solution a part passer par VBA mais a jeu la je suis une bille alors avec une formule un peu capillotractée un essai

Cordialement
 

Pièces jointes

  • EXEMPLE.xlsx
    9.7 KB · Affichages: 7

Jocelyn

XLDnaute Barbatruc
Re

oui etc'est bien pour ca qu'il faudrait passer par du VBA moi je ne saispas faire je te conseille de refaire un post en précisant VBA dans le tittre

Désolé je ne peux pas t'aider plus

Cordialement
 

eriiic

XLDnaute Barbatruc
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

  • Exemple.xlsm
    17.8 KB · Affichages: 12

Marjo2

XLDnaute Occasionnel
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
 

job75

XLDnaute Barbatruc
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

  • Exemple(1).xlsx
    16.9 KB · Affichages: 7

eriiic

XLDnaute Barbatruc
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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…