Trouver un âge pour personne née en 1800

Fermé
BILOU - 24 juin 2011 à 13:40
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 - 29 juin 2011 à 05:24
Bonjour,
Pour trouver un âge, j'applique les formules proposées mais je n'y arrive pas pour les personnes nées en 1800. Quelle est la formule à appliquer
Merci


5 réponses

Mytå Messages postés 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
24 juin 2011 à 20:04
Salut le forum

Avec une fonction personnalisée
Lien : Comment calculer les âges avant 01/01/1900 dans Excel

Mytå
3
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
24 juin 2011 à 22:25
Bonjour Mytå,

Merci de cette info mais attention à ceux qui vont l'utiliser car la fonction ne fonctionne qu'avec des dates au format anglais (mm/jj/aaaa) et donc il y a intérêt à corriger la fonction pour l'utiliser avec des dates françaises (jj/mm/aaaa) :inverser stday = et stmon = puis endday = et endmon = .

Un énorme merci à MS pour donner comme dates de test 01/01/1887 et 02/02/1945 : ils ne se ficheraient pas un peu de nous par hasard ?
0
Mytå Messages postés 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
Modifié par Mytå le 24/06/2011 à 23:25
Re le forum

A tester, j'ai inclus la détection des paramètres régionaux.

' This is the initial function. It takes in a start date and an end date.  
Public Function AgeFunc(stdate As Variant, endate As Variant) 
  
 ' Dim our variables. 
 Dim stmon As String 
 Dim stday As String 
 Dim styr As String 
 Dim stdt() As String 
 Dim endmon As String 
 Dim endday As String 
 Dim endyr As String 
 Dim enddt() As String 
 Dim stmonf As Integer 
 Dim stdayf As Integer 
 Dim styrf As Integer 
 Dim endmonf As Integer 
 Dim enddayf As Integer 
 Dim endyrf As Integer 
 Dim years As Integer 
 Dim Date_Fmt As Long 
 Dim Date_Sep As String 
  
 ' Find regional parameters 
 ' Date_Fmt --> 0 = mois-jour-année, 1 = jour-mois-année , 2 = année-mois-jour 
     Date_Fmt = Application.International(xlDateOrder) 
     Date_Sep = Application.International(xlDateSeparator) 
  
 ' Parse the day, month and year from the dates. 
 Select Case Date_Fmt 
   Case 0 
     stmon = Split(stdate, Date_Sep)(0): endmon = Split(endate, Date_Sep)(0) 
     stday = Split(stdate, Date_Sep)(1): endday = Split(endate, Date_Sep)(1) 
     styr = Split(stdate, Date_Sep)(2): endyr = Split(endate, Date_Sep)(2) 
   Case 1 
     stmon = Split(stdate, Date_Sep)(1): endmon = Split(endate, Date_Sep)(1) 
     stday = Split(stdate, Date_Sep)(0): endday = Split(endate, Date_Sep)(0) 
     styr = Split(stdate, Date_Sep)(2): endyr = Split(endate, Date_Sep)(2) 
   Case 2 
     stmon = Split(stdate, Date_Sep)(1): endmon = Split(endate, Date_Sep)(1) 
     stday = Split(stdate, Date_Sep)(2): endday = Split(endate, Date_Sep)(2) 
     styr = Split(stdate, Date_Sep)(0): endyr = Split(endate, Date_Sep)(0) 
 End Select 
  
 ' Change the text values we obtained to integers for calculation 
 ' purposes. 
 stmonf = CInt(stmon) 
 stdayf = CInt(stday) 
 styrf = CInt(styr) 
  
 ' Check for valid date entries. 
 If stmonf < 1 Or stmonf > 12 Or stdayf < 1 Or stdayf > 31 Or styrf < 1 Then 
     AgeFunc = "Invalid Date" 
     Exit Function 
 End If 

 ' Change the text values we obtained to integers for calculation 
 ' purposes. 
 endmonf = CInt(endmon) 
 enddayf = CInt(endday) 
 endyrf = CInt(endyr) 
  
 ' Check for valid date entries. 
 If endmonf < 1 Or endmonf > 12 Or enddayf < 1 Or enddayf > 31 Or endyrf < 1 Then 
     AgeFunc = "Invalid Date" 
     Exit Function 
 End If 
  
 ' Determine the initial number of years by subtracting the first and 
 ' second year. 
 years = endyrf - styrf 
  
 ' Look at the month and day values to make sure a full year has passed. 
 If stmonf > endmonf Then 
     years = years - 1 
 End If 
      
 If stmonf = endmonf And stdayf > enddayf Then 
     years = years - 1 
 End If 

 ' Make sure that we are not returning a negative number and, if not, 
 ' return the years. 
 If years < 0 Then 
     AgeFunc = "Invalid Date" 
 Else 
     AgeFunc = years 
 End If 
  
