Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calcul d'un écart de date (Correctif de formule SVP)

74 réponses
Avatar
Guido
Bonjour =E0 vous tous,

un petit soucis de formule de d=E9compte de dates. Qui peut m'apporter une =
solution.

=3DSI(JOUR(A1)=3D1;30;FIN.MOIS(A1;0)-A1+1)+SI(FIN.MOIS(B1;0)=3DB1;30;JOUR(B=
1))+JOURS360(FIN.MOIS(A1;0);FIN.MOIS(B1;0))-30

Cette formule devrait me donner les r=E9sultats suivants en fonction d'une =
simple r=E8gle commerciale de 30 jours, mais qui devrait calculer le mois d=
e f=E9vrier selon son nombre exacte de jours (soit 28 jours, soit 29 jours)=
.

01.01.2010 27.01.2010 27 jours
01.02.2010 27.02.2010 27 jours
01.02.2010 28.02.2010 28 jours
01.02.2012 29.02.2012 29 jours
04.05.2010 31.05.2010 28 jours
01.06.2010 30.06.2010 30 jours
01.07.2010 31.08.2010 60 jours
01.09.2010 30.09.2010 30 jours
04.05.2010 02.08.2010 90 jours
15.05.2010 19.11.2010 186 jours


j'ai par exemple un soucis avec le 2=E8me exemple. Il ne compte que 25 jour=
s sur le mois de f=E9vrier. Sinon tout le reste semble correspondre.

Qui saurait m'aider, dans la mise au point de cette formules pseudo commerc=
iale ??

Guido

10 réponses

1 2 3 4 5
Avatar
MichD
15/05/10 19/11/10 186 jours

Comment fait-on pour arriver à 186 jours ? Explications suivantes :

Pour chacun des mois en A1 et B1, lorsque l'on calcule le nombre de jours, on tient compte
des 2 bornes.
La date inscrite en A1 +1 et la date inscrite en B1 +1 et pour chaque mois le nombre de
jours ne peut pas être plus grand que 30. À cela s'ajoute le nombre de mois complet entre
les 2 dates *30

15/05/10 = 16 jours
19/11/10 = 20 jours

Nombre de mois complets entre les 2 dates = 5 * 30 = 150

Le total : 16 +20 +150 = 186

Baser sur ce qui précède, une formule qui retourne exactement pour tous les exemples
soumis le même nombre de jours.
=IF(MONTH(A1)=MONTH(B1);DATEDIF(A1;B1;"d")+1;
(ABS(MONTH(B1)-MONTH(A1)-1)*30+(30-MIN(DAY(A1);30))
+1+MIN(DAY(B1)+1;30)))

En français

=si(mois(A1)=mois(B1);DATEDIF(A1;B1;"d")+1
;(ABS(mois(B1)-mois(A1)-1)*30+(30-MIN(jour(A1);30))
+1+MIN(jour(B1)+1;30)))

--
MichD
---------------------------------------------------------------
Avatar
Jacquouille
P'tain, voilà que je suis encore une fois d'accord avec toi.
Mille excuses pour le 186.....je n'avais pas relu toute l'historique.
Bonne journée. -))



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
jmh08l$sqq$

| Pourquoi Denis arrive-t-il à 186 ?

Dans le premier message de Guido,
ceci : 15/05/10 19/11/10 186 jours
représentent le dernier exemple donné.

J'ai dit que le résultat devrait être de 189 jours, résultat
retourné par la formule. Le +1 de la formule, c'est pour tenir
compte du fait que les résultats proposés par Guido tiennent
compte et de la journée de départ et de la journée d'arrivée.
Habituellement, lorsque l'on fait une différence,
exemple : 10-5 le résultat est l'écart entre les 2 valeurs 5 et non 6.

MichD
---------------------------------------------------------------
Avatar
MichD
Si tes dates sont réparties sur plus d'une année :

