Calcul age sous excel

Résolu
maxololo -  
Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Comment calculer sous excel 2003 l'âge exact de qq?
Configuration: Windows XP
Internet Explorer 7.0

13 réponses

  1. néné
     
    Bjr

    voici une formule selon une date de naissance

    =ANNEE(AUJOURDHUI()-B43)-1900
    22
    1. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
       
      ... avec bien entendu la date de naissance dans la cellule B43 !

      En tout cas grand merci à néné, car j'avais une formule beaucoup plus (et inutilement) compliquée ...
      0
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Salut,

    Je viens mettre mon grain de sel dans la discussion même s'il s'agit d'une relance, ça prouve que rien ne se perd

    Mets en B9 la date de naissance ou changes la valeur dans la formule

    =DATEDIF(B9;AUJOURDHUI();"y")&" ans, "&DATEDIF(B9;AUJOURDHUI();"ym")&" mois et "&DATEDIF(B9;AUJOURDHUI();"md")&" jours"

    et en cadeau un fichier complet avec mise en forme conditionnelle. Pour la sécurité des formules le fichier est protégé et le code macro également.
    Le mot de passe pour accèder à la déprotection et macro dans le ThisWorbook saisir OPEN en majuscule

    https://www.cjoint.com/?lvwZVI1Euo

    A+
    3
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Merci pour ce classeur bien conçu et pratique pour ceux qui ne veulent pas oublier d'anniversaire.

    Dans le tri, peut-être remplacer Header:=xlGuess par Header:=xlYes car chez moi excel "devine" très mal.
    1
    1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
       
      Salut gbinforme,

      Merci pour ton appréciation.
      oui effectivement pour le code, ça peu également. Pour le fun je vais peut être l'améliorer avec une grosse shape personnalisée qui clignote le jour d’un anniversaire.

      Il faut rester Joueur

      A+
      0
  4. !^^![ME] Messages postés 4767 Statut Contributeur 395
     
    Avec sa date de naissance...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mamioc
     
    je n'arrive pas à faire la formule pour calculer l'âge de qqun à une date postérieure à la date du jour, par exemple je veux calculer l'age au 01/10/2012. Par avance merci de m'aider.
    0
    1. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
       
      1) Ne pas polluer la discussion d'un tiers, mais créer sa propre discussion en cliquant sur "Posez votre question" (en haut de l'écran, sous la ligne "Rechercher").
      2) Dans la formule de néné, remplacer AUJOURDHUI() par C43, si c'est cette cellule qui contient la date de naissance.
      0
      1. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453 > Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Salut Raymond
        ... ou tout sdmplement
        =ANNEE(cellule date recherchée)-ANNEE(cellule date naissance).
        Celle là évite le 1900.
        Bonne journée aux antilles. Ce matin, neige dans le Vaucluse.Normal c'est le printemps
        CRDLMNT
        0
      2. tontong > Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Bonjour,
        désolé mais la formule avec ...1900 fait gagner un an à ceux qui n'ont pas encore fêter leur anniversaire.
        Même s'il neige çà n'empêche pas d'être un jour plu_vieux.LOL
        0
      3. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453 > tontong
         
        Bonjour
        Ca dépend uniquement de la date de naissance:début ou fin d'année!!!!!. En, fait, cela change si votre date de naissance est postèrieure au jour en cours!
        CRDLMNT
        0
  7. scarabée
     
    Voyez la fonction DATEDIF !!!

    =DATEDIF(date de naissance;aujourdhui();"y")

    Fontionne au jour près. seule solution valable.

    Scarabée
    0
    1. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
       
      Depuis le 24 mars, beaucoup d'eau a coulé sous les ponts ...
      0
  8. BILOU
     
    je n'arrive pas à obtenir un résultat quand la personne est en 1800.
    Merci
    0
  9. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Salut le fil,

    Il existe une fonction personnalisé editée par Microsoft qui décompte les années à coller dans un module. si besoin faire signe

    Public Function AgeFunc(stdate As Variant, endate As Variant)
    Dim stvar As String
    Dim stmon As String
    Dim stday As String
    Dim styr As String
    Dim endvar As String
    Dim endmon As String
    Dim endday As String
    Dim endyr 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 fx As Integer
    fx = 0
    stvar = sfunc("/", stdate)
    stmon = Left(stdate, sfunc("/", stdate) - 1)
    stday = Mid(stdate, stvar + 1, sfunc("/", stdate, sfunc("/", stdate) + 1) - stvar - 1)
    If Len(stday) = 1 Then fx = fx + 1
    If Len(stmon) = 2 Then fx = fx + 1
    styr = Right(stdate, Len(stdate) - (sfunc("/", stdate) + 1) - stvar + fx)
    stmonf = CInt(stmon)
    stdayf = CInt(stday)
    styrf = CInt(styr)
    If stmonf < 1 Or stmonf > 12 Or stdayf < 1 Or stdayf > 31 Or styrf < 1 Then
    AgeFunc = "Invalid Date"
    Exit Function
    End If
    fx = 0
    endvar = sfunc("/", endate)
    endmon = Left(endate, sfunc("/", endate) - 1)
    endday = Mid(endate, endvar + 1, sfunc("/", endate, sfunc("/", endate) + 1) - endvar - 1)
    If Len(endday) = 1 Then fx = fx + 1
    If Len(endmon) = 2 Then fx = fx + 1
    endyr = Right(endate, Len(endate) - (sfunc("/", endate) + 1) - endvar + fx)
    endmonf = CInt(endmon)
    enddayf = CInt(endday)
    endyrf = CInt(endyr)
    If endmonf < 1 Or endmonf > 12 Or enddayf < 1 Or enddayf > 31 Or endyrf < 1 Then
    AgeFunc = "Invalid Date"
    Exit Function
    End If
    years = endyrf - styrf
    If stmonf > endmonf Then
    years = years - 1
    End If
    If stmonf = endmonf And stdayf > enddayf Then
    years = years - 1
    End If
    If years < 0 Then
    AgeFunc = "Invalid Date"
    Else
    AgeFunc = years
    End If
    End Function

    Public Function sfunc(x As Variant, y As Variant, Optional z As Variant)
    sfunc = Application.WorksheetFunction.Search(x, y, z)
    End Function

    -
    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonjour Mike-31,

      Tu as tout à fait raison mais cette fonction est pour la version anglaise (traduction automatique) et ne fonctionne pas avec le format français des dates. Mytå nous l'a améliorée pour prendre en compte les paramètres régionaux sur ce sujet.

      Cependant, contrairement à DATEDIF que tu maitrise parfaitement, elle ne permet que de calculer les années.

      Bien cordialement.
      0
  10. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    re,

    Si on s'accorde une marge d'erreur d'un jour pour les années bissextiles des débuts de siècles, cette formule peut être faire l'affaire.
    En effet sont bissextiles les années divisibles par 4 ou par 100 comme 2000, voire les deux.
    sauf si elles sont divisible par 400 ce qui ne sera pas le cas de l'an 2500
    Excel considère 1900 comme année bissextile ce qui est faut, et donc les calcul de cette année sont erronée.
    la marge d'erreur est donc faible. en A1 la date de début et en A2 de fin.
    si la formule ne passe pas, je mettrais un fichier

    =SI(ET(A1<>"";A2<>"");SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"Y")=0;" ";(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"Y")&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"Y")>1;" ans, ";" an, ")))&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"YM")=0;"";DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"YM")&" mois, ")&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"MD")=0;" ";DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"MD")&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"MD")>1;" jours ";" jour "));"")

    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
  11. bilou
     
    quelle formule faut-il appliquer dans tout cela pour trouver lâge???
    merci
    0
  12. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Oui malheureusement, Excel est capable de calculer très facilement la différence entre deux dates à partir 1901 (le calendrier Excel 1900 est erroné) avec la fonction

    = DateDif(A1; A2; "D" )

    Par contre avant 1900 c'est le vide. Une fois ma formule testée par tous ceux qui parcourent le forum j'essayerai d'adapter un code VBA qui rendra l'utilisation plus simple.
    Un exemple sur ce lien

    https://www.cjoint.com/?AFBvceXg3OA
    0
  13. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   957
     
    Salut le forum

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

    Mytå
    0
    1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
       
      Salut Myta,

      Tout simplement le plaisir et avoir un décompte année/mois et jours entre deux dates.
      Pour avoir simplement le nombre d'années entre deux dates on pourrait simplement formater la plage de saisie en texte exemple en A, et en A1 saisir la date 1/1/1700, en A2 1/1/2011

      cette formule donne le nombre d'années entre les deux dates 311

      =(DROITE(A2;4)-DROITE(A1;4))*1

      cordialement
      Mike-31
      0
    2. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   957
       
      Re le forum

      Comme 1/2/1700 et 1/1/2011 donne aussi 311 ans et la date de naissance n'est pas encore arrivée.

      Mytå
      0
  14. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Normal : Le calendrier stocké dans Excel démarre au 01/01/1900 !
    -1