Somme d'une colonne selon période
RésoluLe Pingou Messages postés 12276 Date d'inscription Statut Contributeur Dernière intervention -

J'ai un tableau avec une colonne de prix mensuel (ces prix changent régulièrement), une colonne où sont indiqués les dates de changement de prix et une autre colonne qui donne les montants journaliers selon les différentes dates et les prix mensuel.
Je voudrais avoir le montant total d'une période donnée (cellule J5).
Je mets le tableau en PJ
Merci
55 réponses
- 1
- 2
- 3
Le problème est de calculer le total sur une période donnée à partir d’un tableau où le prix mensuel change à des dates et où le résultat doit être affiché en J5. La solution principale propose une approche en trois segments et une formule matricielle utilisant SOMME.SI.ENS pour sommer les jours correspondant à chaque sous-période, la formule devant être validée en tant que matrice (Ctrl+Shift+Enter). Des corrections ont porté sur le contrôle des dates et l’adaptation des références, avec des ajustements sur les bornes (≤ ou <) afin que les bornes J2 et J3 couvrent exactement la période souhaitée, et des échanges discutent aussi d’une éventuelle macro si la robustesse est insuffisante. Différentes propositions et tests ont été réalisés pour fiabiliser le calcul et aligner les résultats, en soulignant l’importance de valider correctement les dates et les correspondances entre les colonnes de dates et les prix.
-
Merci Le pingou pour cette remarque ! J'ai pu corriger cette n-ième erreur :)
Le doc :
https://www.cjoint.com/?DGraq11lKZj
(j'arrête de coller la formule qui prend vraiment trop de place...)
J'avoue que ma formule est complexe s'il faut modifier les données sources mais encore une fois un peu de rechercher/remplacer permet de vite contourner le pb. -
Bonjour,
Oui, désolé, en ajoutant les contrôles des dates j'ai omis un signe [.] dans une instruction.
J'en ai profité pour modifier la formule de Theo.R pour se référer aux choix de la feuille 2.
Petit exercice de style qui m'a permis de mieux comprendre sa démarche, merci Theo.R.
Le fichier : https://www.cjoint.com/?3GrqSKlTF44
-
Bonjour,
Pouvez-vous mettre votre exemple à disposition ? Si oui mettre sur https://www.cjoint.com/ et poster le lien !
-
Bonjour
Saur erreur de compréhension, (ce qui est fort probable:
excel à partir de 2007:
=SOMME.SI(Champ à sommer; Champ date;">="&cell début;champdate;"<="&cell fin)
avant 2007
=SOMMEPROD((Champ date>=cell début)*(champ date <=cell fin)*(champ à sommer))
crdlmnt
Errare humanum est, perseverare diabolicum -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Tu parles d'une colonne avec les prix journaliers qui n'existe pas, tu as à la place une colonne avec Total HT qui est égal au montant mensuel * nbre de jours sur la période.
Pour la formule, il faut procéder en trois temps :
les jours de la borne inférieure après J2 (période qui commence AVANT J2 et finit APRES)
+les périodes comprises entre J2 et J3 strictement
+ les jours de la borne supérieure avant J3 (commence AVANT J3 et finit APRES).
Avec SOMME.SI.ENS, on obtient alors (j'ai sauté des lignes pour faire apparaître la correspondance avec ci-dessus) ATTENTION A BIEN VALIDER EN FORMULE MATRICIELLE (Ctrl+Shift+Enter une fois la formule collée dans la cellule) :
=(MIN(SI((C6:C100<J2)*(D6:D100>J2);D6:D100))-J2)*INDEX(B6:B100;EQUIV(MIN(SI((C6:C100<J2)*(D6:D100>J2);D6:D100));D6:D100))
+ SOMME.SI.ENS(F6:F100;C6:C100;">"&J2;C6:C100;"<"&J3;D6:D100;">"&J2;D6:D100;"<"&J3)
+(J3-MAX(SI((C6:C100<J3)*(D6:D100>J3);C6:C100)))*INDEX(B6:B100;EQUIV(MAX(SI((C6:C100<J3)*(D6:D100>J3);C6:C100));C6:C100))
Sans les sauts de ligne (pour copier/coller), à faire en formule matricielle (je répète mais ça change tout) :
=(MIN(SI((C6:C100<J2)*(D6:D100>J2);D6:D100))-J2)*INDEX(B6:B100;EQUIV(MIN(SI((C6:C100<J2)*(D6:D100>J2);D6:D100));D6:D100))+ SOMME.SI.ENS(F6:F100;C6:C100;">"&J2;C6:C100;"<"&J3;D6:D100;">"&J2;D6:D100;"<"&J3)+(J3-MAX(SI((C6:C100<J3)*(D6:D100>J3);C6:C100)))*INDEX(B6:B100;EQUIV(MAX(SI((C6:C100<J3)*(D6:D100>J3);C6:C100));C6:C100))
Chez moi ça marche donc si tu gardes les mêmes références que dans ton exemple aucun souci !
A plus :) -
Bonjour à tous
Théo, quelle belle formule ! J'ai fait un copier coller et appliquer en formule matricielle, j'ai #N/A comme résultat.
J'ai enlevé l'espace en le + SOMME.SI.ENS, mais toujours le même résultat.
Pourtant je n'ai pas modifié le tableau.
Je n'arrive pas à trouver l'erreur.
Précision, il n'y aura jamais de date avant le 01/05/1999
Merci de votre aide -
Bonjour,
Avez-vous essayé les 2 formules de Vaucluse
La 1 modifié en SOMME.SI.ENS :
=SOMME.SI.ENS(F6:F10;C6:C10;">="&J2;D6:D10;"<="&J3)
La 2 :
=SOMMEPROD(((C6:C10)>=J2)*(D6:D10<=J3)*(F6:F10))
Est-ce que cela répond à votre demande ?
-
Bonjour,
J'ai bien essayé avec les 2 formules, le résultat est le même et c'est pas bon.
Car par exemple du 01/05/199 au 15/11/2000, j'ai le même montant 39,54€ que du 01/05/199 au 31/10/2000 ou 01/05/1999 au 01/11/2000. La formule ne calcule pas le montant entre le 31/10/2000 et le 15/11/2000, soit (2,55*12/365)*16.
Merci encore. -
Bonjour,
Bien sûr que ce n'est pas correct, nous ne savions même pas comment devait se calculer le résultat....!
En voyant votre l'image nos pouvions penser que le résultat de l'exemple soit 39.54 Euros était correct.
Note et pourquoi ne pas mettre le résultat attendu...?
Si vous aviez mis votre fichier comme demander au poste vous auriez eu la bonne solution.
Salutations.
Le Pingou -
Bonjour,
Voici le lien, j'ai testé la formule de Théo avant de joindre le tableau.
https://www.cjoint.com/?0Gmpf2NNJZg
Merci -
Bonjour,
Merci pour le fichier.
Toutefois, pourquoi ne pas dire si la formule de Théo est conforme..... ? Ou bien c'est moi qui doit la tester... !
-
J'ai répondu hier à Theo que ça ne fonctionne pas
Lien 6 d'hier.
Merci-
Bonjour,
Pourtant il a préciser que : Chez moi ça marche donc si tu gardes les mêmes références que dans ton exemple aucun souci !
Dans ce cas, pour la période exemple la valeur selon Théo est de : 831.97 et pour moi, via VBA, de : 40.63 .... !
Me de préciser laquelle est correct... !
Salutations.
Le Pingou
-
-
Bonjour,
Pour votre exemple du 1.5.1999 au 15.11.2000 le montant est de : 40.63 ....Oui / Non ... !
-
Je trouve 40,80 : du 01/05/99 au 30/04/2000 (2,15/mois) = 25,87 (366 jours) + du 01/05/2000 au 31/10/2000 (2,26/mois) = 13,67 (184 jours) + du 01/11/2000 au 15/11/2000 (2,55/mois) = 1,26 (15 jours)
Ma formule pour compter le Nb de jour est J3-J2+1
Merci -
Bonjour,
Désolé j'ai pas vu le dernier poste.
J'ai pris la peine de testez la formule de Théo et elle ne répond pas à votre résultat de 40.80¨.
je pense qu'il faut passer par une procédure (macro)......patience...!
-
-
Bonjour,
Voici ma proposition via procédure (voir note sur la feuille) : https://www.cjoint.com/?3GmsCzchVe9
Je vous laisse contrôler les résultats obtenues... !
-
Ma formule marchait sur mon test qui reprenait l'exacte copie de la photo initiale..
Elle calcule la totalité des prix entre la période en J2 et celle en J3. Pour la démarche j'avais déjà expliqué mon raisonnement.
Je me suis peut être trompé en collant ma formule dans mon MSG, mais n'ayant pas accès excel avant mardi je ne peux pas vérifier.
Autre possibilité : j'ai peut être juste mal compris la demande. Mais dans le cas contraire, un recours aux Macros n'est pas nécessaire !
Je vous tiens au courant mardi, mais disons que ma solution n'est pas valide en attendant.
Bonne continuation
-
Le Pingou,
Votre solution fonctionne, les valeurs sont justes, mais fonctionne uniquement jusqu'au 30/04/2003 et le montant de 117,47€. Si je tapes en J3 une date ultérieure, j'ai le même montant !
Cdt, -
Bonjour,
Alors c'est parfait.
Une petite correction à faire dans le code et je vous transmets la version adaptée.
Salutations à Théo et c'est avec grand intérêt que je découvrirai sa version sans VBA.
- 1
- 2
- 3