(Désolé pour l'anglais mais ma version Excel est présentement en anglais!)

=IF(AND(YEAR(A1)=YEAR(B1);MONTH(A1)=MONTH(B1));DATEDIF(A1;B1;"d")
+1;IF(MONTH(A1)=MONTH(B1);(ABS(DAY(B1)-DAY(A1))+1)+
((DATEDIF(A1;B1;"M"))*30);((DATEDIF(A1;B1;"M")-1)*30
+(30-MIN(DAY(A1);30))+1+MIN(DAY(B1)+1;30))))

--
MichD
---------------------------------------------------------------
Avatar
Guido
Bonsoir

et bien, comme explicatif, je pense que je n'aurais pas fait mieux.
Effectivement, je n'ai pas fait mieux. Vu le nombre de lignes à cette que stion.
Bravo et je t'en remercie.

J'ai testé la formule et il se trouve un point non fonctionnel et il ne c oncerne pas un passage entre une année et une autre.

Par exemple :
31.03.2010 - 05.04.2010 - 6 jours / 7 jours
en fonction de ces dates, le résultat devrait être 6 et non 7 jours.

En ce qui concerne le passage entre les années, généralement je stopp e le décompte au 31 décembre et le reprends le 1er janvier. Mais si la formule fonctionne bien, se serait superbe.

Merci encore et Bonne nuit




Le lundi 16 avril 2012 16:24:36 UTC+2, MichD a écrit :
15/05/10 19/11/10 186 jours

Comment fait-on pour arriver à 186 jours ? Explications suivantes :

Pour chacun des mois en A1 et B1, lorsque l'on calcule le nombre de jours , on tient compte
des 2 bornes.
La date inscrite en A1 +1 et la date inscrite en B1 +1 et pour chaque m ois le nombre de
jours ne peut pas être plus grand que 30. À cela s'ajoute le nombre d e mois complet entre
les 2 dates *30

15/05/10 = 16 jours
19/11/10 = 20 jours

Nombre de mois complets entre les 2 dates = 5 * 30 = 150

Le total : 16 +20 +150 = 186

Baser sur ce qui précède, une formule qui retourne exactement pour to us les exemples
soumis le même nombre de jours.
=IF(MONTH(A1)=MONTH(B1);DATEDIF(A1;B1;"d")+1;
(ABS(MONTH(B1)-MONTH(A1)-1)*30+(30-MIN(DAY(A1);30))
+1+MIN(DAY(B1)+1;30)))

En français

=si(mois(A1)=mois(B1);DATEDIF(A1;B1;"d")+1
;(ABS(mois(B1)-mois(A1)-1)*30+(30-MIN(jour(A1);30))
+1+MIN(jour(B1)+1;30)))

--
MichD
---------------------------------------------------------------
Avatar
MichD
Cette formule répond à tous les exemples soumis y compris le dernier cas que tu as
mentionné dans ton dernier message...

=IF(MONTH(A1)=MONTH(B1);DATEDIF(A1;B1;"d")
+1;(ABS(MONTH(B1)-MONTH(A1)-1)*30
+(30-MIN(IF(DAY(A1)>0;30;DAY(A1)-1);30))+
MIN(IF(DAY(B1)>29;30;DAY(B1)+1);30)))

Si cette formule est satisfaisante et si tu en as besoin, il faudra adapter la formule
pour des écarts pour des années différentes...


--
MichD
---------------------------------------------------------------
Avatar
MichD
Et pendant que tu y es, teste cette formule pour des dates d'années différentes.


=IF(AND(YEAR(A1)=YEAR(B1);MONTH(A1)=MONTH(B1));
DATEDIF(A1;B1;"d")+1;IF(MONTH(A1)=MONTH(B1);
(ABS(DAY(B1)-DAY(A1))+1)+((DATEDIF(A1;B1;"M"))*30);
((DATEDIF(A1;B1;"M")-1)*30+(30-MIN(IF(DAY(A1)>0;
30;DAY(A1)-1);30))+MIN(IF(DAY(B1)>29;30;DAY(B1)+1);30))))

--
MichD
---------------------------------------------------------------
Avatar
Jacquouille
Bonjour Denis

Je compte 249 car dans cette formule.
penses-tu pouvoir l' adapter pour deux dates étalées sur deux siècles, avec
seulement 7 car de plus ? -)))
Après tout, 1999 n'est pas si loin que cela.
A condition, œuf corse, que nous soyons toujours bloqués à 256 car.

