DATEDIF avec "md", résultat faux

Bonjour

Nous utilisons tous la fonction DATEDIF(Date départ;Date fin;"md") qui renvoie le nombre de jours restants, une fois les mois retirés.

Pour quelques dates, le résultat renvoyé est erronné.

Sur l'onglet "Curieux" du fichier joint, vous trouverez plusieurs exemples de cette erreur.

Quelqu'un saurait-il comment contrer cette erreur ?

Cordialement

586datedif.zip (9.21 Ko)

Bonjour à tous

Juste pour remonter le sujet..

Cordialement

Bonjour Amadéus, forum,

Peut-être une piste (à vérifier)

Bonne journée

Claude.

édit: je préfère : en D5 D8 D11 et D14

=DATEDIF(A5;A6;"y")&" An(s) "&SI(DATEDIF(A5;A6;"md")<0;DATEDIF(A5;A6;"d")-366&" Jour(s)";SI(DATEDIF(A5;A6;"md")=0;DATEDIF(A5;A6;"ym")&" Mois ";DATEDIF(A5;A6;"ym")&" Mois "&DATEDIF(A5;A6;"md")&" Jour(s)"))

toujours à vérifier avec les bis...

édit2: c'est pas bon si écart > 1an, j'abandonne !

édit3: dernière tentative qui semble marcher ! (nouveau fichier Claude2)

167datedif-claude2.zip (21.95 Ko)

Bonjour,

Tout dépends bien sûr de ce que l'on entends par résultat juste ou faux.

En matière de date, avec des années n'ayant pas un nombre entier de jours et des mois de 28,29,30 ou 31 jours

chacun peut avoir sa notion de juste ou de faux.

N'étant pas satisfait moi-même du résultat de DATEDIF, j'ai créé une formule pour la remplacer mais avec OOo.Calc.

Voici le fichier avec une surprise à la fin, Excel refusant ma formule.

126test-datedif.zip (7.17 Ko)

re,

édit4: on y prendrait goût !

en D5 D8 D11 et D14

    =SI(DATEDIF(A5;A6;"m")>0;SI(DATEDIF(A5;A6;"y")>0;DATEDIF(A5;A6;"y")&" An(s) "&SI(DATEDIF(A5;A6;"md")<0;DATEDIF(A5;A6;"yd")&" Jour(s)";SI(DATEDIF(A5;A6;"md")=0;DATEDIF(A5;A6;"ym")&" Mois ";DATEDIF(A5;A6;"ym")&" Mois "&DATEDIF(A5;A6;"md")&" Jour(s)"));SI(DATEDIF(A5;A6;"md")<0;DATEDIF(A5;A6;"yd")&" Jour(s)";SI(DATEDIF(A5;A6;"md")=0;DATEDIF(A5;A6;"ym")&" Mois ";DATEDIF(A5;A6;"ym")&" Mois "&DATEDIF(A5;A6;"md")&" Jour(s)")));DATEDIF(A5;A6;"md")&" Jour(s)")

Claude.

94datedif-claude3.zip (23.67 Ko)

Bonjour

Merci de vous interesser au sujet.

OOoiste dans la formule refusée par Excel, tu as omis un guillemet anglais

=DATEDIF(A3;B3;"y")&"an(s) "&DATEDIF(A3;B3;"m")& "mois "&B3-MOIS.DECALER(A3;DATEDIF(A3;B3;"m"))&" jour(s)"

Cela dit, la formule renvoie

1an(s) 13mois 1 jour(s)

On continue.

Cordialement

Comme il me surlignait le "m", j'ai fixer la dessus sans regarder ailleurs, j'aurais du comprendre que cela venait d'un " manquant.

Concernant le résultat 1an(s) 13mois 1 jour(s) , j'ai également oublié le y dans le 2ème DATEDIF.

=DATEDIF(A3;B3;"y")&" an(s) "&DATEDIF(A3;B3;"ym")&" mois "&B3-MOIS.DECALER(A3;DATEDIF(A3;B3;"m"))&" jour(s)"

Si tu nous disais quel sont les résultats attendus comme juste ?

A+

Bonjour

OOoiste

Si tu nous disais quel sont les résultats attendus comme juste

a mon humble avis, le résultat attendu est largement sujet à interprétation et comme tu dis si justement:

En matière de date, avec des années n'ayant pas un nombre entier de jours et des mois de 28,29,30 ou 31 jours

chacun peut avoir sa notion de juste ou de faux

.

De toute façon "Grosoft" s'est visiblement planté avec DATEDIF "md".

Imaginons que cela concerne un calcul de salaire, c'est tout de même dommage d'obtenir un résultat a peu près juste.

