Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

846 views
Skip to first unread message

Guido

unread,
Mar 26, 2012, 5:56:20 PM3/26/12
to
Bonjour à vous tous,

un petit soucis de formule de décompte de dates. Qui peut m'apporter une solution.

=SI(JOUR(A1)=1;30;FIN.MOIS(A1;0)-A1+1)+SI(FIN.MOIS(B1;0)=B1;30;JOUR(B1))+JOURS360(FIN.MOIS(A1;0);FIN.MOIS(B1;0))-30

Cette formule devrait me donner les résultats suivants en fonction d'une simple règle commerciale de 30 jours, mais qui devrait calculer le mois de février 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ème exemple. Il ne compte que 25 jours sur le mois de février. Sinon tout le reste semble correspondre.

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

Guido

Jacquouille

unread,
Mar 27, 2012, 10:08:17 AM3/27/12
to
Bonjour
En colonne A, je mets la première info (1/1/2010)
En colonne B, je mets la seconde (27/1/2010)
En C1 ---> =(B1-A1)+1 et je trouve 27 comme dans le tableau.

Cette façon me donnera toujours la différence, qu'il y aie 28 ou 29 jours en
février.
Pour ce qui est de la règle commerciale des 30 jours, je ne connais pas
celle de votre pays.
Ici, à Liège (B), on fait "30 jours, fin de mois. c'est à d que la facture
doit être payée au plus tard dans les 30 jours qui suivent la fin du mois de
la date facture.
Une facture du 15 Fév devra être payée 30 j après le 28/29 fév.

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Guido" a écrit dans le message de groupe de discussion :
20267707.546.1332798980021.JavaMail.geo-discussion-forums@vbyj18...

Guido

unread,
Mar 28, 2012, 4:01:39 PM3/28/12
to
Bonjour Jacquouille,

Effectivement, mais je me suis probablement mal exprimé. Cette formule placée par exemple en A3, doit me calculer A2-A1. Le tableau est simplement pour détecter certaines anomalies de mes calculs, dont le calcul du nombre de jours pour le mois de février inférieur à 28/29 jours.
La formule mise dans mon précédent mail, ne fonctionne pas correctement. Selon le calcul du nombre de jours entre deux dates, je dois avoir les résultats du tableau. Ce qui ne fonctionne pas correctement pour le mois de février puisque la formule me compte par exemple 01.02.2010 au 27.02.2010 = 25 jours au lieu de 27 jours.
Le principe du calcul est dans l'ensemble simple : Il faut déterminer le nombre de jours utilisés entre une date et l'autre. Les mois entiers sont de 30 jours, sauf février qui doit obligatoirement être calculé avec son nombre de jours exacte (28 ou 29).

Une des difficulté est également de calculer deux écarts entre les mois de juin et septembre (juillet et août=31) qui devrait donc donner (B1-A1)-2. La même chose se produit également avec la suite des mois de décembre et janvier.
Je prends exemple les dates entre 04.06.2010 au 02.09.2010 = 89 (mon total désiré) ; et le total de la formule que vous me donnez = 91.

Soit-dit en passant, (b1-a1)+1 était le premier jet de l'ébauche pour la formule.

Auriez-vous une solution ? car je sèche sur ce petit problème.

Cordialement

Guido

Guido

unread,
Mar 30, 2012, 7:24:03 AM3/30/12
to
Bonjour à vous tous,

Quelqu'un aurait une idée de correctif pour la formule ?

Merci de vos réponses

Guido

Gloops

unread,
Apr 11, 2012, 6:51:56 AM4/11/12
to
Bonjour,

J'ai l'impression que ta question rejoint celle de la date du dernier
jour du mois, puisqu'on y ajoute 30 jours.

Comme on la calcule en retirant 1 au premier du mois suivant, en
définitive, on ajoutera 29 au premier du mois suivant.

Il y a toute une littérature dans les newsgroups sur la date du dernier
jour du mois, mais j'ai négligé de mémoriser la solution la plus élégante.

ça doit pouvoir se faire avec quelques formules, j'imagine que dans un
newsgroup ça sera plus facile à présenter sous forme de fonction :

Public Function TrenteFinMois(DateFact As Date) As Date
Dim DtTemp As Date
DtTemp = DateSerial(Year(DateFact), Month(DateFact), 25) + 10
TrenteFinMois = DateSerial(Year(DtTemp), Month(DtTemp), 30)
End Function

DtTemp se trouve dix jours après le 25 du mois de la facture : donc,
autour du 5 du mois suivant. Ce qu'on en retient pour la suite c'est que
c'est une date du mois suivant.

TrenteFinMois donne le 30 du mois suivant, autrement dit, 30 jours fin
de mois.
Si je me suis trompé d'un jour il suffira de corriger la fin de la
dernière ligne de la fonction.

Excuse, je n'ai pas pris le temps de regarder le détail de ce que tu as
fait.


http://groups.google.fr/groups/search?hl=fr&as_q=&as_epq=date+du+dernier+jour+du+mois&as_oq=Excel&as_eq=&num=10&scoring=&lr=&as_sitesearch=&as_qdr=&as_mind=1&as_minm=1&as_miny=2012&as_maxd=1&as_maxm=1&as_maxy=2012&as_ugroup=&as_usubject=&as_uauthors=&safe=off

Guido

unread,
Apr 13, 2012, 6:54:18 AM4/13/12
to
Bonjour Gloups,

merci de t'intéresser à ma question.

la formule fonctionne super bien lorsqu'il s'agit par exemple de calculer les mois sur 30 jours, comme pour des calculs financiers.

Malheureusement, je ne calcule pas de jours financier, mais des jours de présence, en fonction du mois.

Le tableau récapitulatif des jours comptabilisés représente en fait, ce que je devrais ressortir pour ces périodes.

Mais voilà, je n'arrive pas à trouver/corriger la formule pour qu'elle me calcule les présence en fonction des mois (max 30 jours/mois) sauf pour le mois de février. En effet, le 31ème jours d'un mois ne doit pas être comptabilisé.

Question macro, je n'ai pas la possibilité d'intégrer des macros au boulot.

Désolé, je sais que cela aurait été plus simple, mais voilà...

Merci d'avance

Guido

Gloops

unread,
Apr 13, 2012, 10:31:20 AM4/13/12
to
Si j'ai bien compris, il y a deux questions :
- l'évaluation du nombre de jours ouvrés, pour calculer le montant à
facturer
- l'évaluation de la date de paiement, à 30 jours fin de mois

Il me paraît très difficile de mélanger les deux questions.

La date de paiement, c'est fait, je crois.

Pour l'intervalle entre deux dates, sans s'occuper des jours fériés et
week-ends c'est DateDiff, sinon ...

Google a plein de trucs à raconter là-dessus en faisant une recherche
sur "Excel intervalle entre deux dates".

Oops, pardon, la bonne recherche serait plutôt "Excel nombre de jours
ouvrables entre deux dates" et du coup la réponse peut être
http://support.microsoft.com/kb/466909/fr


____________________________________

Gloops

unread,
Apr 13, 2012, 10:39:58 AM4/13/12
to
Guido a écrit, le 13/04/2012 12:54 :
> Mais voilà, je n'arrive pas à trouver/corriger la formule pour qu'elle me calcule les présence
> en fonction des mois (max 30 jours/mois) sauf pour le mois de février.
> En effet, le 31ème jours d'un mois ne doit pas être comptabilisé.

Aurais-je mal compris la question ?
Il ne s'agit pas d'évaluer le nombre de jours ouvrables, mais le maximum
entre 30 et le nombre de jours du mois ?

Le nombre de jours du mois a été évoqué précédemment dans le fil,
ensuite pour le maximum il y a une fonction Max.

Quelquefois, la difficulté est de poser les questions, en les séparant bien.


Message has been deleted

Guido

