Re : Problème calcul Prorata
Bonsoir Tiouinch, VDAVID,
On va commencer par calculer les durées en jour de chaque période à partir de B12.
Pour le mois: JOUR(DATE(ANNEE(B12);MOIS(B12)+1;0))
On cherche la date correspondant à l’année de B12, au mois suivant celui de B12 et au jour 0.
DATE(ANNEE(B12);MOIS(B12)+1;0)) En principe, cela renvoie le dernier jour du mois précédent soit le dernier jour du mois de B12. En en prenant le JOUR, on arrive au résultat.
Pour le trimestre: CHOISIR(1+ENT((MOIS(B12)-1)/3);90+ESTNUM(DATEVAL("29/02/"&ANNEE(B12)));91;92;92)
Le 1ier trimestre possède 90 jours (31+28+31) augmenté de 1 si l’année est bissextile.
Le 2ème trimestre possède 91 jours (30+31+30).
Le 3ème trimestre possède 92 jours (31+31+30).
Le 4ème trimestre possède 92 jours (31+30+31).
La correction pour année bissextile se base sur l’existence ou non du 29 fév.
On cherche le numéro de série de la date correspondant au 29 fév de l’année de B12 : DATEVAL("29/02/"&ANNEE(B12)) Si cette date existe alors on renvoie le numéro de série sinon une erreur est renvoyée.
On teste si le retour est numérique : ESTNUM(DATEVAL("29/02/"&ANNEE(B12))) Ceci renvoie donc VRAI si le 29 fév existe et renvoie FAUX dans le cas contraire. Quand VRAI et FAUX interviennent dans une addition, VRAI est converti en 1 et FAUX en 0.
Nous avons donc obtenu notre correction en cas d’années bissextile ou non : +ESTNUM(DATEVAL("29/02/"&ANNEE(B12)))
Nous allons maintenant utiliser la fonction CHOISIR qui en fonction d’un index k évalue la kième formule qui suit :
CHOISIR( index k; formule 1; formule 2; formule k; …) sous la forme :
CHOISIR( n° du trimestre; nb jours trim 1; nb jours trim 2; nb jours trim 3; nb jours trim 4)
Il reste à calculer le numéro du trimestre :
Pour cela, on prend le mois de B12 auquel on ôte 1 : (MOIS(B12)-1)
On divise par 3 et on prend la partie entière : ENT((MOIS(B12)-1)/3)
Les mois 1,2,3 renvoient 0, les mois 4,5,6 renvoient 1, les mois 7,8,9 renvoient 2 et les mois 10,11,12 renvoient 3.
Comme l’index de la fonction CHOISIR doit commencer à 1 et non à 0, on rajoute 1 ce qui donne :
1+ENT((MOIS(B12)-1)/3)
La formule des nombres de jours pour le trimestre devient donc :
CHOISIR(1+ENT((MOIS(B12)-1)/3); nb jours trim 1; nb jours trim 2; nb jours trim 3; nb jours trim 4)
soit :
CHOISIR(1+ENT((MOIS(B12)-1)/3);90+ESTNUM(DATEVAL("29/02/"&ANNEE(B12)));91;92;92)
Pour l’année :365+ESTNUM(DATEVAL("29/02/"&ANNEE(B12)))
Une année possède 365 jours + 1 si année bissextile. Nous avons vu ci-dessus comment introduire la correction pour les années bissextiles.
Le reste de la formule :
La cellule C2 contient la période. On va isoler le premier caractère de la période en C2 GAUCHE(C2;1)et rechercher sa position dans le tableau {"M";"T";"A"}. On utilise la fonction EQUIV : EQUIV(GAUCHE(C2;1);{"M";"T";"A"};0) qui va renvoyer 1 pour « M », 2 pour « T » et 3 pour « A »
On utilise encore une fois la fonction CHOISIR qui en fonction de la période va retourner le nombre de jouir de la période :
CHOISIR(index période ; nbr jours mois, nbr jours trim, nbr jours année)
On obtient la formule pour le nombre de jours selon la période : CHOISIR(EQUIV(GAUCHE(C2;1);{"M";"T";"A"};0); JOUR(DATE(ANNEE(B12);MOIS(B12)+1;0));CHOISIR(1+ENT((MOIS(B12)-1)/3);90+ESTNUM(DATEVAL("29/02/"&ANNEE(B12)));91;92;92);365+ESTNUM(DATEVAL("29/02/"&ANNEE(B12))))
La formule finale s’écrit donc :
=SI(H2="";"";I2*H2 / nombre de jours selon la période )soit
=SI(H2="";"";I2*H2 /CHOISIR(EQUIV(GAUCHE(C2;1);{"M";"T";"A"};0); JOUR(DATE(ANNEE(B12);MOIS(B12)+1;0));CHOISIR(1+ENT((MOIS(B12)-1)/3);90+ESTNUM(DATEVAL("29/02/"&ANNEE(B12)));91;92;92);365+ESTNUM(DATEVAL("29/02/"&ANNEE(B12)))))