Calcul age exact? [Résolu]

Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
- - Dernière réponse : PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
- 28 déc. 2009 à 03:25
Bonjour à tous,

j'aimerai savoir comment calculer exactement l'âge d'un homme. C'est-à dire que si l'homme est né le 30/12/70 et que je le compare avec à 27/12/09 qu'il me dise que cet homme a 28 ans et uniquement lorsqu'on sera au moins au 30/12/09 (c'est-à dire la date de son anniversaire) alors là il aura 29 ans. J'ai essayé avec le code suivant mais ça ne marche pas car il compare uniquement avec l'année :

    Dim age As Integer
    age = DateDiff("yyyy", txtdateconsultation, txtdatenaisspatient)
    txtagepatient.Text = -age


Merci d'avance pour votre aide.

Cordialement.
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
576
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
27 janvier 2014
2
3
Merci
Bonjour PCPT et Merci pour ton aide. Mon problème est résolu grace au code suivant :

    Dim age As Integer
    
    age = DateDiff("yyyy", txtdatenaisspatient, txtdateconsultation)
    
    Dim moispatient As Integer
    Dim moisdate As Integer
    Dim jourpatient As Integer
    Dim jourdate As Integer
    
    moispatient = Month(txtdatenaisspatient)
    jourpatient = Day(txtdatenaisspatient)
    moisdate = Month(txtdateconsultation)
    jourdate = Day(txtdateconsultation)
    
    If moispatient > moisdate Or (moispatient = moisdate And jourpatient > jourdate) Then
    
        age = age - 1
        
        txtagepatient.Text = age
    
    Else
    
        txtagepatient.Text = age
    
    End If


Je te promets de tester ton code et Merci pour tout. Prends bien soin de toi. Bye!

Cordialement.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 186 internautes nous ont dit merci ce mois-ci

Commenter la réponse de js8bleu
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
26
0
Merci
salut,

je viens de déposer ce snippet (même s'il doit bien y avoir des exemples sur la toile quand même!!)

http://www.codyx.org/snippet_nombre-annees-age_659.aspx#2539

Private Sub Form_Load()
    Dim dBirth As Date
    Dim dCompare1 As Date
    Dim dCompare2 As Date

    dBirth = CDate("1970-12-30")
    dCompare1 = CDate(Format$(Date, "YYYY-MM-DD"))
    dCompare2 = CDate("2010-01-01")


    Dim iRes1 As Integer
    Dim iRes2 As Integer

    iRes1 = GetElapsedYears(dBirth, dCompare1)
    iRes2 = GetElapsedYears(dBirth, dCompare2)


    MsgBox "Aujourd'hui, l'utilisateur a " & CStr(iRes1) & " ans." & vbCrLf & _
           "Au 1e janvier, il aura " & CStr(iRes2) & " ans."

    Unload Me
End Sub



[hr]
Commenter la réponse de PCPT
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
dCompare1 = CDate(Format$(Date, "YYYY-MM-DD"))
euh...
pas sur d'avoir saisi l'interet.

dCompare1 = Date.


Concernant:
d = CDate(Format$(Year(d2) & "-" & Month(d1) & "-" & Day(d1), "YYYY-MM-DD"))
possible d'utiliser DateSerial plutot que Format$ :
d = DateSerial(Year(d2), Month(d1), Day(d1))


Au final, l'idée est le diviser le nombre de jours entre les deux dates par le nombre de jours dans une année...

soit :

Private Sub Form_Load()
    MsgBox Age(#12/31/1983#)
End Sub

Private Function Age(ByRef vdBirthDate As Date, Optional ByVal vdNow As Date) As Long
     If vdNow = 0 Then
         vdNow = Now
     End If
     Age = Fix(DateDiff("D", vdBirthDate, vdNow) / 365.25)
 End Function




Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
26
0
Merci
ton snippet est correct également, toujours plusieurs manières de procéder (d'où CODYX.ORG)

perso je remontais surtout le principe que ce code existait déjà (d'où GOOGLE !!)
Commenter la réponse de PCPT