Somme d'une colonne selon période

Résolu/Fermé
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024 - Modifié par pajude le 11/07/2014 à 16:00
Le Pingou Messages postés 12045 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 - 18 juil. 2014 à 09:49
Bonjour,

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
A voir également:

55 réponses

pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
12 juil. 2014 à 21:48
Merci encore, c'est super de votre part.
Pourriez vous dans la macro mettre quelques explications, car je modifierai sûrement le tableau et je suis loin de maitriser VBA.
Si Theo arrive à un résultat avec des fonctions ce serait également parfait.
Bonne soirée
Pajude
0
Le Pingou Messages postés 12045 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
12 juil. 2014 à 22:16
Bonjour,
Je suis tombé sur une anomalie sur les dates, par exemple la ligne 11 vous avez date de fin 30.04.2003 et sur la ligne 12 date chgt prix 05.05.2003 ce qui représente un trou de 6 jours sans tarif... est-ce bien correct... ?
Il y en a d'autre ........ et cela influence le code qui donne un résultat erroné... !
Merci de votre réponse...

0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
12 juil. 2014 à 22:54
Non ce n'est pas correct, car Il doit y avoir une anomalie car la colonne D affiche le dernier jour précédent de la colonne C. Donc si en ligne 12 il y a 05/05/2003 en ligne 11 colonne D il doit y avoir 04/05/2003. Erreur probable des formules en colonne D.
Cdt,
0
Le Pingou Messages postés 12045 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
12 juil. 2014 à 23:11
Bonjour,
En attendant votre réponse.
J'ai modifié la procédure et aussi les dates de fin selon mon idée en espérant que c'est conforme pour vous.
Le fichier : https://www.cjoint.com/?3GmxklaxDuc

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
12 juil. 2014 à 23:42
Bonsoir,
Excellent, le résultat est correct, je ne pensais pas que date - 1 fonctionnait, surtout quand on fait par ex 01/03/2014 - 1 = 28/02/2014.
Pouvez vous m'expliquer les lignes de la macro (quand vous aurez un moment), je ne maîtrise pas vraiment VBA.
Attendons maintenant la solution de Theo avec des fonctions.
Merci beaucoup
Cdt,
0
Le Pingou Messages postés 12045 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
13 juil. 2014 à 11:27
Merci, les explications macro d'ici à demain.
Bon dimanche.
Salutations.
Le Pingou
0
Le Pingou Messages postés 12045 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
13 juil. 2014 à 18:17
Bonjour,
La procédure est commenté voir sous MSO VB ... touche : [Ctrl + F11).
En plus j'ai mis une petite note concernant votre formule pour les dates [=SI(ESTVIDE($N7);"";DATE(AN.....] sur la feuille [Copie arch].
Le fichier : https://www.cjoint.com/?3GnsqIrcJU8

0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
14 juil. 2014 à 10:49
Bonjour,
Merci pour les infos, en revanche je vois que vous avez remplacé dat par val dans la macro.
Est ce que c'est pour cela que le montant est arrondi à zéro. Ex du 01/05/99 au 30/04/00, le montant est de 26,00 au lieu de 25,87 qui me faudrait.
Merci
pajude
0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
14 juil. 2014 à 10:57
Juste une info complémentaire, si je déplace les données à saisir (I2:J5) sur une autre feuille, qu'est ce qu'il faut modifier dans la macro.
Merci
0
Le Pingou Messages postés 12045 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
14 juil. 2014 à 16:15
Bonjour,
Concerne : avez remplacé dat par val dans la macro
Eh oui, par principe : la variable fait référence à une valeur donc [val] et cela n'a pas d'influence sur la procédure.

Suite : Ex du 01/05/99 au 30/04/00, le montant est de 26,00 au lieu de 25,87 qui me faudrait.
J'ai déclaré les variables utilisées dans la procédure et une petite erreur pour [resu]
Merci de remplacer dans la procédure :
Dim resu As Long
Par :
Dim resu As Double

Et enfin : si je déplace les données à saisir (I2:J5) sur une autre feuille
Oui car elle se réfère à la feuille active par défaut.
Solution vous nommez la feuille qui contient les données ou nommer la plage des données ou encore mieux mettre le nom de la feuille dans une cellule sur l'autre feuille .
Qu'elle est votre choix ... ?