unread,
Apr 13, 2012, 6:46:28 PM4/13/12
to
Bonsoir Gloops

Si je reprends mon tableau sur l'exemple d’intervalles de jours, je pensais qu'il était explicite étant donné que les résultats donnés sont ceux effectivement à avoir (résultats calculés à la main).

En utilisant la formule nommée plus haut, le calcul de l'écart entre deux dates se fait très bien en fonction des critères suivants (sauf février ligne 2).

exemple :

Début de période Fin de période nb de jours

01.01.2010 27.01.2010 27 jours
01.02.2010 27.02.2010 27 jours "*Erreur ici avec la formule*"
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

Il s'agit de calculer le temps de présence journalière d'une personne (rien à voir avec des francs ou euros) entre une date X et Y sur sa période exacte, comprenant également les conditions contraignantes suivantes :

- un mois ne comporte que 30 jours entiers
- sauf si le début de la période commence après le 1er jour du mois
- sauf le mois de février car il comporte 28/29 jours

J'ai essayer de reproduire dans ce tableau les cas de figures de calculs possibles. Mais voilà, en utilisant la formule, le calcul de février ne me donne pas le bon résultat. La formule donne 25 jours au lieu de 27 jours comme sur le tableau.

Je te remercie pour t'être penché sur ma question.

Guido

Gloops

unread,
Apr 14, 2012, 5:49:31 AM4/14/12
to
Guido a écrit, le 14/04/2012 00:46 :
> Bonsoir Gloops
>
> Si je reprends mon tableau sur l'exemple d’intervalles de jours, je pensais qu'il était explicite étant donné que les résultats donnés sont ceux effectivement à avoir (résultats calculés à la main).
>
> En utilisant la formule nommée plus haut, le calcul de l'écart entre deux dates se fait très bien en fonction des critères suivants (sauf février ligne 2).
>
> exemple :
>
> Début de période Fin de période nb de jours
>
> 01.01.2010 27.01.2010 27 jours
> 01.02.2010 27.02.2010 27 jours "*Erreur ici avec la formule*"

Il est vrai que je n'avais pas trop regardé le tableau, comment se
fait-il qu'on se retrouve avec un mois de février qui se termine le 27 ?

C'est une année "anti-bisextile" ?

C'est encore plus étrange pour Janvier, d'ailleurs.

MichD

unread,
Apr 14, 2012, 11:28:53 AM4/14/12
to
Bonjour,

essaie cette formule :

=IF(DAY(A1)=1;30;EOMONTH(A1;0)-A1+1)+
IF(EOMONTH(B1;0)=B1;30;DAY(B1))+
DAYS360(EOMONTH(A1;0);EOMONTH(B1;0))+
IF(MONTH(B1)=2;IF(MOD(DAY(EOMONTH(B1;0));28)=0;1;2);0)-30

En français, ça devrait donner ceci :

=SI(JOUR(A1)=1;30;FIN.MOIS(A1;0)-A1+1)+
SI(FIN.MOIS(B1;0)=B1;30;JOUR(B1))+
JOURS360(FIN.MOIS(A1;0);FIN.MOIS(B1;0))+
SI(MOIS(B1)=2;SI(MOD(JOUR(FIN.MOIS(B1;0));28)=0;1;2);0)-30

MichD
---------------------------------------------------------------


Guido

unread,
Apr 14, 2012, 4:54:05 PM4/14/12
to
Bonsoir MichD

Je te remercie pour t'être arrêté sur ma demande et te donne le feedback de la formule.

pour les périodes suivantes, un soucis de calcul de jours n'est pas bon.
Le reste des périodes calculées sont OK

Début de période Fin de période nb de jours

01.01.2010 27.01.2010 27 jours OK
01.02.2010 27.02.2010 27 jours "*Erreur 26 jours*"
01.02.2010 28.02.2010 28 jours "*Erreur 29 jours*"
01.02.2012 29.02.2012 29 jours "*Erreur 31 jours*"
04.05.2010 31.05.2010 28 jours ok
etc... OK

Encore merci pour ton aide

Guido

Guido

unread,
Apr 14, 2012, 4:43:50 PM4/14/12
to
Bonsoir Gloops

Dans les calculs le mois de février se termine par 28 jours (sauf les années bissextiles, bien entendu). Mais comme dit précédemment, je ne calcule pas d'intérêts ou autres questions bancaires. C'est un calcul de présence que je dois effectuer et qui m'impose les règles citées plus haut. Les mois pleins seront de 30 jours maximum, mais ce n'est pas le cas pour février, puisque je dois l'utiliser exactement selon son nombre de jours effectif. C'est pour cette raison que j'ai placé le tableau qui permet de contrôler si la formule fonctionne correctement en fonction des contraintes. Une simple formule comptable d'intérêts à 360 jours ne fonctionne pas pour mon cas.

A+




Le samedi 14 avril 2012 11:49:31 UTC+2, Gloops a écrit :
> Guido a écrit, le 14/04/2012 00:46 :
> > Bonsoir Gloops
> >
> > Si je reprends mon tableau sur l'exemple d’intervalles de jours, je pensais qu'il était explicite étant donné que les résultats donnés sont ceux effectivement à avoir (résultats calculés à la main).
> >
> > En utilisant la formule nommée plus haut, le calcul de l'écart entre deux dates se fait très bien en fonction des critères suivants (sauf février ligne 2).
> >
> > exemple :
> >
> > Début de période Fin de période nb de jours
> >
> > 01.01.2010 27.01.2010 27 jours
> > 01.02.2010 27.02.2010 27 jours "*Erreur ici avec la formule*"
>

Gloops

unread,
Apr 15, 2012, 4:51:39 PM4/15/12
to
Bon eh bien ça me rassure, il n'y a pas que moi : on dirait qu'il y a
une étape que tu considères comme évidente, et qui finalement ne l'est
pas tant que ça.




Guido

unread,
Apr 15, 2012, 5:57:56 PM4/15/12
to
Voilà. Je le la considère pas comme évidente, et c'est bien pour cette raison que je viens poser ma question sur le Forum. Il y a une étape que je n'arrive pas à trouver dans le contexte de la formule et des contraintes posées, non pas personnellement, mais par ma hiérarchie.

Merci pour t'être penché sur mon cas.

MichD

unread,
Apr 15, 2012, 7:45:13 PM4/15/12
to

Si ton objectif est de trouver le nombre de jours existants entre ces 2 dates :

Ceci est suffisant:
=DATEDIF(A1;B1;"d")+1

Dans tous les exemples que tu as donnés, seule la dernière est problématique :
15/05/10 19/11/10 186 jours
Le résultat devrait donner 189 jours

MichD
---------------------------------------------------------------



Gloops

unread,
Apr 16, 2012, 3:10:18 AM4/16/12
to
En fait, je parlais d'une étape dans l'évaluation des durées, en ne
s'occupant pas du tout d'Access.
J'ai évalué du début à la fin du mois, et apparemment j'ai eu tort.

Jacquouille

unread,
Apr 16, 2012, 5:52:46 AM4/16/12
to
Bonjour

Je reprends ici l'exemple de Denis ....
A1 = 15/05/2010
B1 = 19/11/2010

Si je fais simplement B1-A1, j'obtiens 188 jours
Si j'applique la formule =DATEDIF(A1;B1;"d")+1 préconisée par Denis,
j'obtiens 189, ce qui est logique, vu qu'il fait +1. Jusque là, on est
bons.

Pourquoi Denis arrive-t-il à 186 ?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
jmfmia$349$1...@speranza.aioe.org...

Jacquouille

unread,
Apr 16, 2012, 6:27:36 AM4/16/12
to
Re
Dans tous les exemples donnés, le nombre de jours de B1 est toujours plus
grand que celui de A1.
Lorsque je fais:
A1 = 28/1/2010
B1 = 27/3/2010

