Bonjour à tous et bonne année...
Je vais en rajouter une (fonction personnalisée) à toutes fins utiles :
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
Cette fonction renvoie l'âge à partir de la date de naissance (en 1er argument), exprimé sous forme de chaîne en années, années et mois, années et mois et jours (selon 2e argument : "a" ou omis, "m", "j"), âge calculé à la date du jour ou si une date est fournie en 3e argument, à cette date.
En outre, la fonction corrige l'erreur d'Excel du 1er janvier 1900 à la veille du 1er mars 1900, et fonctionne pour les dates antérieures à 1900.
Elle ne prend cependant pas en compte le passage du calendrier Julien au calendrier Grégorien, variable selon les pays et régions... (Ce sera pour une autre version quand je trouverai le temps... )
Cordialement.