Bonsoir le fil,
Si cela peut intéresser, j'ai deux fonctions sur ces questions (faites autrefois pour répondre à une demande...)
Function AGE(dn, Optional aff As String = "a", Optional df)
Dim d, hui, a%, m%, j%, agr$
Application.Volatile
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
La fonction utilise 3 arguments : le premier obligatoire (la date de naissance), le 2e optionnel (indication "a" ou "m" ou "j" pour que l'âge soit exprimé en années, ou en années et mois, ou en années, mois et jours, s'il est omis l'âge est exprimé en années seulement), et le 3e optionnel également (date à laquelle on veut que l'âge soit calculé, s'il est omis, l'âge est calculé à la date d'aujourd'hui).
Exemples :
A1=06/01/1955 => =AGE(A1) renverra : 62 ans
A1=30/07/1952 => =AGE(A1;"m") renverra : 64 ans 11 m.
A1=27/07/1895 => =AGE(A1;"j") renverra : 121 ans 11 m. 23 j.
NB- La fonction effectue le calcul pour des dates antérieures à 1900...
A1=21/07/2017 => =AGE(A1) renverra : #N/A
La date est future ! Mais ces résultats vont varier puisque calculés sur la date du jour. La dernière formule, demain, affichera : 0 an
A1=28/01/1944
B1=31/12/2017 => AGE(A1;"j";B1) renverra : 73 ans 11 m. 3 j.
Résultat qui ne variera pas puisque calculé sur une date fixe.
Nota- La demande résultait de difficultés rencontrées avec DATEDIF...
Voilà pour la 1re fonction. La seconde est un peu l'inverse, elle calcule la date anniversaire (le prochain, ou à un âge donné).