B1-A1 donne 58
=datedif(a1;b1;"d")+1) donne 59 .... ce qui correspond bien avec la première
formule, puyisque on a rajouté 1.
Où le bât blesse, c'est avec la formule initiale de Guido:
=SI(JOUR(A1)=1;30;FIN.MOIS(A1;0)-A1+1)+SI(FIN.MOIS(B1;0)=B1;30;JOUR(B1))+JOURS360(FIN.MOIS(A1;0);FIN.MOIS(B1;0))-30
on obtient 61 ?????

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacquouille" a écrit dans le message de groupe de discussion :
4f8bebee$0$3115$ba62...@news.skynet.be...

MichD

unread,
Apr 16, 2012, 7:36:53 AM4/16/12
to
| 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
---------------------------------------------------------------


Guido

unread,
Apr 16, 2012, 7:49:24 AM4/16/12
to
Bonjour à vous

je viens de voir vos messages. effectivement, j'ai pensé à Datedif, mais dans le cas de figure initialement posé, il corrige les erreurs de décompte pour le mois de février. Mais me pose un autre soucis. Les mois de 31 jours à ne comptabiliser que sur 30 jours, (sauf si le mois est entamé).
comme vous pourrez le constater avec les tests durant les dates suivantes.

résultat Datedif
01.07.2010 31.08.2010 60 jours / 62
04.05.2010 02.08.2010 90 jours / 91
31.03.2010 05.04.2010 63 jours / 64

D'où la tentative de la formule "Fin.Mois"

MichD

unread,
Apr 16, 2012, 10:24:36 AM4/16/12
to
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
---------------------------------------------------------------


Jacquouille

unread,
Apr 16, 2012, 10:53:57 AM4/16/12
to
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$1...@speranza.aioe.org...

MichD

unread,
Apr 16, 2012, 2:34:11 PM4/16/12
to
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
---------------------------------------------------------------


Guido

unread,
Apr 16, 2012, 6:46:57 PM4/16/12
to
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 question.
Bravo et je t'en remercie.

J'ai testé la formule et il se trouve un point non fonctionnel et il ne concerne 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 stoppe 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

MichD

unread,
Apr 16, 2012, 9:03:27 PM4/16/12
to
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)>=30;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
---------------------------------------------------------------



MichD

unread,
Apr 16, 2012, 9:36:27 PM4/16/12
to
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)>=30;
30;DAY(A1)-1);30))+MIN(IF(DAY(B1)>29;30;DAY(B1)+1);30))))

--
MichD
---------------------------------------------------------------


Jacquouille

unread,
Apr 17, 2012, 4:14:57 AM4/17/12
to
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$1...@speranza.aioe.org...

MichD

unread,
Apr 17, 2012, 8:41:05 AM4/17/12
to
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)>=30;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
---------------------------------------------------------------



isabelle

unread,
Apr 17, 2012, 9:04:02 AM4/17/12
to
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)>=30;30;JOUR(A1)-1);30))+MIN(SI(JOUR(B1)>29;30;JOUR(B1)+1);30)))

--
isabelle

MichD

unread,
Apr 17, 2012, 9:18:28 AM4/17/12
to
Merci Isabelle.

--
MichD
---------------------------------------------------------------

Jacquouille

unread,
Apr 17, 2012, 9:21:43 AM4/17/12
to
j'aime ton analyse: c'est imbuvable, mais si le sirop fait son effet
.....buvons-en un coup. -))
Perso, je vais m'en tenir à cela et passer à un autre message.
A bientôt et merci
PS : Coucou Isa la belle


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
jmjod2$iui$1...@speranza.aioe.org...

Guido

unread,
Apr 18, 2012, 5:07:30 PM4/18/12
to
Bonsoir à vous tous

Désolé pour mon retard concernant le retour et feedback des dernières formules.

http://cjoint.com/?3Dsw5ee5QLy

Je vous transmets un lien (valide 4 jours) afin de vous présenter mes tests et les calculs en fonction de ce qu'il devrait ressortir selon chaque périodes.

Vous remarquerez que les écarts de calculs se produisent généralement en rapport avec le mois de février.

Il est également très rare que je doive effectuer un calcul d'écart qui devra dépasser 180 jours, mais le chevauchement de deux années se fait couramment.

Vous remarquerez qu'il y a quelques petits trolls dans les calculs (ex: -24).
Et je n'ai pas abuser de Cervoise tiède Maître Jacquouile.

Grand merci MichD

MichD

unread,
Apr 18, 2012, 6:55:45 PM4/18/12
to
Retour de ton fichier : http://cjoint.com/?BDta20o6KG8

Regarde dans le bas de celui-ci, j'y ai fait mes remarques.



--
MichD
---------------------------------------------------------------

Guido

unread,
Apr 19, 2012, 7:55:26 AM4/19/12
to
MichD

Je te présente mon Big Méaculpa pour la ligne 27. Désolé pour cette erreur.

Suite à ton message, j'ai revu mes explications et tu trouveras des minis explicatifs de comment je calcule ces différences.

http://cjoint.com/?3DtnWWPiOFZ

Je suis vraiment navré que mes explicatifs n'étaient pas si clair. Je pensais que ce calcul était simple. Et réitère ma demande d'excuses.

Je m'étais trompés de doigts lors de ce calcul. ;-0)))

Pourrais-tu jeter un œil sur la *Version 3 ? J'y ai également placé des explicatifs.

Jacquouille

unread,
Apr 19, 2012, 8:47:06 AM4/19/12
to
Mon Bon Denis
Je suis conscient de l'état de surexcitation de tes neurones lorsque l'on
change les règles à tout bout de champs.
Mais, ce qui m'interpelle, c'est ta ligne 55 : --> mois de janvier 4
jours calcule le 1 et le 3 janvier ?????
En comptant les bornes .....
1er janvier = 1 j
2 janv = 2 j
3 janv = 3 j

Comment tu arrives à 4 ?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
jmngpm$hmb$1...@speranza.aioe.org...

Jacquouille