Avec une traduction tout ce qu'il y a de plus personnelle, je crois qu'il y
aurait peut-être moins de caractères avec la version gauloise. ( 244<>249)

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
jmihet$rj4$

Et pendant que tu y es, teste cette formule pour des dates d'années
différentes.


=IF(AND(YEAR(A1)=YEAR(B1);MONTH(A1)=MONTH(B1));
DATEDIF(A1;B1;"d")+1;IF(MONTH(A1)=MONTH(B1);
(ABS(DAY(B1)-DAY(A1))+1)+((DATEDIF(A1;B1;"M"))*30);
((DATEDIF(A1;B1;"M")-1)*30+(30-MIN(IF(DAY(A1)>0;
30;DAY(A1)-1);30))+MIN(IF(DAY(B1)>29;30;DAY(B1)+1);30))))

--
MichD
---------------------------------------------------------------
Avatar
MichD
Cette formule devrait s'appliquer dans tous les cas de figure...

Reste à traduire les fonctions en français.

=IF(AND(YEAR(A1)=YEAR(B1);MONTH(A1)=MONTH(B1));DATEDIF(A1;B1;"d")+1;
IF(MONTH(A1)=MONTH(B1);(ABS(DAY(B1)-DAY(A1))+1)+((DATEDIF(A1;B1;"M"))*30);
IF(DAY(A1)>DAY(B1);MAX(0;((DATEDIF(A1;B1;"M")-1)*30));MAX(0;
((DATEDIF(A1;B1;"M")-1)*30)))+(30-MIN(IF(DAY(A1)>0;30;DAY(A1)-1);30))
+MIN(IF(DAY(B1)>29;30;DAY(B1)+1);30)))

Pour Jacquouille, elle a 315 caractères. Ce type de formule est imbuvable, mais si elle
remplit son mandat, elle a l'avantage de ne pas utiliser les fonctions de l'utilitaire
d'analyse
donc plus flexible entre les différentes versions d'Excel 1997 à 2010.
--
MichD
---------------------------------------------------------------
Avatar
isabelle
salutatous,

voilà la traduction,

=SI(ET(ANNEE(A1)=ANNEE(B1);MOIS(A1)=MOIS(B1));DATEDIF(A1;B1;"d")+1;SI(MOIS(A1)=MOIS(B1);
(ABS(JOUR(B1)-JOUR(A1))+1)+((DATEDIF(A1;B1;"M"))*30);SI(JOUR(A1)>JOUR(B1);MAX(0;((DATEDIF(A1;B1;"M")-1)*30));
MAX(0;((DATEDIF(A1;B1;"M")-1)*30)))+(30-MIN(SI(JOUR(A1)>0;30;JOUR(A1)-1);30))+MIN(SI(JOUR(B1)>29;30;JOUR(B1)+1);30)))

--
isabelle



Le 2012-04-17 08:41, MichD a écrit :
Cette formule devrait s'appliquer dans tous les cas de figure...

Reste à traduire les fonctions en français.

=IF(AND(YEAR(A1)=YEAR(B1);MONTH(A1)=MONTH(B1));DATEDIF(A1;B1;"d")+1;
IF(MONTH(A1)=MONTH(B1);(ABS(DAY(B1)-DAY(A1))+1)+((DATEDIF(A1;B1;"M"))*30);
IF(DAY(A1)>DAY(B1);MAX(0;((DATEDIF(A1;B1;"M")-1)*30));MAX(0;
((DATEDIF(A1;B1;"M")-1)*30)))+(30-MIN(IF(DAY(A1)>0;30;DAY(A1)-1);30))
+MIN(IF(DAY(B1)>29;30;DAY(B1)+1);30)))

Pour Jacquouille, elle a 315 caractères. Ce type de formule est imbuvable, mais si elle
remplit son mandat, elle a l'avantage de ne pas utiliser les fonctions de l'utilitaire
d'analyse
donc plus flexible entre les différentes versions d'Excel 1997 à 2010.
Avatar
MichD
Merci Isabelle.

--
MichD
---------------------------------------------------------------
1 2 3 4 5