End Function  

Mytå
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
24 juin 2011 à 23:49
Merci Mytå : pour moi c'est OK !
0
merci de Myta
J'ai appliqué la formule mais j'obtiens une date (jj/mm/aaaa) or je souhaite avoir un âge
0
ca ne marche pas
car : 11/06/1887 (A1) : date de naissance
29/01/145 (A2) : date de décès
en appliquant la formule proposée c'est NOMBRE
0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 088
24 juin 2011 à 14:13
Bonjour BILOU.

Il faut savoir que le calendrier mémorisé dans Excel commence le 1er janvier 1900.
Donc aucune formule de calcul ne peut concerner une date antérieure au 01/01/1900.

Une astuce : pour savoir à quel âge est mort quelqu'un né le 18/10/1857 et décédé le 27/11/1892 tu fais le calcul en ajoutant 100 ans à chaque date ; comme s'il était né le 18/10/1957 et mort le 27/11/1992 ...
1
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
24 juin 2011 à 23:09
Bonjour Raymond,

Excellente astuce qui permet de trouver les ages avec les fonctions appropriées (DATEDIF par exemple) qui vont jusqu'en 9999 et donc pour traiter depuis Henry IV je te propose 300 ans avec cette formule pour une date en A1 transformée en date utilisable + 300 ans et qui gère le mélange avant et après 1900 :

=SI(ESTNUM(A1);A1+109575;(GAUCHE(A1;NBCAR(A1)-4)&DROITE(A1;4)+300)*1)
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 25/06/2011 à 00:35
Bonjour Raymond, bonjour gbinforme,

Ajouter 100 ans ou 300 ans ne permet pas d'effectuer un calcul correct, pour une date de début comprise entre 1582 (exclu) et 1900 (inclus), il faut ajouter 400 ans (ou un multiple de 400) car seules les années séculaires divisibles par 400 sont bissextiles (1700, 1800 et 1900 ne sont pas bissextiles).

D'autre part, par erreur, Excel considère 1900 comme bissextile ce qui fait que pour Excel, la veille du jeudi 1er mars 1900 est le mercredi 29 février 1900 au lieu du mercredi 28 février et donc tous les jours fournis entre le 0 janvier 1900 et le 28 février 1900 sont faux (d'où la nécessité d'ajouter aussi 400 pour 1900).

1582 est l'année de passage du calendrier julien au calendrier grégorien (elle ne comporte que 356 jours).

Cordialement
Patrice
0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 088
25 juin 2011 à 04:39
Oh là, Patrice ! Du calme !
BILOU veut seulement calculer l'âge de quelqu'un. Alors les années bissextiles ne nous intéressent pas du tout.
Ceci dit, tes affirmations sont certainement exactes et peuvent être utiles pour d'autres problèmes ...
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
26 juin 2011 à 22:36
C'est simplement à propos d'Henri IV, né le 13/12/1553 et mort le 14/05/1610 à l'age de 56 ans, 5 mois et 1 jour mais qui n'a vécu que 20596 jours (au lieu de 20606).
0
Mytå Messages postés 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
Modifié par Mytå le 29/06/2011 à 03:53
Re le forum

Que s'est il passé du 10 au 19 décembre 1582 ?

RIEN car ces dix jours n ont pas existé ! le roi Henri III a mis en application la décision du pape Grégoire XIII qui venait d'instituer le calendrier qui porte son nom, car depuis Jules César le calendrier avait accumulé dis jours de retard sur le mouvement apparent du soleil

Référence : Passage du Calendrier Julien au Calendrier Grégorien (Wikipedia)

Mytå
0
Utilisateur anonyme
24 juin 2011 à 13:53
=2011-Année de naissance
0
Utilisateur anonyme
24 juin 2011 à 13:53
en gros ici 2011-1800 ...
0
Utilisateur anonyme
24 juin 2011 à 13:53
PS : Excel ou numbers ou Open/libreOffice ?
0
je souhaite trouver l'âge exacte de personnes nées par exemple le 18/09/1882 et décédée le 24/05/1942 dans une tableau XCEL.
Merci
0
en xcel.
Merci
0
je n'ai pas compris ce qu'il faut faire exactement.
J'arrive aux points 1, 2,3 et après que faut-il faire
Merci
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
27 juin 2011 à 15:59
Salut,

Un discussion identique sur ce lien, voir si ma formule usine à gaz permet une approche. Pour un code VBA encore une petite attente

voir ici
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mytå Messages postés 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
27 juin 2011 à 21:30
Salut le forum

Pourquoi essayer de réinventer la roue : XDate: Extended Date Functions Add-In

Mytå
0
Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 088
29 juin 2011 à 05:24
Tu n'aurais pas le même en français ?
0