unread,
Apr 19, 2012, 8:50:56 AM4/19/12
to
Allah ligne 54, décembre est compté pour 31 jours ......
In fine , ta base de réflexion est pire que celle des Romains d'il y a 2000
ans..... -((
Je fais comme Denis, je cède la place.
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Guido" a écrit dans le message de groupe de discussion :
9546761.26.1334836526144.JavaMail.geo-discussion-forums@ynje10...

isabelle

unread,
Apr 19, 2012, 9:44:08 AM4/19/12
to
bonjour Guido,

qu'est ce qui détermine que des fois tu comptes le premier jour et des fois tu ne le comptes pas

exemple:

ici le premier jour est compté

2010-05-15 2010-11-19
Mois de mai : 17 jours calcule le 15 et le 31 mai dans le décompte ---> OK


ici le premier jour n'est pas compté
2010-01-01 2010-02-03

Mois de janvier : 30 jours calcule le 1 et le 31 janvier (soit total 30 jours) ---> ??? (31)



Function DateDifCommercial(a As Range, b As Range) As Integer
NbMois = DateDiff("m", [a], [b])
ja = Day(DateSerial(Year([a]), Month([a]) + 1, 1) - 1) - Day([a]) + 1
jb = Day([b])

If NbMois > 2 Then
For i = 1 To x - 1
If m1 = Month([a]) + i = 2 Then
fm = Evaluate("Day(FIN.MOIS(" & DateSerial(Year([a]), Month([a]) + i, 1) & ", 0))")
w = w + fm
Else
w = w + 30
End If
Next
w = w + ja + jb
ElseIf Month([a]) = Month([b]) Then
w = Day([b]) - Day([a]) + 1
Else
w = ja + jb
End If

DateDifCommercial = w
End Function


--
isabelle

isabelle

unread,
Apr 19, 2012, 9:54:40 AM4/19/12
to
correction,

Function DateDifCommercial(a As Range, b As Range) As Integer
NbMois = DateDiff("m", [a], [b])
ja = Day(DateSerial(Year([a]), Month([a]) + 1, 1) - 1) - Day([a]) + 1
jb = Day([b])

If NbMois > 1 Then
For i = 1 To NbMois - 1

isabelle

unread,
Apr 19, 2012, 10:30:47 AM4/19/12
to
jamais 2 sans 3,

Function DateDifCommercial(a As Range, b As Range) As Integer
NbMois = DateDiff("m", [a], [b])
ja = Day(DateSerial(Year([a]), Month([a]) + 1, 1) - 1) - Day([a]) + 1
jb = Day([b])

If NbMois > 1 Then
For i = 1 To NbMois - 1
If Month(DateSerial(Year([a]), Month([a]) + i, 1)) = 2 Then
fm = Day(DateSerial(Year([a]), Month([a]) + i + 1, 1) - 1)

Guido

unread,
Apr 19, 2012, 1:17:10 PM4/19/12
to
Bonsoir à vous tous,

comme énoncé dans la feuille de calcul, je me rends maintenant compte que mes explicatifs du début ont été très contraignantes. Milles excuses. Travaillant avec cette méthode de calcul tous les jours, je pensais que c'était simple pour tout le monde.

Pour répondre à Isabelle,

- il ne m'est pas permis de compter un mois complet de plus de 30 jours.

- les mois entamés doivent obligatoirement comptabiliser le nombre de jours entre le premier jour de présence et le dernier jours du même mois entamé. De même pour le mois de fin de présence, du premier jour du mois au dernier jour du mois entamé (ce qui implique une complication puisque les mois entamés utilisent leurs nombres de jours exactes).

Alors, j'essaie de résumé la méthode de calcul comme ceci:

- le nombre de jour sur un mois complet est dénombré sur 30 jours
- l’exception à cette règle est le mois de février qui doit obligatoirement se calculer sur le nombre exact de jour dans son mois en fonction de l'année (28/29).

- Ce qui implique, les mois complets sont comptabilisé sur un nombre de jours maximum de 30, sauf février.

Concernant les mois entamés (même si c'est du 02 au 31)

- les mois entamés, comme montré dans la feuille de calcul, sont comptés mensuellement avec leurs jours exactes de présence. Je prendrai exemple sur le calcul de la date de la fameuse ligne 54 (pour faire plaisir à Jacquouille.

25.12.2011 - 03.01.2012 = 10 jours, pourqoi ....

parce que ...
- Mois de décembre = 7 jours de présence calculé du 25 au 31 décembre
- Mois de janvier = 3 jours de présence calculé du 1 au 3 janvier
(et la je présente à nouveau mon Mea Culpa à Denis pour mon erreur qui lui a attribué quelques cheveux blancs)

Pour l'exemple suivant :

19.11.2011 - 03.03.2012 = 104, pourquoi...

Mois de novembre = 12 jours de présence calculé du 19 au 30 novembre
Mois de mars = 3 jours de présence calculé du 1 au 3 février
Mois complet de février = 29 jours de présence (car comptabilisé 29 jours en 2012)
Mois complets entre les 2 dates = 60 jours de présences (2x30 jours max.) pour décembre et janvier.

Voici comment je dois calculer les présences...

Je suis désolé Isabelle, les macros au boulot sont purement interdite et la procédure pour en faire accepter une est super *%&")%&+@#$ grrrr . D'où mon intérêt pour les formules. Merci tout de même. Je la prendrai pour mon usage personnel se qui me permettra (si j'arrive) à entamer ma formation un peu plus poussée que ce que je connais en VBA.

Bonne soirée à vous tous

isabelle

unread,
Apr 19, 2012, 2:11:23 PM4/19/12
to
voil� pour ton usage perso, j'ai fais la derni�re correction selon les derni�res explications,

Function DateDifCommercial(a As Range, b As Range) As Integer
NbMois = DateDiff("m", [a], [b])
If Day([a]) = 1 Then
If Month([a]) <> 2 Then
ja = 30
Else
ja = Day(DateSerial(Year([a]), Month([a]) + 1, 1) - 1)
End If
Else
ja = Day(DateSerial(Year([a]), Month([a]) + 1, 1) - 1) - Day([a]) + 1
End If

If Day([b]) = 31 Then jb = 30 Else jb = Day([b])

If NbMois > 1 Then
For i = 1 To NbMois - 1
If Month(DateSerial(Year([a]), Month([a]) + i, 1)) = 2 Then
fm = Day(DateSerial(Year([a]), Month([a]) + i + 1, 1) - 1)
w = w + fm
Else
w = w + 30
End If
Next
w = w + ja + jb

ElseIf Month([a]) = Month([b]) Then
w = Day([b]) - Day([a]) + 1
Else
w = ja + jb
End If

DateDifCommercial = w
End Function

--
isabelle



Le 2012-04-19 13:17, Guido a �crit :

>
> Je suis d�sol� Isabelle, les macros au boulot sont purement interdite et la proc�dure

pour en faire accepter une est super *%&")%&+@#$ grrrr . D'o� mon int�r�t pour les formules.

Merci tout de m�me. Je la prendrai pour mon usage personnel se qui me permettra (si j'arrive)

� entamer ma formation un peu plus pouss�e que ce que je connais en VBA.
>
> Bonne soir�e � vous tous

MichD

unread,
Apr 20, 2012, 6:36:33 PM4/20/12
to
Ça devrait aller pour les durée de moins d'un an.

Reste à traduire le nom des fonction en français.

=IF(MONTH(A1)=MONTH(B1);DATEDIF(A1;B1;"d")+1;
((ABS(MONTH(B1)-MONTH(A1))-1)*30)+MIN(DAY(B1);30)
+IF(MIN(DAY(EOMONTH(A1;0));30;30)-DAY(A1)<=0;
MIN(DAY(EOMONTH(A1;0));30;30);30-DAY(A1)+1))-
IF((((N(AND(MONTH(A1)<2;MONTH(B1)>2))+N(AND(MONTH(A1)>2;
MONTH(B1)<2))))>0)*1=1;30-DAY(DATE(YEAR(B1);3;0));0)


--
MichD
---------------------------------------------------------------


Guido

unread,
Apr 21, 2012, 11:43:15 AM4/21/12
to
Bonjour Denis

merci pour ta formule. Je l'ai traduite ainsi :
=SI(MOIS(A26)=MOIS(B26);DATEDIF(A26;B26;"d")+1;((ABS(MOIS(B26)-MOIS(A26))-1)*30)+MIN(JOUR(B26);30)+SI(MIN(JOUR(FIN.MOIS(A26;0));30;30)-JOUR(A26)<=0;MIN(JOUR(FIN.MOIS(A26;0));30;30);30-JOUR(A26)+1))-SI((((N(ET(MOIS(A26)<2;MOIS(B26)>2))+N(ET(MOIS(A26)>2;MOIS(B26)<2))))>0)*1=1;30-JOUR(DATE(ANNEE(B26);3;0));0)

Etant donné que le passage entre une année et l'année +1 n'est pas pris en compte, j'ai vérifié la formule avec le tableau initial en testant également d'autres dates.

(calcul avec un intervalle comprenant deux mois complets (1x30 jours et 1x 31 jours (calculé sur 30 jours) + jours isolés)
04.05.2010 - 02.08.2010 (28+60+2)= 90 au lieu de 89

(calcul dès la fin d'un mois débutant le dernier jours du mois (d'un mois de 31 jours) sans intervalle de mois complet)
31.03.2010 - 05.04.2010 (1+5)= 6 au lieu de 35

(calcul avec un intervalle comprenant un mois complets (1x 30 jours + 1x 31 jours (calculé sur 30 jours) + jours isolés) et se terminant sur la fin d'un mois complet de 30 jours)
07.07.2010 - 30.09.2010 (25+30+30)= 85 au lieu de 84

(calcul avec un intervalle comprenant deux mois complets ( 2x 31 jours (calculés sur 30 jours) + jours isolés)
01.07.2010 - 31.08.2010 = 60 (résultat OK)

02.07.2010 - 31.08.2010 = 60 au lieu de 59


Guido

Jacquouille

unread,
Apr 21, 2012, 1:23:52 PM4/21/12
to
(calcul dès la fin d'un mois débutant le dernier jours du mois (d'un mois de
31 jours) sans intervalle de mois complet)
31.03.2010 - 05.04.2010 (1+5)= 6 au lieu de 35

??????????

Qui c'est kadi 35 ?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Guido" a écrit dans le message de groupe de discussion :
31355776.27.1335022995762.JavaMail.geo-discussion-forums@vbki8...

Bonjour Denis

Guido

unread,
Apr 21, 2012, 5:45:09 PM4/21/12
to
Bonsoir Jacquouille

La dernière formule de Denis me donne ce curieux résultat.

En voici d'autres, et se sont des tests en fonction de la 1ere borne qui débute en fin de mois (le 30 ou 31).

30.04.2010 - 05.05.2010 = 35 au lieu de 6
31.05.2010 - 05.06.2010 = 35 au lieu de 6
31.07.2010 - 08.08.2010 = 38 au lieu de 9

> Qui c'est kadi 35 ?

et bien c'est la formule_6 de Denis qui me propose ces solutions....

A ce jour, la meilleure formule de Denis reste celle-ci dessous.
=SI(MOIS(A1)=MOIS(B1);DATEDIF(A1;B1;"d")+1;(ABS(MOIS(B1)-MOIS(A1)-1)*30+(30-MIN(SI(JOUR(A1)>=30;30;JOUR(A1)-1);30))+MIN(SI(JOUR(B1)>29;30;JOUR(B1)+1);30)))

Mais n'a pas l'avantage de calculer une borne à l'autre sur deux ans, comme par exemple :

28.12.2011 au 05.02.2012 = 339 au lieu de 39

Bonne soirée à vous

Guido

MichD

unread,
Apr 22, 2012, 10:45:20 AM4/22/12
to
Regarde ce fichier exemple : http://cjoint.com/?BDwqQhBOWp7

La formule est matricielle : Maj + Ctrl + Enter

A3 Date de départ de période
B3 Date de fin de période

=IF(DATEDIF(A3;B3;"M")=0;MIN(DATEDIF(A3;B3;"d")+1;30);DATEDIF(A3;B3;"M")*30
-((ROUND(((SUM(IF(DAY(EOMONTH(ROW(INDIRECT(A3&":"&B3));0))=28;1))/28)*2)
+((SUM(IF(DAY(EOMONTH(ROW(INDIRECT(A3&":"&B3));0))=29;1))/29)*1);0)))
+MIN(IF(DAY(A3)=DAY(EOMONTH(A3;0));1;30-DAY(A3)+1);30)+MIN(DAY(B3);30)-30)
+IF(MIN(30-DAY(A3)+1;30)+MIN(DAY(B3);30)-30<=0;30;0)

--
MichD
---------------------------------------------------------------


Jacquouille

unread,
Apr 22, 2012, 11:56:30 AM4/22/12
to
Bonjour
Si la période s'étale sur trois années, tu comptes l'année complète (celle
du milieu) pour 12 fois 30 jours, ou 11*30+28 ou 29 , 360,0361 365 ?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Guido" a écrit dans le message de groupe de discussion :
13418524.1672.1335044709676.JavaMail.geo-discussion-forums@vbq19...

Guido

unread,
Apr 22, 2012, 5:16:16 PM4/22/12
to
Bonsoir Jacquouille

Oui, comme tu le présentes.

11x 30jours et 1x 28jours (respct. 29jours)

Bonsoir MichD,

J'ai pris un certain temps pour visualiser la formule dans le tableau et je constate que le calcul des jours à la main comporte quelques erreurs.

Voici le tableau en retour : http://cjoint.com/?3DwxkpQRPHW

Je me reviens à mon explicatif que j'ai fait le 19 avril suite à la question d'Isabelle et par laquelle, je me suis rendu compte de ma grosse bourde, à savoir... ne pas avoir bien expliqué le fonctionnement du calcul.

... Concernant les mois entamés
(Même si le mois est entamé sur une période du 02 au 31)
Ils sont comptés mensuellement avec leurs jours exacts de présences. Le 31ème jour est donc à comptabiliser du fait qu'il y a 1 jour de présence effectué.

Bonsoir Isabelle,

Cette formule =DateDifCommercial(A1;B1) fonctionne à merveille. Sauf, pour les mois isolés de 31 jours (ex : 01.01.2011 au 31.01.2011). Son résultat devrait également donner 30 jours.

Elle calcule superbement le passage à l'année sur un nombre restreint de moins de 30 jours comme par exemple (31.12.2010 - 05.01.2011 = 6)

Par contre, je n’ai pas réussi à la reproduire une nouvelle feuille. Serais-ce qu’il me faut activer certains outils supplémentaires (comme outil d’analyse ou autres … ?)

Bonne soirée à vous tous

Guido

isabelle

unread,
Apr 22, 2012, 6:19:53 PM4/22/12
to
salutatous,

j'ai testé cette usine à gaz et surprise ça fonctionne


=SI(ET((B7-A7<31);(ANNEE(A7)=ANNEE(B7)));(B7-A7+1);SI(ET(((TEXTE((ANNEE(B7)&TEXTE(MOIS(B7);"00"));0)*1)
-(TEXTE((ANNEE(A7)&TEXTE(MOIS(A7);"00"));0)*1))<>90;DATEDIF(A7;B7;"m")<=1);(SI(ET(OU(K7;L7);J7);28;SI(JOUR(FIN.MOIS(A7;0))
-JOUR(A7)+1=31;30;JOUR(FIN.MOIS(A7;0))-JOUR(A7)+1)))+(SI(JOUR(B7)>30;30;JOUR(B7)));(SI(ET(OU(K7;L7);J7);28;SI(JOUR(FIN.MOIS(A7;0))
-JOUR(A7)+1=31;30;JOUR(FIN.MOIS(A7;0))-JOUR(A7)+1)))+
((SOMMEPROD(1*(JOUR(LIGNE(INDIRECT(DATE(ANNEE($A7);MOIS($A7)+1;1)&":"&DATE(ANNEE(B7);MOIS(B7)-1;30))))=30))*30)+
SOMMEPROD((MOIS(LIGNE(INDIRECT(DATE(ANNEE($A7);MOIS($A7)+1;1)&":"&DATE(ANNEE(B7);MOIS(B7);1)-1)))=2)*
(JOUR(LIGNE(INDIRECT(DATE(ANNEE($A7);MOIS($A7)+1;1)&":"&DATE(ANNEE(B7);MOIS(B7);1)-1)))=29))*29)+(SI(JOUR(B7)>30;30;JOUR(B7)))))


l'assemblage est dans le fichier sous ce lien : http://cjoint.com/?BDxatgXCPBR



--
isabelle

MichD

unread,
Apr 22, 2012, 11:45:33 PM4/22/12
to
| je constate que le calcul des jours à la main comporte quelques erreurs

***Ce ne sont pas des erreurs. La formule calcule ce que je lui ai demandé. Elle ne tient
pas compte du 31 puisque ta demande originale l'exigeait.

P.S. Il n'y aura pas d'autre version de la formule.


--
MichD
---------------------------------------------------------------



MichD

unread,
Apr 23, 2012, 12:08:01 AM4/23/12
to
La formule aurait dû être ceci... pour corriger l'erreur du 36 au lieu de 6
C'est une erreur de transcription de formule vers le tableau final.

Elle ne tient toujours pas compte du 31.

=IF(DATEDIF(A3;B3;"M")=0;MIN(DATEDIF(A3;B3;"d")+1;30);DATEDIF(A3;B3;"M")*30
+(IF(MIN(30-DAY(A3)+1;30)+MIN(DAY(B3);30)-30<=0;30;0))
-((ROUND(((SUM(IF(DAY(EOMONTH(ROW(INDIRECT(A3&":"&B3));0))=28;1))/28)*2)
+((SUM(IF(DAY(EOMONTH(ROW(INDIRECT(A3&":"&B3));0))=29;1))/29)*1);0)))
+MIN(IF(DAY(A3)=DAY(EOMONTH(A3;0));1;30-DAY(A3)+1);30)+MIN(DAY(B3);30)-30)


--
MichD
---------------------------------------------------------------

Jacquouille

unread,
Apr 23, 2012, 7:42:13 AM4/23/12
to
"Guido" a écrit dans le message de groupe de discussion :
31708413.1986.1335129376256.JavaMail.geo-discussion-forums@vbki8...
..... Bonsoir Isabelle,

Cette formule =DateDifCommercial(A1;B1) fonctionne à merveille. Sauf, pour
les mois isolés de 31 jours (ex : 01.01.2011 au 31.01.2011). Son résultat
devrait également donner 30 jours.

Guido

Ah bon, on ne compte plus les bornes ? D'après tout ce que j'ai lu ici,
cela devrait faire 31 jours, non ?

isabelle

unread,
Apr 23, 2012, 9:07:20 AM4/23/12
to
salut Jacquouille,

oui on compte les bornes mais il faut arrêter de compter si on dépasse 30 jours
exemple,
2011-12-01 2010-02-03

30 + 30 + 3 = 63

--
isabelle

Jacquouille

unread,
Apr 23, 2012, 11:39:38 AM4/23/12
to
Bonjour Belle Isa

Tu comptes comme tu veux, mais dans l'exemple donné, il s'agit de deux mois
qui se suivent (copié-collé : 01.01.2011 au 31.01.2011)
Ensuite, dans ton exemple, du 1er DEC 2011 au 3 FEV 2010, pour moi, il y a
plus que 1,5 ans... à moins qu'il ne s'agisse d'un lapsus claviae et qu'il
faille lire ....jusqu'au 3 FEV 2012 ?
Dans ce cas, nous serions d'accord.
-)))


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"isabelle" a écrit dans le message de groupe de discussion :
jn3k61$o6n$2...@speranza.aioe.org...

isabelle

unread,
Apr 23, 2012, 12:20:16 PM4/23/12
to
oups désolé mon beau Jacquouille,
mes doigts sont fourchés

exemple,
2011-12-01 2012-02-03

30 + 30 + 3 = 63

2011-01-01 2011-01-31

on compte 30 jours

--
isabelle

Guido

unread,
Apr 25, 2012, 7:15:55 AM4/25/12
to
Bonjour à vous tous,

Isabelle et Denis, merci pour votre aide concernant cette demande spécifique. C'est un super boulot. Je sais que ce n'est pas une façon simple de calculer les jours, d'où ma demande.

Isabelle, J'ai juste vu que les périodes mensuelles de 31 jours (du 01. au 31.) sont comptabilisé sur 31 jours et non sur 30 jours.

Merci encore.

Guido

isabelle

unread,
Apr 25, 2012, 8:59:07 AM4/25/12
to
bonjour Guido,

pourtant les résultats de ma formule sont les même que ceux que tu a calculés à la main (colonne C)

--
isabelle

MichD

unread,
Apr 25, 2012, 9:35:16 AM4/25/12
to
Bonjour Isabelle,

La dernière formule que j'ai publiée utilise des mois de 30 jours sauf pour le mois de
février.
Selon le demandeur, ce n'est pas ce qu'il désire...

À toi, il énonce le contraire! Les exemples qu'il a fournis ne concordent pas avec sa
demande!

Bonne chance dans tes cogitations! ;-))

Je lui avais donné l'exemple suivant :

'------------------------------------------------------------------------------------
Méthode d'évaluation manuelle : Ligne 16 du tableau

Début Fin
04/05/10 02/08/10

Nombre de jours dans le mois de mai : = 30 - 4 + 1 = 27 jours
Nombre de jours dans le mois d'août : = 2 jours
Nombre de mois complet entre les 2 dates : 2 mois * 30 jours = 60 jours

Somme total du nombre de jours entre les 2 dates : 27 + 2 + 60 = 89 Jours
et non 90 comme tu le suggères.
'------------------------------------------------------------------------------------


MichD
---------------------------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion :
jn8sep$a3e$2...@speranza.aioe.org...

Jacquouille

unread,
Apr 25, 2012, 10:11:44 AM4/25/12
to
A Denis et Isabelle

O ironie du sort... de mon temps, on calculait à la main et on se servait
d'une machine pour contrôler le résultat.
Aujourd'hui, les demandes sont tellement complexes, que on recalcule à la
main pour contrôler Excel .....
Etant très basique et très primaire, j'ai toujours calculé de la manière
suivante ....
Quelle est la différence entre 1,50 mètre et 1 mètre? réponse:50 cm soit
1.5-1=0.5 mètre.
A partir de ce concept mathématique très simple, quand on me demande la
différence entre le 3 mars et le 1 mars, je réponds :3-1=2.
Pourquoi, dès lors, vouloir compter ce que l'on appelle les bornes? Dès
lors, on en arrivera, suivant les demandeurs, à avoir 3-1= 1 si je compte
uniquement ce qu'il y a entre les deux bornes, ou bien une soustraction
normale (3-1=2) ou bien, 3-1=3 si je compte les bornes .....
Je me résume: 3-1 = 1 ou bien 2, ou bien 3 .......
C'est ce que l'on appelle une question à choix multiples, où toutes les
réponses sont bonnes.
De là, j'extrapole et j'en arrive à la psycho ..... où tout le monde a
raison. -((
ô MVP, ô répondeurs et deuses, combien je vous plains.
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
jn8uj1$j2v$1...@speranza.aioe.org...

isabelle

unread,
Apr 25, 2012, 10:16:51 AM4/25/12
to
salut Denis,

c'est parce ce que je compte 28 jours pour le mois de mai,
selon les dernieres explications de Guido !

1 2010-05-04
2 2010-05-05
3 2010-05-06
4 2010-05-07
5 2010-05-08
6 2010-05-09
7 2010-05-10
8 2010-05-11
9 2010-05-12
10 2010-05-13
11 2010-05-14
12 2010-05-15
13 2010-05-16
14 2010-05-17
15 2010-05-18
16 2010-05-19
17 2010-05-20
18 2010-05-21
19 2010-05-22
20 2010-05-23
21 2010-05-24
22 2010-05-25
23 2010-05-26
24 2010-05-27
25 2010-05-28
26 2010-05-29
27 2010-05-30
28 2010-05-31


--
isabelle

isabelle

unread,
Apr 25, 2012, 10:22:52 AM4/25/12
to
ps/

ne compter pas plus de 30 jours pour les mois complets
sinon compter de la borne inférieur à la borne supérieur en incluant celle-ci

--
isabelle

Gloops

unread,
Apr 25, 2012, 10:39:18 AM4/25/12
to
MichD a écrit, le 25/04/2012 15:35 :
> Bonjour Isabelle,
>
> La dernière formule que j'ai publiée utilise des mois de 30 jours sauf pour le mois de
> février.
> Selon le demandeur, ce n'est pas ce qu'il désire...
>
> À toi, il énonce le contraire! Les exemples qu'il a fournis ne concordent pas avec sa
> demande!
>
> Bonne chance dans tes cogitations! ;-))
>

Bonjour,

Je verrais bien :
1. Analyse
2. Rédaction des spécifications de développement
3. Validation de la demande
4. Développement
5. Recette

Pas par goût de la provoc, mais parce que si le 31ème jour d'un mois
doit être comptabilisé ou non, si on inclut les week-ends, les jours
fériés, c'est dans la phase 1, que ça doit se dire. Pas dans la 5.

On en est à un mois demain avec les meilleurs du newsgroup pour calculer
un écart de dates. ça doit bien signifier un malaise quelconque dans la
démarche ?

Je ne devrais pas pousser la mauvaise foi si loin, ça fait dix jours que
MichD est intervenu. Mais au bout de dix jours, c'est dommage de ne pas
être d'accord sur ce qui doit être fait. Et sortir les formules Excel
avant d'être d'accord sur ce qui doit être fait, à mon humble avis, ce
n'est un service à rendre à personne.

J'ai vu jouer ça en milieu professionnel, non pas qu'on ait dit que le
résultat est faux, mais on a attendu que le produit soit fini pour dire
qu'on avait besoin aussi d'autre chose en plus, et du coup le processus
de validation prend encore du temps. Le commercial m'a dit, ah ben c'est
de ta faute, tu n'as pas fait signer de specs ...
Et de fait, à bien y réfléchir ...

Enfin il faut dire que gagner sa croûte en travaillant par petits bouts,
comme ça, je n'avais pas vu jouer ailleurs, encore. Pour simplifier je
vais m'abstenir de mêler la politique à ça. Beaucoup de choses ont été
dites, et pas toutes fausses.

Quand on prend un taxi, si on indique une direction un peu vague, le
trajet risque d'être tarabiscoté. Surtout si on dit qu'on ne veut pas
prendre le périph, que finalement si à cet endroit-là il faut bien, et
puis qu'un peu plus loin ah non cet immeuble-là on ne le sent pas ...
Dans ce genre de trajet, il y a un truc que le client n'aime pas, en
général, c'est la note à payer.

Gloops

unread,
Apr 25, 2012, 10:49:15 AM4/25/12
to
Jacquouille a écrit, le 25/04/2012 16:11 :
> Pourquoi, dès lors, vouloir compter ce que l'on appelle les bornes? Dès
> lors, on en arrivera, suivant les demandeurs, à avoir 3-1= 1 si je
> compte uniquement ce qu'il y a entre les deux bornes, ou bien une
> soustraction normale (3-1=2) ou bien, 3-1=3 si je compte les bornes .....

Ah, oui les problèmes d'intervalles ... ça ne nous rajeunit pas, ça, pas
vrai ? ça nous ramène ... eh bien à la primaire, comme tu le remarques,
en même temps que les problèmes de robinets (avec lesquels sont
brouillés les gens qui ont fait l'école buissonnière, ce jour-là), qui
ressemblent bien aux questions sur l'heure où deux trains vont se
rencontrer ...

Quand je pense au nombre de gens qui maugréent sur les problèmes de
robinets, je me demande si à l'école on ne devrait pas en faire un peu
plus, qui à ne répéter que quatre ou cinq fois les grandes inventions
(mais ça ... ça a dû évoluer).


Gloops

unread,
Apr 25, 2012, 10:51:09 AM4/25/12
to
Gloops a écrit, le 25/04/2012 16:49 :
> qui à ne répéter que quatre ou cinq fois les grandes inventions (mais ça
> ... ça a dû évoluer).

Oups, quelquefois il reste une lettre, dans les fils.
Mais là, trois d'un coup, dites donc.

Alors je voulais dire "quitte à ne répéter" ...

MichD

unread,
Apr 25, 2012, 11:09:39 AM4/25/12
to


| ne compter pas plus de 30 jours pour les mois complets
| sinon compter de la borne inférieur à la borne supérieur en incluant celle-ci

.... Et c'est sans compter que si la date de départ est le 31 d'un mois de 31 jours,
on doit compter 1 pour ce jour qui devrait avoir 30 jours...

M'enfin, c'est ce que je pense avoir compris...!

isabelle

unread,
Apr 25, 2012, 11:41:46 AM4/25/12
to
salut Denis,

pour ce cas j'avais compris que c'est un mois incomplet donc
du 31 au 31 si on compte les 2 bornes ça donne 2
mais je comprend en sous entendu qu'on ne compte pas de doublon.
j'en conclue que sans une bonne description d'un problème tout le monde y va avec sa compréhension.
c'est malheureux pour le demandeur si toute fois celui-ci désirait vraiment avoir une solution,
pour ma part je me suis bien amusé ;-)

--
isabelle

MichD

unread,
Apr 25, 2012, 1:50:37 PM4/25/12
to
| si toute fois celui-ci désirait vraiment avoir une solution,
| pour ma part je me suis bien amusé ;-)