Le bon résultat serait (pour moi) celui qui ferait concensus entre les adeptes d'Excel et serait un résultat exact.

Mais, peut-être est-ce impossible? J'en doute. Compliqué certainement.

Pour avancer, je propose à ceux qui sont intéressés d'aligner leurs résultats sur les colonnes suivantes de ce fichier et d'expliquer si besoin pourquoi, ils calculent ainsi.

Cordialement

87tests-dates.zip (6.53 Ko)

Bonsoir

Claude m'ayant fait part du sujet, voici ce que j'en pense après réflexion :

"md" ne donne que la différence entre les jours de date_début et date_fin (les années et les mois des dates sont ignorés) - cette méthode n'est donc pas valable en cas de chevauchement de mois et/ou d'années

Pour le calcul des jours, j'ajoute le nombre de jours de la date début au nombre de jour de la date fin :

=SI((FIN.MOIS(A2;0)-A2)+1=JOUR(FIN.MOIS(A2;0));0;(FIN.MOIS(A2;0)-A2)+1)+JOUR(A3)

Amicalement

Nad

Edit : Nouveau fichier pour contrôle

Nad-Dan a écrit :

"md" ne donne que la différence entre les jours de date_début et date_fin (les années et les mois des dates sont ignorés)

En effet, voici ce que dit microsoft à ce sujet :

capturer

Pour "md" les années et mois sont donc bien ignorés et non soustraits comme on peut parfois le lire ou mal l'interpréter.

18responsibility.xlsx (18.38 Ko)

Bonjour Nad

Dans la colonne B de la feuille Curieux, j'ai essayé, en regardant sur la feuille Calendrier de voir le résultat que nous devrions trouver. (selon moi)

Ta formule ajoute 1 jour à tous ces résultats.

Peux-tu regarder cette colonne B et me dire si nous sommes en accord sur son contenu.

Ex lignes 17 et 18 (du 27/02/08 au 01/03/2009)

Feuille Calendrier

  • Du 27/01/08 au 27/01/09 1 an
  • Il reste 4 jours sous le 27/01/09, la colonne Février en entier et le 1er Mars 2009 (1 an 1mois 5 jours)

(Pour info, MOIS.DECALER produit également la même anomalie)

Cordialement

Bonjour Amadeus,

Bon, ma tentative s'avère fausse.

Concernant ton exemple, je verrais plutôt :

du 27/01/08 au 01/03/2009

du 27/01/08 au 27/01/09 = effectivement 1 an

Mais je ne compterais pas les jours restant de janvier, puisqu'on a un mois plein du 27/01/09 au 27/02/09.

Donc du 27/01/08 au 27/02/09 = 13 mois, soit 1 an 1 mois

Maintenant j'ajouterais les jours restants, soit les 28/02/09 et le 1er mars 2009 = 2

Bon, comme dirait l'autre, "y'a plus qu'à trouver la bonne formule" ...

Amicalement

Nad

Bonjour Amadeus,

Amadéus a écrit :

Imaginons que cela concerne un calcul de salaire, c'est tout de même dommage d'obtenir un résultat a peu près juste.

Je ne vois pas comment cela peut concerner un salaire, car un salaire ne peut pas concerner deux années civiles différentes pour diverses raisons : le plafonde de la Sécurité Sociale s'applique à l'année civile, le taux d'accident du travail peut varier d'une année à l'autre, etc, sans oublier l'aspect fiscal qui impose de déclarer les revenus par rapport à l'année civile.

Le suel paramètre qui fait appel une durée plus longue est l'ancienneté pour le calcul de la prime d'ancienneté (calcul de date à date dans ce cas) ou en cas d'indemnité de licenciement (la différence ne serait pas significative compte tenu du calcul).

Bonjour à tous,

Bon ! avec tout çà, maintenant j'ai un doute pour ce fichier joint,

votre avis ?

PS: message à supprimer si mal placé ici.

Amicalement

Claude

Bonjour Claude

C'est vrai que cela va devenir "existentiel", du reste, je suis toujours en train de trafiquer pour rechercher une formule (compliquée) qui ferait Bingo!!

Dans ton exemple, reste à savoir si tu veux que ton calcul corresponde à la question

  • Nombre de mois plus un si plus de la moitié du mois entamé
  • Nombre de mois entiers

Ta formule ARRONDI( NB.Jours/30,4375 ;0) répond à la première hypothése

DATEDIF "m" ne renvoie que les mois entiers et occulte les jours restants

Cordialement

screen

Bonjour Amadéus,

Merci pour ta réponse, je reste donc avec l'arrondi,

c'était pour avancer le "Smilblic", excuse l'intrusion !

Bonne journée

Claude

Rechercher des sujets similaires à "datedif resultat faux"