Bonjour,
Je pense que la solution est bien plus complexe que ça. Si le montant doit être au prorata temporis, il faut découper le mois.
Dans l'exemple du client G, la période de facturation est du 7 janvier au 6 juillet, ce qui veut dire qu'il faut compter 24 jours en janvier, les mois de février, mars, avril, mai, juin complets, et les 6 jours de juillet.
Pour chaque colonne on doit vérifier 5 choses.
1. Si on est hors de la période parce qu'elle n'a pas encore commencé
2. Si on est dans le premier mois de la période (on compte alors le nombre de jours entre la date de début et le dernier jour du mois)
3. Si on est dans la période, le mois est compté complet
4. Si on est le dernier mois de la période (on compte alors le nombre de jours entre le premier du mois et la date de fin
5. Si on est hors de la période parce que c'est terminé.
Pour reprendre l'exemple du client G
Décembre 2019 est avant la période (donc zéro)
Janvier 2020 est le premier mois (on compte 24 jours (du 7 au 31 janvier)
Février a 29 jours, mars 31, avril 30, mai 31, juin 30
Et on termine avec les 6 jours du mois de juillet
En J3, je me retrouve avec la formule suivante pour faire le test
=SI(FIN.MOIS(J$1;0)<$E3;"Pas commencé";
SI(DATE(ANNEE(J$1);MOIS(J$1);1)>$F3;"Terminé";
SI(ET(ANNEE(J$1)=ANNEE($E3);MOIS(J$1)=MOIS($E3));"Premier mois";
SI(ET(ANNEE(J$1)=ANNEE($F3);MOIS(J$1)=MOIS($F3));"Dernier mois";"Mois entier"))))
Pour le moment, c'est juste pour tester la première étape, c'es-à-dire les conditions.
Pour tester qu'une date quelconque est dans le même mois qu'une autre date quelconque, je regarde que l'année et le mois des deux dates soient identiques
ET(ANNEE(J$1)=ANNEE($E3);MOIS(J$1)=MOIS($E3))
Pour prendre le dernier jour du mois, j'utilise la fonction FIN.MOIS en décalant de zéro mois
FIN.MOIS(J$1;0)
Pour prendre le premier du mois, j'utilise la fonction DATE en mettant la même année, le même mois, mais en mettant 1 pour le jour
DATE(ANNEE(J$1);MOIS(J$1);1)
Maintenant, on va remplacer les textes par les vrais calculs, c'est ça qui nous importe surtout.
"Pas commencé" et "Terminé" sont les plus simples, on remplace le texte par un zéro.
"Premier mois" = le nombre de jours entre la date de départ et la date de la fin de ce mois de départ (*remarque à la fin)
FIN.MOIS($E3;0)-$E3
"Dernier mois" = le nombre de jours entre le premier du mois et la date de fin
La fonction JOUR me retourne directement cette valeur
"Mois entier" = le nombre de jours dans ce mois-là. En combinant la fonction JOUR et la fonction FIN.MOIS, j'obtiens selon le cas 31 29 30 jours
La formule complète est
=SI(FIN.MOIS(J$1;0)<$E3;0;
SI(DATE(ANNEE(J$1);MOIS(J$1);1)>$F3;0;
SI(ET(ANNEE(J$1)=ANNEE($E3);MOIS(J$1)=MOIS($E3));FIN.MOIS($E3;0)-$E3;
SI(ET(ANNEE(J$1)=ANNEE($F3);MOIS(J$1)=MOIS($F3));JOUR($F3);JOUR(FIN.MOIS(J$1;0))))))
Je vérifie bien que mon nombre de jours en ligne est bien égal au nombre de jours dans la colonne G
Si par hasard, il fallait compter le jour de démarrage comme un jour effectif, il faudrait ajouter +1 dans les formules de la colonne G (pour que le montant par jour en tienne compte) et ajouter +1 également dans la partie de la formule du "Premier mois"
Il ne reste plus qu'à multiplier tout ce qu'on a trouvé par le montant par jour et on a terminé
Un fichier lié sera beaucoup plus parlant.
https://www.cjoint.com/c/JBvleuwkPmP
En espérant avoir répondu à la question.
Bon courage