Bien, si la dernière description est la bonne, il a une solution, la dernière fonction que
j'ai publiée (pas celle du fichier, mais celle qui a suivi puisque dans le fichier,
j'avais fait une erreur de transcription. Il ne lui reste plus qu'à la traduire en
français.

Et je me suis également bien amusé!
;-))

MichD
---------------------------------------------------------------

Guido

unread,
Apr 25, 2012, 5:02:12 PM4/25/12
to
Bonsoir à vous tous,

Quitte à me répéter, je suis profondément désolé que ma question provoque un aussi grand sujet de discussion.

Effectivement, dès le début, je me suis mal exprimé et j'ai essayé de rectifier le tir avec mes messages dont celui du 19 avril en ayant intégré le tableau en retour avec les modifications et explications (qui encore une fois, n'ont pas été à la hauteur). J'y avais tenté de réexpliquer la méthode de calcul.

Je vous prie donc, d'excuser ce manque de clairvoyance dans ma tentative d'explication d'une manière mathématique peu conventionelle (où les jours fériés n'entrent pas en matière très cher Jacquouille).

Denis, la dernière formule, je l'ai traduite et testé dans le dernier tableau qu'Isabelle à mis en ligne. Je ne pense pas qu'insérer la traduction de la formule ici soit pertinente, mais je me retrouve toujours avec les minis écarts (voici des exemples).
29.12.2011 - 29.01.2012 = ce décompte donne 32 (résultat de ta formule = 31)
29.12.2011 - 29.02.2012 = ce décompte donne 62 (résultat de ta formule = 60)
04.12.2011 - 03.01.2012 = ce décompte donne 31 (résultat de ta formule = 30)
04.05.2010 - 02.08.2010 = ce décompte donne 90 (résultat de ta formule = 89)


