Différence entre deux dates

Bonjour,

J'utilise Excel 2013, je souhaiterais faire un calcul automatique entre deux dates par exemple

sur la colonne A date de naissance 01/05/1773 colonne B le 14/07/1789 et colonne C quel age avait-il le 14/07/1789 soit 16 ans 2 mois et 13 jours.

J'ai essayé de faire avec le tuto ci-dessous:

https://support.office.com/fr-fr/article/calculer-la-diff%C3%A9rence-entre-deux-dates-8235e7c9-b430-44ca-9425-46100a162f38

et cela ne fonctionne pas, excel me dit qu'il faut rajouter des apostrophes ???

J'ai mis un exemple en copie jointe

Pourriez-vous m'aider, avec mes remerciements,

Jean

93datedif.xlsx (8.45 Ko)

Bonjour,

Tu ne peux pas utiliser les formules dates Excel avec des dates inférieures à l'année 1900.

excel ne gére pas.

Voir note Support microsoft :

https://support.microsoft.com/fr-fr/help/245104/how-to-calculate-ages-before-1-1-1900-in-excel

il faut passer par une macro.

45datedif-1.xlsm (17.72 Ko)

Bonjour

En C2

=DATEDIF(DATE(DROITE($A2;4)+800;STXT(A2;4;2)*1;GAUCHE(A2;2)*1);DATE(DROITE($B2;4)+800;STXT(B2;4;2)*1;GAUCHE(B2;2)*1);"y")&" ans "&DATEDIF(DATE(DROITE($A2;4)+800;STXT(A2;4;2)*1;GAUCHE(A2;2)*1);DATE(DROITE($B2;4)+800;STXT(B2;4;2)*1;GAUCHE(B2;2)*1);"ym")&" mois "&DATEDIF(DATE(DROITE($A2;4)+800;STXT(A2;4;2)*1;GAUCHE(A2;2)*1);DATE(DROITE($B2;4)+800;STXT(B2;4;2)*1;GAUCHE(B2;2)*1);"md")&" jours"

Sur un cycle de 800 ans, les années commencent toutes le même jour.

Il suffit donc de rajouter 800 à l'année.

Cordialement

44datedif.xlsx (8.72 Ko)

Sur un cycle de 800 ans, les années commencent toutes le même jour.

Il suffit donc de rajouter 800 à l'année.

Cordialement

Alors là je dis chapeau bas

bien mieux que la macro microsouft lol

Bonjour le forum,

Pas plus court qu'Amadéus

En "C2"

=SI(ESTTEXTE(B2);CNUM(DROITE(B2;4));ANNEE(B2))-SI(ESTTEXTE(A2);CNUM(DROITE(A2;4));ANNEE(A2))&" ans "&SI(NBCAR(B2)-NBCAR(SUBSTITUE(B2;"/";""))<2;"";SUPPRESPACE(STXT(B2;TROUVE("/";B2)+1;TROUVE("/";B2;TROUVE("/";B2)+1)-TROUVE("/";B2)-1)))*1-SI(NBCAR(A2)-NBCAR(SUBSTITUE(A2;"/";""))<2;"";SUPPRESPACE(STXT(A2;TROUVE("/";A2)+1;TROUVE("/";A2;TROUVE("/";A2)+1)-TROUVE("/";A2)-1)))*1&" mois "&GAUCHE(B2;2)*1-GAUCHE(A2;2)*1&" jours"

Cordialement.

Re,

Quoi, que:

En "C2"

=DROITE(B2;4)*1-DROITE(A2;4)*1&" ans "&SI(NBCAR(B2)-NBCAR(SUBSTITUE(B2;"/";""))<2;"";SUPPRESPACE(STXT(B2;TROUVE("/";B2)+1;TROUVE("/";B2;TROUVE("/";B2)+1)-TROUVE("/";B2)-1)))*1-SI(NBCAR(A2)-NBCAR(SUBSTITUE(A2;"/";""))<2;"";SUPPRESPACE(STXT(A2;TROUVE("/";A2)+1;TROUVE("/";A2;TROUVE("/";A2)+1)-TROUVE("/";A2)-1)))*1&" mois "&GAUCHE(B2;2)*1-GAUCHE(A2;2)*1&" jours"

Cdlt.

Bonjour,

Une fonction personnalisée, utilisable comme les fonctions natives d'Excel.

