Problème avec la formule sommeprod excel

Résolu/Fermé
Queek - Modifié par Queek le 31/05/2011 à 10:58
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 31 mai 2011 à 12:28
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
31 mai 2011 à 11:23
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
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 vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
31 mai 2011 à 11:31
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
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
31 mai 2011 à 11:43
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 vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
Modifié par pilas31 le 31/05/2011 à 11:51
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 mercredi 11 juin 2008 Statut Membre Dernière intervention 12 février 2014 8
31 mai 2011 à 11:03
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
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 mercredi 11 juin 2008 Statut Membre Dernière intervention 12 février 2014 8
Modifié par sirefalas le 31/05/2011 à 11:14
à 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
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 mercredi 11 juin 2008 Statut Membre Dernière intervention 12 février 2014 8
31 mai 2011 à 11:23
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
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 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
Modifié par ccm81 le 31/05/2011 à 11:50
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
Merci ccm81,
Je vais aller essayer ça de suite :)

Je vous tiens au courant.
Cordialement
0
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
Merci à tous pour vos réponse et pour votre aide.

Cordialement. Queek
0