Ta meilleure formule (que j'utilise actuellement) et celle-ci (formule nommée MichD_4) :
=SI(MOIS(A7)=MOIS(B7);DATEDIF(A7;B7;"d")+1;(ABS(MOIS(B7)-MOIS(A7)-1)*30+(30-MIN(SI(JOUR(A7)>=30;30;JOUR(A7)-1);30))+MIN(SI(JOUR(B7)>29;30;JOUR(B7)+1);30)))

Elle me calcule juste les différents écarts de dates ci-dessous.

(Règle 1.)
Pour le calcul d'un mois complet (31 jours) : (si un mois est complet = 30 jours, sauf pour le mois de février)
01.01.2011 au 31.01.2011 = ce décompte donne 30 jours
01.04.2011 au 30.04.2011 = ce décompte donne 30 jours

(Règle 1bis.)
pour le calcul d'un mois complet (février): (calcul le nombre de jours exact)
01.02.2011 au 28.02.2011 = ce décompte donne 28 jours
01.02.2012 au 29.02.2012 = ce décompte donne 29 jours

(Règle 2.)
pour les décomptes de plusieurs mois complets (30 jours) : (si un mois est complet = 30 jours, sauf pour février)
01.03.2011 au 30.04.2011 = ce décompte donne 60 jours
01.07.2011 au 31.08.2011 = ce décompte donne 60 jours

des exemples supplémentaires ci-dessous sont des tests de faisabilité pour la formule.

(Règle 3.)
Elle me donne également le bon résultat :
04.05.2010 - 31.05.2010 = ce décompte donne 28
01.02.2010 - 27.02.2010 = ce décompte donne 27
04.05.2010 - 02.08.2010 = ce décompte donne 90
31.03.2010 - 05.04.2010 = ce décompte donne 6

Le soucis, est arrivé lors de la tentative d'intégration d'un calcul d'écart entre une année et l'année+1.

Comme par exemple :
01.12.2011 - 01.01.2012 = ce décompte donne 31

Les différentes formules m'ont donné les résultats erronés suivants pour ce calcul :
392 392 32 30


C'est là, qu'Isabelle a sorti une formule Excellente qui calcule sur l'année en cours et également sur l'écart que pourrait produire Année+Année+1 (ex: 2011-2012).

Le seul soucis pour que je puisse utiliser la formule au boulot, qui marche également à merveille, c'est qu'elle n'utilise pas la Règle 1, soit calculer un écart d'un mois complet (tout seul ou mois isolé = 01.01.2011-31.01.2011) uniquement sur 30 jours.

La formule initialement posée (voir mon message no 1) calculait correctement selon toutes les règles, sauf la règle 1bis (février = 28/29 jours max.). Elle me calcule le mois de février sur 30 jours. Ce qui m'obligeait à calculer différemment les écarts de périodes où le mois de février était compris.

A ce jour, la formule MichD_4 est utilisée au boulot et je splitte les calculs qui seraient à faire d'une année à une autre (2011-2012).

A vous tous chers MVP, qui avez tenté de me donner un coup de main, je vous remercie et comprendrai aisément qu'une solution ne puisse être trouvée.

Bonne soirée

Guido

MichD

unread,
Apr 26, 2012, 9:04:36 AM4/26/12
to
Une petite dernière pour la route :

Validation matricielle : Maj + Ctrl + Enter

Elle doit être près de ce que tu cherches ! ;-))
'-----------------------------
=IF(AND(YEAR(A3)=YEAR(B3);MONTH(A3)=MONTH(B3));MIN(30;DATEDIF(A3;B3;"d")+1);
DATEDIF(A3;B3;"M")*30+(IF(MIN(30-DAY(A3)+1;30)+MIN(DAY(B3);30)-30<=0;0;-30))
+MIN(IF(DAY(A3)=DAY(EOMONTH(A3;0));1;DAY(EOMONTH(A3;0))-DAY(A3)+1);30)
+IF(DAY(B3)=DAY(EOMONTH(B3;0));30;DAY(B3))
-((ROUND(((SUM(IF(DAY(EOMONTH(ROW(INDIRECT(A3&":"&B3));0))=28;1))/28)*2)
+((SUM(IF(DAY(EOMONTH(ROW(INDIRECT(A3&":"&B3));0))=29;1))/29)*1);0))))
'-----------------------------