Function AGE(dn, Optional aff As String = "a", Optional df)
    Dim d, hui, a%, m%, j%, agr$
    Application.Volatile
    If dn = "" Then GoTo errdate
    On Error Resume Next
    If IsMissing(df) Then
        hui = Date
    Else
        hui = CDate(df)
        If CLng(hui) > 0 And CLng(hui) < 60 Then hui = hui + 1
    End If
    d = CDate(dn)
    If CLng(d) > 0 And CLng(d) < 60 Then d = d + 1
    If hui < d Then GoTo errdate
    On Error GoTo errdate
    a = DateDiff("yyyy", d, hui)
    If DateAdd("yyyy", a, d) > hui Then a = a - 1
    agr = a & IIf(a > 1, " ans", " an")
    If UCase(aff) = "M" Or UCase(aff) = "J" Then
        d = DateAdd("yyyy", a, d)
        m = DateDiff("m", d, hui)
        If DateAdd("m", m, d) > hui Then m = m - 1
        agr = agr & " " & m & " m."
        If UCase(aff) = "J" Then
            d = DateAdd("m", m, d)
            j = DateDiff("y", d, hui)
            agr = agr & " " & j & " j."
        End If
    End If
    AGE = agr
    Exit Function
errdate:
    AGE = CVErr(xlErrNA)
End Function

Le code est à placer dans un Module standard du classeur (et enregistrer le classeur au format .xlsm).

Syntaxe d'utilisation en feuille de calcul :

=AGE(DateNaissance;[ExpressionRésultat("a", "m" ou "j")];[DateCalcul])

DateNaissance : indiquer cellule dans laquelle se trouve la date, au format jj/mm/aaaa.

ExpressionRésultat : optionnel, indiquer "a" pour un résultat en années, "m" pour un résultat en années et mois, "j" pour un résultat en années, mois et jours. Si omis, le résultat sera par défaut en années.

DateCalcul : optionnel, indiquer cellule dans laquelle se trouve la date (au format jj/mm/aaaa) à laquelle l'âge doit être calculé. Si omis, l'âge sera calculé à la date du jour.

La fonction renvoie le résultat sous forme texte.

Elle corrige le bogue d'Excel du 29 janvier 1900 (date inexistante mais qu'Excel reconnaît !)

Elle fonctionne pour les dates antérieures à 1900.

Noter que dans ce cas, les dates saisies dans Excel seront considérées par Excel comme du texte (se cadrent à gauche dans les cellules, au lieu de se cadrer à droite avec les nombres.

Elle fonctionne en calendrier grégorien et n'opère pas de passage au calendrier Julien, qui devrait dépendre de son adoption à des dates différentes selon les pays : pour la France le calendrier grégorien prend effet au 20 décembre 1582 (pour les provinces faisant alors partie du royaume de France), mais 15 octobre 1582 pour la Franche-Comté, la Savoie, Nice, 25 décembre 1582 pour le Nord, 16 février 1682 pour l'Alsace, 28 février 1760 pour la Lorraine (décalage de 11 jours dans ce dernier cas, 10 jours pour les autres).

Cordialement.

Bonjour,

Une fonction personnalisée, utilisable comme les fonctions natives d'Excel.

Cordialement.

Bonjour MFerrand

Tu devrais la donner à microsouft… la leur est un peu foireuse lol

Bonjour MFerrand,

Je l'avais déjà noté dans mes archives , du coup j'ai aussi noté tes explications très détaillées comme toujours.

Cordialement.

Salut Xmenpl !

La gestion des dates par Microsoft est une calamité ! Déjà il fallait le faire d'introduire sciemment une erreur à l'origine d'Excel au motif que leur concurrent (Lotus123) avait fait cette erreur, et la laisser perdurer depuis !

Le document sur DATEDIF cité par jean357 est intéressant parce qu'il reconnaît que cette fonction est boiteuse et peut donner des résultats faux avec le paramètre "md"...

On peut opérer des rectifications avec VBA dans la mesure ou le calendrier géré par VBA ne comporte pas les erreurs d'Excel et part du 1er janvier 100. Mais il est bâti sur la logique grégorienne, même pour les dates ou le calendrier grégorien n'existait pas.

Ce qui oblige à une gymnastique pour mettre en correspondance la série grégorienne avec des dates juliennes. Les 29 février des années séculaires non divisibles par 400 existent (et continuent d'exister) dans le calendrier Julien, mais n'ont pas de numéro de série correspondant dans la suite de jours du calendrier Grégorien.

On travaille donc en grégorien avec une correspondance en julien (date à afficher dès lors qu'elle relève du calendrier Julien) qui va varier tous les 29 février des années séculaires non divisibles par 400 (et qu'il faudrait faire varier selon les pays...)

Mais comme les numéros de série de jours réellement existant (dans le calendrier Julien) manquent (dans la série grégorienne), si l'on veut déterminer le jour de la semaine pour une date donnée il faut apporter un correctif selon le nombre de numéros de série manquants... (En effet, les changements de calendrier n'ont jamais altéré le cycle de succession des jours de la semaine qui s'est poursuivi de façon constante.)

J'avais entamé un travail là-dessus il y a quelques années, mais je n'ai pas eu le temps de poursuivre. Quand je trouverai le temps de m'y remettre...

Cordialement.

Rechercher des sujets similaires à "difference entre deux dates"