TUTO : COMMENT COMPTER L’ÂGE DES PERSONNES NÉES AVANT 1900 SUR EXCEL (avec et sans VBA)
Dans ce tutoriel, je vais vous montrer comment calculer simplement l’âge d’une personne née avant le premier janvier 1900. Pour cela nous allons découvrir deux méthodes : l’une basée sur la création du macro complémentaire développée en VBA, l’autre en utilisant une simple formule EXCEL.
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !
1. Présentation
Rappelez-vous, dans les chapitres précédents, nous avions déjà eu l’occasion de découvrir que pour Excel une date n’est en réalité qu’un simple nombre dont le format spécifique permet de lui donner l’apparence d’une date.
Ce numéro de série commence par le chiffre 1, lequel correspond à la date du 1er janvier 1900.
Pour nous en rendre compte, il suffit de saisir la valeur « 1 » dans une cellule :
Puis de modifier le format de la cellule pour que celle-ci prenne l’apparence d’une date :
La date affichée correspond bien au 1er janvier 1900.
La conséquence de ce fonctionnement, est que si nous saisissons une date plus ancienne, Excel ne va pas être en mesure de la traiter comme telle :
En effet, ici le texte est aligné sur la gauche de la cellule, ce qui signifie qu’il s’agit d’une chaîne de caractères.
Aussi, tout calcul reposant dessus est simplement impossible !
Mais rassurez-vous, nous allons maintenant découvrir deux méthodes qui vont permettre de passer outre cette limitation !
2. Calcul d’âge avant 1900 : par formule
En réalité les techniques que nous allons voir ici reposent sur une même astuce : nous allons modifier les dates de références pour faire entrer celles-ci dans la plage d’acceptation des dates d’Excel (c’est-à-dire une date comprise entre le 1er janvier 1900 et le 31/12/9999) en ajoutant un grand nombre d’années à ces dates !
Évidemment, nous ne pouvons pas utiliser simplement les formules de gestion des dates que nous avons déjà vues dans les chapitres précédents (par exemple la formule MOIS.DECALER()), car il faudrait pour cela que le point de départ soit déjà une date.
Nous allons donc devoir :
- Décomposer la date,
- Puis la recomposer pour en ajouter le nombre d’années correspondantes !
Pour cela, imaginons que nous souhaitions ajouter 1900 années aux deux dates de références, qui pour rappel sont saisies sous le format jj/mm/aaaa.
Pour décomposer la date, nous allons devoir utiliser les formules suivantes :
- Jour : formule GAUCHE(maDate;2) : qui permet de récupérer les deux caractères situés sur la gauche
- Mois : formule STXT(maDate;4;2) : qui permet de récupérer les deux caractères situés à partir du quatrième caractère
- Année : formule DROITE(maDate;4) : qui permet de récupérer les quatre caractères situés sur la droite
Ces trois formules que nous allons simplement intégrer dans une formule DATE() qui pour rappel permet de reconstituer une date à partir des différents éléments qui la compose (jour, mois, année) :
=DATE(DROITE(B7;4);STXT(B7;4;2);GAUCHE(B7;2))
Comme vous pouvez le constater à ce moment-là, Excel a automatiquement utilisé notre fameuse astuce pour rendre la création de ces dates possible ! En effet, sans même que nous ne lui demandions, il a modifié l’année de référence pour que celle-ci soit intégrée dans son espace de travail.
Il a donc ajouté 1900 années (1900+1832=3732)
En effectuant la même opération sur les dates, il est maintenant possible de calculer l’âge de la personne :
=ANNEE(C8-C7)-1900
Attention toutefois, il existe encore une petite subtilité à considérer : comment peut-on simplement calculer l'âge d'une personne née avant 1900, mais dont la date de décès interviendrait après cette année ?
L'astuce consiste à transformer la date sous un format texte avec la fonction TEXTE() afin de remplacer la simple référence à la cellule B7 par « TEXTE(B7;"JJ/MM/AAAA") » :
=DATE(DROITE(B7;4);STXT(B7;4;2);GAUCHE(B7;2))
Devient alors :
=DATE(DROITE(TEXTE(B7;"JJ/MM/AAAA");4)+1900;STXT(TEXTE(B7;"JJ/MM/AAAA");4;2);GAUCHE(TEXTE(B7;"JJ/MM/AAAA");2))
Ici, nous avons ajouté directement les 1900 années dans la première partie de la fonction DATE() pour être certain que toutes les dates soient comparables les unes aux autres (en effet, Excel n'ajoute ces années que si la date est inférieure à l'année 1900).
Cela permet de traiter indifféremment les différents cas de figure !
3. Calcul d’âge avant 1900 : par macro
À présent, voyons comment créer une macro complémentaire qui permette de réaliser ce calcul en une seule opération, et surtout que nous pourrons ajouter dans un classeur de macros complémentaire pour être réutilisé très simplement.
Tout d’abord, nous commençons par lancer l’éditeur VBE (Alt+F11), puis nous créons un nouveau module dans lequel nous viendrons saisir notre macro (Menu Insertion/Module) :
Dans ce nouveau module nous commençons par créer une nouvelle fonction qui va consister à créer une nouvelle date à partir d’une date de référence, exactement comme nous venons de le faire dans la partie précédente :
Function dateModifiee(maDate As String) As Date
dateModifiee = DateSerial(Right(maDate, 4), Mid(maDate, 4, 2), Left(maDate, 2))
End Function
Nous avons utilisé ici les fonction VBA suivantes :
- La fonction DateSerial : permet de construire une date à partir de l’année, du mois et du jour (équivalent de la fonction Excel DATE()),
- La fonction Right : permet de récupérer une partie d’une chaîne de caractère situé sur la gauche de celle-ci (équivalent de la fonction Excel GAUCHE()),
- La fonction Left : permet de récupérer une partie d’une chaîne de caractère situé sur la droite de celle-ci (équivalent de la fonction Excel DROITE()),
- La fonction Mid : permet de récupérer une partie d’une chaîne de caractère situé au milieu de celle-ci (équivalent de la fonction Excel STXT())
Nous créons donc une nouvelle fonction qui porte le nom de dateModifiee et qui attend comme argument une date sous la forme d’une chaîne de caractères.
N’avons plus qu’à constituer une nouvelle date, toujours suivant la même méthode.
En revanche, lorsque nous testons cette fonction dans la feuille de calcul, en l’appelant par son nom, le résultat retourné sera une erreur :
En effet, contrairement aux formules EXCEL, VBA n’adapte pas la date automatiquement, et c’est à nous de modifier la fonction pour ajouter les années supplémentaires :
Function dateModifiee(maDate As String) As Date
dateModifiee = DateSerial(Right(maDate, 4) + 1900, Mid(maDate, 4, 2), Left(maDate, 2)) ' Ajout de 1900 année sur la date de référence
End Function
Notre nouvelle date est maintenant correcte :
Ensuite libre à nous de créer une seconde fonction personnalisée pour calculer automatiquement l’âge de la personne :
Function calculAge(dateDebut As String, dateFin As String) As Integer
calculAge = Year(dateModifiee(dateFin) - dateModifiee(dateDebut)) - 1900
End Function
Nous avons utilisé ici les fonction VBA suivantes :