MichD
---------------------------------------------------------------

Gloops

unread,
Apr 26, 2012, 10:27:24 AM4/26/12
to
isabelle a écrit, le 25/04/2012 17:41 :
> j'en conclue que sans une bonne description d'un problème tout le monde
> y va avec sa compréhension.

Tu comprends pourquoi, quand j'ai vu débarquer des formules, j'ai
abandonné :)

Ah, l'analyse, la sémantique, c'est lourd, c'est rarement marrant (à
moins d'avoir du talent pour, j'imagine). Mais, ça met tout le monde au
diapason sur ce qu'on cherche à faire.

Tu as déjà entendu une chorale avec six personnes en la, deux en la
dièse, trois en la bémol, une ou deux en sol, et une ou deux en si ?
Chacun sur son octave, parce que là-dessus quand même ne charrions pas.



Gloops

unread,
Apr 26, 2012, 10:43:31 AM4/26/12
to
Ah ben tu vois, je suis formé à la vieille école, où on commence par
former les gens à l'environnement de l'entreprise, à ses rouages
internes, à quelques notions de psychologie même si ça c'est un vaste
domaine, puis à des méthodes d'analyse pour savoir poser les bonnes
questions, avant de s'intéresser, pour avoir un exemple de mise en
œuvre, à quelques langages de programmation. Même si on se doute bien
que les langages qu'on apprend pendant la formation, ça serait un sacré
hasard que ça soit ceux qu'on mettra en pratique pendant sa carrière.