0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
14 juil. 2014 à 16:29
Merci encore de votre disponibilité (c'est énorme ce que vous faîtes !).
j'ai remplacé comme indiqué et ça fonctionne.
Pour le déplacement, je préfère nommer la feuille (d'ailleurs que je protègerai) et avoir le résultat sur une autre feuille.

Les données seront sur la feuille nommée "Tarif" et le calcul sur la feuille nommée "Facture"

J'aimerai aussi(si possible) avoir la solution que vous avez souligné.
Merci
0
Le Pingou Messages postés 12045 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
14 juil. 2014 à 16:34
Bonjour,
Ma proposition (voir Feuil1 et Feuil2) avec le nom de feuille dans une cellule : https://www.cjoint.com/?3GoqGV6W2Hj

0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
14 juil. 2014 à 17:04
Désolé,
ça ne fonctionne pas sur la feuil2, montant 0,00
Merci
0
Le Pingou Messages postés 12045 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
14 juil. 2014 à 17:37
Bonjour,
Chez moi c'est en ordre.
Je vous renvoie une nouvelle fois : https://www.cjoint.com/?3GorKK0vNfE
Note : il est préférable d'utiliser la solution en mentionnant le nom de la feuille des données et ainsi on évite une correction dans la procédure si on change le nom ... !

0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
14 juil. 2014 à 17:51
Super, ça fonctionne.
Je vous remercie beaucoup.
Je vous aurai bien proposé de prendre un verre (sur Toulouse).
Merci encore pour vos services.
@ bientôt
Pajude
0
Le Pingou Messages postés 12045 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
14 juil. 2014 à 20:40
Merci, de rien.
Salutations.
Le Pingou
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
Modifié par Theo.R le 15/07/2014 à 10:36
Bonjour tout le monde,

J'ai donc pu revoir ma première proposition, en effet elle était incomplète et j'ai du reprendre la formule pour prendre en compte tous les cas spécifiques.

Au final, ELLE MARCHE !! En tout cas avec tous les cas spécifiques que j'ai pu repérer. Je vous laisse regarder par vous même :

https://www.cjoint.com/?DGpkImrltdG

Le problème avait donc bien une solution sans recours aux macros ;)

A plus tard,

P.S: Pour ceux qui n'auraient pas le temps de regarder le document, la formule à entrer en FORMULE MATRICIELLE est la suivante :

=SI(J2<C6;"Date en J2 hors données";SI(J3>MAX(C6:D100);"Date en J3 hors données";SI(MAX(SI((C6:C100<=J3)*(D6:D100>=J3);C6:C100))=MIN(SI((C6:C100<=J2)*(D6:D100>=J2);C6:C100));J4*(12/365)*INDEX(B6:B100;EQUIV(MIN(SI((C6:C100<=J2)*(D6:D100>=J2);C6:C100));C6:C100));SI(J3=MAX(C6:C100);(1+MIN(SI((C6:C100<=J2)*(D6:D100>=J2);D6:D100))-J2)*(12/365)*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)+(12/365)*INDEX(B6:B100;EQUIV(MAX(SI((C6:C100<=J3)*(D6:D100>=J3);C6:C100));C6:C100));(1+MIN(SI((C6:C100<=J2)*(D6:D100>=J2);D6:D100))-J2)*(12/365)*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)+(1+J3-MAX(SI((C6:C100<=J3)*(D6:D100>=J3);C6:C100)))*(12/365)*INDEX(B6:B100;EQUIV(MAX(SI((C6:C100<=J3)*(D6:D100>=J3);C6:C100));C6:C100))))))
0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
15 juil. 2014 à 11:42
Bonjour,
Excellente la formule, le résultat est OK.
Seul Hic sur la première période, du 01/05/1999 au 30/04/2000, le montant est 51,74 au lieu de 25,87.
Cdt
0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
15 juil. 2014 à 12:17
C'est également la même erreur du 01/05/14 au 31/05/14 = 9,99 au lieu de 4,99.
du 01/11/00 au 30/04/01 = 30,35 au lieu de 15,17
L'erreur se répète à chaque période de dates sur la même ligne
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
15 juil. 2014 à 12:26
Je vais regarder cela cet après-midi, l'erreur à lieu quand on sélectionne une période égale à une ligne exactement ?

--
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
15 juil. 2014 à 14:04
Il y avait une erreur sur la fonction MIN(SI(...)) que je ne saurais expliquer, mais j'ai pu simplifier la fonction pour qu'elle marche.

Voici le nouveau doc avec la fonction corrigée :

https://www.cjoint.com/?DGpobaedTrm

P.S: ATTENTION au résultat par macro, il ne donne pas du tout le bon chiffre... dans l'exemple que j'ai laissé il donne 218,87 au lieu de 4,99...

