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
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
A voir également:
- Problème avec la formule sommeprod excel
- Formule excel pour additionner plusieurs cellules - Guide
- Formule excel si et - Guide
- Formule excel moyenne - Guide
- Formule excel - Guide
- Excel mise en forme conditionnelle formule - Guide
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
31 mai 2011 à 11:23
Bonjour
pas besoin de VBA!
utilise cette formule transformée
Michel
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
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
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.
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
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.
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.
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.
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.
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
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 ^^)
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 ^^)
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
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
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
31 mai 2011 à 11:28
Je m'en vais tester ça de suite :)
Je vous tien au courant.
Cordialement, Queek.
31 mai 2011 à 11:31
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+
31 mai 2011 à 11:37
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.
31 mai 2011 à 11:43
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
Modifié par pilas31 le 31/05/2011 à 11:51
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+