Ce n'est pas à rigoler que tout ça me prépare le mieux, mais parfois, ça
m'aide à savoir où je vais quand il s'agit d'automatiser un traitement.
C'est mieux de prendre un peu de temps pour une parenthèse artistique,
parfois. Sur un newsgroup Excel, il se peut que je tarde à déceler les
sujets qui s'y prêtent.

Voilà un peu le genre de considérations qui mène à penser que les bons
sites web (pour prendre un exemple), c'est à deux qu'ils se montent : un
technicien pas trop fermé au côté artistique, et un artiste pas trop
fermé au côté technique. Une fine alchimie pas toujours évidente.

C'est l'exemple qui m'est venu à l'esprit car je suis plongé (oh, en
fait, en cours d'immersion) là-dedans, mais je suis sûr qu'on peut en
trouver plein d'autres.
En matière de fichier Excel, il doit y avoir moyen de faire des jolies
choses, après il faut voir si c'est vers ce genre d'outil que se
tournent en priorité les gens dont c'est le premier but.


Guido

unread,
Apr 29, 2012, 4:42:01 PM4/29/12
to
Bonsoir Denis

tout d'abord merci pour ta formule.
Je te joins un fichier retour (modèle précédent d'Isabelle) ou les calculs sont effectués pour tester la formule.

La formule compte bien les périodes comprenant des situations avec février, ou des débuts de décomptes commençant par un jour de fin de mois.

Par contre, je me trouve avec genre d'erreur de calcul :
le calcul intervenant durant la période de février et de mars (avant et après) me compte une différence de 2 jours.

Voici le tableau: http://cjoint.com/?BDDwOIEhj19

A bientôt

Guido

MichD

unread,
Apr 30, 2012, 10:47:45 PM4/30/12
to
Bonjour,

Le fichier contient une formule pour tous les cas de figure que tu as énoncés.
http://cjoint.com/?BEbeR45UPHO

J'espère que le fichier contenait tous les cas possibles, car je n'ai pas l'intention
d'y consacrer plus de temps...! Je suis déjà à court actuellement !!!

La formule :
'-----------------------------------------
=IF(AND(YEAR(A7)=YEAR(B7);MONTH(A7)=MONTH(B7));MIN(30;DATEDIF(A7;B7;"d")+1);
DATEDIF(A7;B7;"M")*30+(IF(MIN(30-DAY(A7)+1;30)+MIN(DAY(B7);30)-30<=0;0;-30)+
IF(AND(MONTH(A7)=2;DAY(EOMONTH(A7;0))=28);2;0)+
IF(AND(MONTH(A7)=2;DAY(EOMONTH(A7;0))=29);1;0))+
IF(DAY(EOMONTH(A7;0))=29;IF(DAY(A7)>DAY(B7);-1;1);0)+
MIN(IF(DAY(A7)=DAY(EOMONTH(A7;0));1;DAY(EOMONTH(A7;0))-DAY(A7)+1);30)+
IF(DAY(B7)=DAY(EOMONTH(B7;0));30;DAY(B7))-
ROUND((((((SUM(IF(DAY(EOMONTH(ROW(INDIRECT(A7&":"&B7));0))=28;1))/28)*2)+
((SUM(IF(DAY(EOMONTH(ROW(INDIRECT(A7&":"&B7));0))=29;1))/29)*1))));0))
'-----------------------------------------


MichD
---------------------------------------------------------------

Guido

unread,
May 1, 2012, 2:20:30 PM5/1/12
to
Bonsoir Denis

je te remercie pour ce travail.

Cela mérite bien une Bi...re ou une Fée Verte de bien de chez nous.

Encore merci et à bientôt

Guido
0 new messages