En espérant que la formule soit maintenant parfaite ;)

Formule brut :

=SI(J2<C6;"Date en J2 hors données";SI(J3>MAX(C6:D100);"Date en J3 hors données";SI(MAX(SI((C6:C100<J3)*(D6:D100=J3);C6:C100))=MIN(SI((C6:C100=J2)*(D6:D100>J2);C6:C100));J4*(12/365)*INDEX(B6:B100;EQUIV(MIN(SI((C6:C100<=J2)*(D6:D100>=J2);D6:D100));C6:C100));SI(J3=MAX(C6:C100);(1+MIN(SI((C6:C100<=J2)*(D6:D100>=J2);D6:D100))-J2)*(12/365)*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)+(12/365)*INDEX(B6:B100;EQUIV(MAX(SI((C6:C100<=J3)*(D6:D100>=J3);C6:C100));C6:C100));(1+MIN(SI((C6:C100<=J2)*(D6:D100>=J2);D6:D100))-J2)*(12/365)*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)+(1+J3-MAX(SI((C6:C100<=J3)*(D6:D100>=J3);C6:C100)))*(12/365)*INDEX(B6:B100;EQUIV(MAX(SI((C6:C100<=J3)*(D6:D100>=J3);C6:C100));C6:C100))))))
0
Le Pingou Messages postés 12045 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 25 avril 2024 1 426
Modifié par Le Pingou le 15/07/2014 à 14:56
Bonjour Theo.R,
Merci pour la formule, superbe travail, bravo.
En bien oui il y a une erreur dans la procédure, que pajude ma gentiment signalé, je vais la corriger.
Je vous signale au passage que le cas 14.11.2004 au 14.11.2004 soit 1 jour avec votre formule j'ai 50.90 ce qui est visiblement faux.... Elle est répétitive car j'ai omis une condition... !

Ps : en fait selon le voeu de pajude d'avoir le choix et résultat sur une autre feuille, votre formule ne convient pas... !
Salutations.
Le Pingou
0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
15 juil. 2014 à 14:30
Il y a encore une petite erreur, quand la date de début n'est pas une date égale à la colonne C.

Ex : du 28/04/2000 au 30/04/2000 = 26,08
30/05/2014 au 31/05/2014 = 5,32

Pour la macro, effectivement il y a aussi une petite erreur que j'ai signalé à Le Pingou

Je suis désolé de vous embêter.
Merci
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
15 juil. 2014 à 14:51
Décidément !

J'ai (encore) corrigé ma formule pour les erreurs qui m'ont été relevées. N'hésitez pas à me dire s'il y a encore des cas que je n'aurais pas détectés.

Le doc :

https://www.cjoint.com/?DGpoXyYAB2Z

La formule (à valider en matricielle) :

=SI(J2<C6;"Date en J2 hors données";SI(J3>MAX(C6:D100);"Date en J3 hors données";SI(OU(MAX(SI((C6:C100<J3)*(D6:D100=J3);C6:C100))=MIN(SI((C6:C100=J2)*(D6:D100>J2);C6:C100));(MIN(SI((C6:C100>J2)*(D6:D100>J2);C6:C100))>J2)*(MAX(SI((C6:C100<J3)*(D6:D100=J3);D6:D100))=J3));J4*(12/365)*INDEX(B6:B100;EQUIV(MIN(SI((C6:C100<=J2)*(D6:D100>=J2);D6:D100));C6:C100));SI(J3=MAX(C6:C100);(1+MIN(SI((C6:C100<=J2)*(D6:D100>=J2);D6:D100))-J2)*(12/365)*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)+(12/365)*INDEX(B6:B100;EQUIV(MAX(SI((C6:C100<=J3)*(D6:D100>=J3);C6:C100));C6:C100));(1+MIN(SI((C6:C100<=J2)*(D6:D100>=J2);D6:D100))-J2)*(12/365)*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)+(1+J3-MAX(SI((C6:C100<=J3)*(D6:D100>=J3);C6:C100)))*(12/365)*INDEX(B6:B100;EQUIV(MAX(SI((C6:C100<=J3)*(D6:D100>=J3);C6:C100));C6:C100))))))

A très vite,
0
pajude Messages postés 77 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 9 mars 2024
15 juil. 2014 à 15:28
Désolé,
Il y a encore une erreur, du 30/04/2000 au 31/10/2000 = 13,08 (au lieu de 13,74)
de même du 01/05/2000 au 04/05/2003 = 81,66 (au lieu de 91,95)
Merci pour votre patience.
0