Re : Problème calcul Prorata
Bonjour Tiouinch, Mapomme,
Alors cette formule:
DATE(ANNEE(B12);MOIS(B12)+SI(MOD(MOIS(B12);3)<>0; 3;0)-MOD(MOIS(B12);3);JOUR(FIN.MOIS(DATE(ANNEE(B12);MOI S(B12)+SI(MOD(MOIS(B12);3)<>0;3;0)-MOD(MOIS(B12);3);1);0)))-
DATE(ANNEE(B12);MOIS(B12)+SI(MOD(MOIS(B12);3)=0;-2;1)-MOD(MOIS(B12);3);1)
Il y'a deux parties. L'idée c'est de soustraire le dernier jour du trimestre avec le premier. Donc pour trouver le dernier jour du trismestre on a:
DATE(ANNEE(B12);MOIS(B12)+SI(MOD(MOIS(B12);3)<>0; 3;0)-MOD(MOIS(B12);3);JOUR(FIN.MOIS(DATE(ANNEE(B12);MOI S(B12)+SI(MOD(MOIS(B12);3)<>0;3;0)-MOD(MOIS(B12);3);1);0)))
La formule date a besoin de trois données. L'année, le mois et le jour de la date voulue.
Pour l'année, pas de problème on sélectionne l'année en cours:
ANNEE(B12)
Pour le mois, on veut le dernier mois du trismestre en cours.
On a alors trois cas:
- Soit le mois en cours est le premier du trimestre
- Soit le mois en cours est le deuxième du trismestre
- Soit le mois en cours est le troisième du trimestre
Pour déterminer laquelle de ces trois siuation est vraie, on utilise la fonction
MOD()
La fonction
MOD() permet de faire la division Euclidienne d'un nombre par un diviseur. (En termes moins barbare, on prends un nombre, on le divise et
MOD() renvoie le dernier reste du résultat entier de la division.) Si je prends 17 et que je le divise par 5,
MOD() me renverra 2 soit le reste de 17/5 qui est de 3 pour un résultat entier.
En l'occurence ç'est pratique car en utilisant mod sur le mois avec comme diviseur 3, on sait la position du mois en cours dans le trimestre. Si
MOD() renvoie 1:
On sait que c'est le premier mois du trimestre: Exemple Avril ==> Mois 4. 4/3 = 1 Reste 1
Si il renvoie 2:
On sait que c'est le deuxième mois du trimestre: Exemple Novembre ==> Mois 11. 11/3 = 3 Reste 2
Si il renvoie 0:
On sait que c'est le dernier mois du trimestre: Exemple Décembre ==> Mois 12. 12/3 = 4 Reste 0
C'est ce que fait la partie de la formule:
MOD(MOIS(B12);3)
L'idéal était qu'elle renvoie 3 si le mois en cours était le troisième du trimestre. Auquel cas on aurait fait:
MOIS(B12) + 3 - MOD(MOIS(B12);3) pour déterminer le mois supérieur.
Mais comme la fonction renvoie 0 lorsque le mois en cours est le dernier mois du trismestre, il faut rajouter une condition:
SI(MOD(MOIS(B12);3)<>0; 3;0)
De cette façon on peut déterminer la position du mois en cours dans le trimestre concerné.
Pour récupérer le JOUR, il faut prendre le dernier jour du dernier mois du trimestre, soit l'utilisation de la fonction
FIN.MOIS, combiné à la partie précédente afin de déterminer la aussi le dernier mois du trimestre.
La dernière partie suit la même logique, mais de façon miroir.
Voilà j'espère que c'est suffisamment clair
, n'hésite pas dans le cas contraire !
Bonne journée