Calculer l'âge d'une personne avec Excel
par
, 28/10/2021 à 08h00 (2890 Affichages)
Pas de fonction AGE() dans Excel. Ce n'est pas bien grave, il existe des solutions
Salut.
- Pierre, j'ai quel âge?
- A te regarder, 69?
- Merci de me vieillir...
- heu non, c'était par rapport à la chanson de Serge... 69, année érotique...
- Ah, tu me files un rencard?
- Mais non ma belle...
Bon, trêve de plaisanterie, on est sur un blog sérieux, ici...
La mauvaise approche
Je me souviens d'une discussion sur le forum dans laquelle il était question d'âge. Les réponses farfelues d'un des membres m'avaient quelque peu irritées, puisqu'il partait de l'idée qu'il suffisait de diviser le nombre de jours entre la date de calcul et la date de naissance par 365 pour trouver la date. De plus, il arrondissait pour avoir une année entière. Du coup, à 47.5 ans, on passait à 48... Du grand m'importe quoi, mais la rigueur n'était manifestement pas son fort.
Comme on le voit, la précision n'est pas vraiment au rendez-vous. Le premier calcul est juste, mais pas le second*. En fait, la division par 365 omet de compter les années bissextiles, et donc l'erreur sera d'autant plus grande que la personne est âgée. Dans le cas présent, la personne passe à 47 ans le 30/04/2021, soit 12 jours avant sa vraie date d'anniversaire. C'est normal puisqu'il y a 12 années bissextiles entre 1974 et 2021...
Amélioration de la précision, effets de bord
on peut tenter la division par 365.25 pour avoir une meilleure approche, mais on a un effet de bord pour certaines dates
Une approche qui tient la route
Perso, je procède ainsi: Avec une date de naissance en A2 et la date de calcul en B2, j'utilise la formule =ANNEE(B2)-ANNEE(A2)-(DATE(ANNEE(B2);MOIS(A2);JOUR(A2))>B2). Je calcule la différence entre les années des dates, et je retranche 1 si la date d'anniversaire est ultérieure à la date du calcul.
On pratiquera de la même façon en VBA:
Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Function Age(BirthDate As Date, Optional CheckDate As Date) As Long If CheckDate = 0 Then CheckDate = Date Age = Year(CheckDate) - Year(BirthDate) + (DateSerial(Year(CheckDate), Month(BirthDate), Day(BirthDate)) > CheckDate) * 1 End Function
Conclusions
Il est toujours important de bien tester vos solutions, en étant très attentif aux valeurs créant des effets de bord. Dans ce cas, on testera la formule avec la veille de la date de calcul, la date de calcul elle-même et le lendemain de la date de calcul, pour être certain d'avoir les conditions correctement exprimées. C'est la base des bases pour le développeur professionnel.
Bon travail avec Excel
* Méfiez-vous des réponses non testées et bâclées![]()