Problème avec la formule sommeprod excel

Résolu
Queek -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je viens ici car j'ai vraiment besoin d'aide. Je vous remercie par avance de m'accorder de votre temps.
Je m'explique, mon fichier permet de savoir facilement si un délai de livraison est respecté. Quand le délai est respecté un "O" apparait, sinon un "T".
Gràce a la formule sommeprod, je peux calculer pour chaque mois, le nombre de délai de livraison respecté ("O").
Jusqu'ici aucun problème, mais dans ce fichier, chaque ligne correspond à une livraison, et chaque ligne est rempli automatiquement chaque jour, j'ai donc glisser la formule pour qu'elle s'applique à chaque nouvelle entrée. Malheuresement, les cellules étant vides, car aucune information n'y est encore saisie un erreur #valeur apparait, et impossible de connaître le nombre de "O".

Voici le liens d'un fichier excel pour illustrer mon propos:
http://www.cijoint.fr/cjlink.php?file=cj201105/ciji7Q6y7l.xls

J'espère m'être montré clair.
Merci de votre aide.

Cordialement, Queek

Ps: je suis sur excel 2003
A voir également:

4 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

pas besoin de VBA!
utilise cette formule transformée
=SOMMEPROD(($H$37:$H$48<>"")*(MOIS($H$37:$H$48)=$C53)*($K$37:$K$48="O"))

Michel
2
Queek
 
Merci beaucoup Michel_m
Je m'en vais tester ça de suite :)

Je vous tien au courant.
Cordialement, Queek.
0
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Bonjour Queek et michel_m

J'étais sur la même idée mais elle ne fonctionne pas car il évalue de toute façon MOIS() et ça provoque une erreur si il y a des cellules vides.

La seule solution que j'ai trouvée est cette formule :

{=SOMMEPROD((SI(($H$37:$H$48)<>"";MOIS($H$37:$H$48)=$C51;FAUX)*(($K$37:$K$48="O"))))}

En validant avec <Ctrl><Shift><Entrée> pour avoir une formule matricielle...

Pas très satisfaisant...

A+
0
Queek
 
En effet, je n'arrive pas à faire fonctionner la formule proposée par Michel_m, celle-ci m'affiche toujours une erreur de #valeur.

En revanche, j'ai essayer ta formule Pilas31, elle correspond exactement à mes attentes, et résout mon problème.

Pourquoi dis-tu que ce n'est pas très satisfaisant? ^^

Merci de votre aide.
Cordialement.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
re,
bonjour Pilas, ca va ?

on peut feinter en écrivant
=SI(ESTVIDE(C37);0;DATE(C37*100+D37;F37;E37))

et en cochant l'option masquer leszéros dans H37:H48 ou en utilisant une mise en forme conditionnelle blanc/blanc si valeur=0
0
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Tu as peut-être raison l'essentiel c'est que ça marche.
Mais je trouve la formule complexe. SOMMEPROD est déjà une formule nativement matricielle mais il faut quand même valider en matriciel ma formule pour que le test fonctionne.

En réalité l'erreur vient de la fonction MOIS(). Si on peut s'en passer alors la formule redevient simple. Par exemple en testant directement sur le numéro de mois de la colonne F :

=SOMMEPROD(($F$37:$F$48=$C51)*($K$37:$K$48="O"))

Salut michel oui ça va mais je n'ai plus trop l'accasion de venir dans ton beau pays!

A+
0
sirefalas Messages postés 219 Date d'inscription   Statut Membre Dernière intervention   8
 
Est ce que tu t'y connais en VBA? Si oui, on va pouvoir développer un petit code qui te permettra de limiter le champ d'action de ta formule.
0
Queek
 
Malheuresement non, je n'es aucune notion en VBA. .
Merci.
En utilisant une autre formule comme somme.si ou nb.si et de mettre en critère de calculer qu'entre telle date et telle date, il n'y a pas moyen de bidouiller quelque chose qui pourrait fonctionner?

Cordialement
0
sirefalas Messages postés 219 Date d'inscription   Statut Membre Dernière intervention   8
 
à la rigueur, tu pourrais rajouter un SI dans ton calcul de base qui fait que si une des cases où tu comptes tes O est égale à #VALEUR tu ne la prend pas en compte.
Mais je suis pas sur que ça soit possible sans le VBA

Essaye de commencer à regarder le VBA, ce n'est pas simple au début mais une fois la logique de base comprise, tu pourras faire énormément de choses relativement facilement. De plus l'aide est relativement bien faite.
0
Queek
 
Ce n'est pas la première fois qu'on me conseil d'étudier se language, visiblement le VBA ouvre bien des portes!
Je vais essayer de regarder en bidouillant, sinon je vais commencer par regarder comment fonctionne le VBA.

Dans le cas ou je trouverais une solution, je la posterais ici.
Merci de votre aide.

Cordialement.
0
sirefalas Messages postés 219 Date d'inscription   Statut Membre Dernière intervention   8
 
pour te donner une idée rapide de ce que je pensais faire en VBA c'est:
compter le nombre d'éléments dans la colonne H du fichier exemple que tu as donné et me servir de ce nombre d'éléments pour conditionner le compte du nombre de O

Au passage, dans la formule que tu as faite, pourquoi avoir séparé 20 et 11? ça aurait pas été plus simple de mettre l'année dans une seule case? (juste une demande hein ^^)
0
Queek
 
Merci de l'idée.
Pour le 20 et 11, c'est que je recoit le fichier comme ça, je ne l'es pas choisi lol. C'est pour cela que dans la colonne adjacante, j'utilise la formule date pour remettre ça dans une même celulle :) ^^

Cordialement.
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
bonjour à tous

une autre solution en nommant les plages (insertion/nom/definir) (un peu complique pour plagecode ...


plagecode = DECALER(Feuil1!$K$37;0;0;NB.SI(Feuil1!$K$37:$K$48;"O")+NB.SI(Feuil1!$K$37:$K$48;"T");1)
plagedate = DECALER(Feuil1!$H$37;0;0;NB(Feuil1!$H$37:$H$48);1)

la formule devient

=SOMMEPROD((MOIS(plagedate)=$C51)*(plagecode="O"))

bonne suite
0
Queek
 
Merci ccm81,
Je vais aller essayer ça de suite :)

Je vous tiens au courant.
Cordialement
0
Queek
 
J'ai beaucoup de mal à mettre en place ta formule, et j'avou avoir laisser tomber.
En tout cas je te remercie de m'avoir accorder du temps.

Cordialement, Queek
0
Queek
 
Merci à tous pour vos réponse et pour votre aide.

Cordialement. Queek
0