Excel calcul de la différence entre deux dates (suite)

patrick1870 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   -  
Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

J'ai clôturé un peu tôt le sujet "excel calcul de la différence entre 2 dates" (https://forums.commentcamarche.net/forum/affich-37059123-excel-calcul-de-la-difference-entre-2-dates)
Je disais qu'après maints essais je n'avais pu reproduire la situation où DATEDIF(date_début;date_fin;"md") retournait un résultat erroné.

En continuant à explorer (car je suis têtu, j'avais constaté une erreur !), je suis retombé sur la situation en question il s'agit de cas où la date de début est antérieure au 1er mars 1900. Dans cette circonstance, même le nombre de mois donné par DATEDIF(date_début;date_fin;"ym") peut être faux.
Par exemple : date_début = 02/01/1900 et date_fin = 01/03/1900

la réponse est 1 mois et 28 jours : du 2 janvier au 2 février s'écoule 1 mois, du 2 février au 28 février s'écoulent 26 jours et du 28 février au 1er mars 1 jour soit 27 jours au total.

Configuration: Windows / Firefox 84.0

3 réponses

  1. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Bonjour.

    La fonction DATEDIF présente effectivement un certain nombre d'inexactitudes ; c'est bien pourquoi elle ne figure plus dans la liste des fonctions proposées dans Excel.


    Pour information, en voici un exemple :

    1
  2. patrick1870 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   17
     
    je m'aperçois que j'ai dû faire une mauvaise manipulation voici le texte intégral :

    Bonjour à tous,

    J'ai clôturé un peu tôt le sujet "excel calcul de la différence entre 2 dates" (https://forums.commentcamarche.net/forum/affich-37059123-excel-calcul-de-la-difference-entre-2-dates)
    Je disais qu'après maints essais je n'avais pu reproduire la situation où DATEDIF(date_début;date_fin;"md") retournait un résultat erroné.

    En continuant à explorer (car je suis têtu, j'avais constaté une erreur !), je suis retombé sur la situation en question. Il s'agit de cas où la date de début est antérieure au 1er mars 1900 et où le résultat peut être faux.

    Premier exemple : date_début = 02/01/1900 et date_fin = 01/03/1900
    la réponse est 1 mois et 28 jours
    En comptant sur mes doigts je trouve : du 2 janvier au 2 février s'écoule 1 mois, du 2 février au 28 février s'écoulent 26 jours et du 28 février au 1er mars 1 jour soit 27 jours au total.

    Deuxième exemple : date_début = 30/01/1900 et date_fin = 01/03/1900 la réponse est 1 mois moins 1 jour (- 1 jour) !

    Troisième exemple : date_début = 25/02/1900 et date_fin = 15/03/1900 la réponse est 19 jours
    Comptons : du 25 au 28 février = 3 jours + du 28 février au 1er mars = 1 jour + du 1er mars au 15 mars = 14 jours soit 18 jours au total

    J'ai tout d'abord pensé que c'était dû au fait que 1900 est considéré à tort par Excel comme une année bissextile.
    Mais si dans les exemples on met 2000 à la place de 1900, le résultat est le même.

    C'est peut-être la raison pour laquelle Microsoft ne recommande pas l'utilisation de la fonction DATEDIF avec le paramètre "md".

    Comment expliquer ces erreurs ? (j'ai une petite idée mais je dois vérifier)

    Merci d'avance pour vos commentaires.

    Patrick
    0
  3. patrick1870 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   17
     
    Merci abominafreutroce

    J'avais bien observé que 1900, sans me l'expliquer, était considéré à tort par excel comme une année bissextile.
    Je n'ignorais pas que 2000 était une année bissextile et que 2100 ne le sera pas.

    A force d'avoir le nez sur un problème on finit par perdre de vue l'essentiel ...
    Il est en effet normal que la réponse pour l'année 2000 soit la même que pour l'année 1900.
    Mais alors que c'est une anomalie, assumée par Excel, pour 1900 la réponse est normale pour l'année 2000 (ce qui a fini par m'échapper).

    Il reste la formulation curieuse de la réponse à mon 2° exemple avec la date_début 31/01/1900 (et non 30/1/1900 comme indiqué par erreur) où le nombre de jours retourné est -1 (moins 1)
    Lorsqu'on remplace 1900 par 2000, la fonction DATEDIF(31/01/2000;01/03/2000;"ym") et DATEDIF(31/01/2000;01/03/2000;"md") retourne 1 mois moins 1 jour
    et si on remplace 2000 par 2001, la fonction DATEDIF(31/01/2001;01/03/2001;"ym") et DATEDIF(31/01/2001;01/03/2001;"md") retourne 1 mois moins 2 jours
    alors que la réponse attendue dans les deux cas est 1 mois (le mois de février) plus 1 jour (le 1er mars)

    Ceci n'est qu'un exemple, et je me demande quelle est la règle appliquée par la fonction DATEDIF pour aboutir à ces résultats.

    Si quelqu'un a une idée ...

    Encore merci à abominafreutroce d'avoir pris la peine d'écrire pour me ramener à l'essentiel.
    0