XL 2016 Fonction SOMMEPROD avec condition inconnue...

Axos

XLDnaute Nouveau
Bonjour les amis,

Je cherche à programmer une fonction SOMMEPROD avec une condition inconnue qui, à l'ouverture du fichier par l'utilisateur, ne serait pas encore saisie (ce qui signifie que l'on ne connaît pas le nombre de caractère sur lequel la fonction va travailler.

Pour l'heure, j'en suis là :

Ex : =SOMMEPROD((sdr!$J$2:$J$450)*(GAUCHE(sdr!$C$2:$C$450;3)="SRH")*(GAUCHE(sdr!$E$2:$E$450;9)=D9)*(GAUCHE(sdr!$F$2:$F$450;4)="7062"))

Ce qui me pose problème, c'est la partie en gras (le chiffre 9 qui définit le nombre de caractères de filtrage). Comme je l'ai signifié plus haut, ce nombre de caractères détermine la rigueur du filtrage des données (donc du calcul qui sera réalisé et par delà même du résultat donné.

J'en arrive donc à solliciter votre aide en pareil cas.

Comment faire pour que la fonction marche sans que le nombre de caractères ne soit connu? En gros, comment faire pour que la cellule D9 soit filtrée en l'état dans la feuille sdr?

Merci de vos réponses.

Axos.
 

Pièces jointes

  • Crédit nourriture (1).xlsm
    57.7 KB · Affichages: 8

Axos

XLDnaute Nouveau
pas sur de comprendre ta formule.. ni l'origine du 9..
mais, si 9 c'est le nombre de caractère de l'activité..
suffit de le calculer dans la formule
En réalité Vgendron,le nombre de caractère n'a pas d'importance pour moi puisque je ne le connais pas avant saisie de l'activité par l'utilisateur...

C'est ça que je veux retirer dans la formule.
En réalité, je ne connais pas l'activité au moment où je programme la formule mais c'est sur cette activité que devra être réalisé le filtrage et donc que le résultat sera au final défini.
 
Dernière édition:

vgendron

XLDnaute Barbatruc
si le nombre de caractère n'est pas important.. pourquoi le faire apparaitre dans une formule??

ne pas connaitre une info à l'ouverture d'un fichier. ne veut pas dire qu'elle n'est pas importante pour la suite...

Dans la formule (on parle bien de celle en colonne E de la feuille "Crédit nourriture"??) il y a un 7062.. ca correspond à quoi? pourquoi ce compte et pas un autre??

à quel moment l'activité est elle saisie par l'utilisateur.. et où ca ??
en fait je ne comprend pas ton fichier.. faudrait expliquer
 

Axos

XLDnaute Nouveau
J'ai trouvé!

Et voici la formule complète :

=SOMMEPROD((sdr!$J$2:$J$428)*(GAUCHE(sdr!$C$2:$C$428;3)="SRH")*(GAUCHE(sdr!$E$2:$E$428;NBCAR(D9))=D9)*(GAUCHE(sdr!$F$2:$F$428;4)="7062"))

Il faut convertir la cellule où se trouve la valeur cherchée (l'activité) au format texte puis insérer en lieu et place du nombre de caractères recherches la fonction NBCAR qui renvoie directement à ce qui est saisi dans la cellule recherchée... :)
 

vgendron

XLDnaute Barbatruc
J'ai trouvé!

Et voici la formule complète :

=SOMMEPROD((sdr!$J$2:$J$428)*(GAUCHE(sdr!$C$2:$C$428;3)="SRH")*(GAUCHE(sdr!$E$2:$E$428;NBCAR(D9))=D9)*(GAUCHE(sdr!$F$2:$F$428;4)="7062"))

Il faut convertir la cellule où se trouve la valeur cherchée (l'activité) au format texte puis insérer en lieu et place du nombre de caractères recherches la fonction NBCAR qui renvoie directement à ce qui est saisi dans la cellule recherchée... :)
??? tu as trouvé quoi?? c'est pas la formule que je t'ai mise en post 4 ??
 

Axos

XLDnaute Nouveau
??? tu as trouvé quoi?? c'est pas la formule que je t'ai mise en post 4 ??
Vgendron,

J'ai fait ce que tu as conseillé mais ça ne semble pas marcher...
De ce que je comprends, c'est le terme correspondant à la valeur cherchée qui fait planter la formule dès lors que cette valeur intègre des chiffres. Comment résoudre cette difficulté?

=SOMMEPROD((sdr!$J$2:$J$428)*(GAUCHE(sdr!$C$2:$C$428;3)="SRH")*(GAUCHE(sdr!$E$2:$E$428;NBCAR(D9))=D9)*(GAUCHE(sdr!$F$2:$F$428;4)="7062"))

Je joints le fichier démontrant les différents cas de figure où la formule fonctionne et ne fonctionne pas.

Merci de vos réponses les ami(e)s!

Axos.
 

Pièces jointes

  • Fichier d'exercice.xlsm
    37.2 KB · Affichages: 6

JHA

XLDnaute Barbatruc
Bonjour à tous,

La fonction gauche() te renvoie un format texte, à essayer:
VB:
=SOMMEPROD((sde!$J$2:$J$450)*(GAUCHE(sde!$F$2:$F$450;NBCAR(A7))=TEXTE(A7;"0000")))
ou
VB:
=SOMMEPROD((sde!$J$2:$J$450)*(GAUCHE(sde!$F$2:$F$450;NBCAR(A7))=TEXTE(A7;REPT(0;NBCAR(A7)))))

JHA
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Ta formule en C5 me semble erronée. Je pencherais pour un truc dans ce genre :
Code:
=SOMMEPROD((sde!$J$2:$J$450)*(GAUCHE(sde!$C$2:$C$450;NBCAR(A5))=A5)*(GAUCHE(sde!$D$2:$D$450;6)<>"OP-N-1")*(GAUCHE(sde!$E$2:$E$450;4)<>"0CAP"))

Pour la formule en C7, je te propose ceci :
Code:
=SOMMEPROD((sde!$J$2:$J$450)*(GAUCHE(sde!$F$2:$F$450;NBCAR(A7))=A7 & ""))

De même pour la formule en C11 :
Code:
=SOMMEPROD((sde!$J$2:$J$450)*(GAUCHE(sde!$F$2:$F$450;NBCAR(feuext!A5))=feuext!A5 & ""))
 

Discussions similaires

Réponses
5
Affichages
222
Réponses
11
Affichages
550

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 009
dernier inscrit
dede972