Calcul age exact?

Résolu
js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 - 27 déc. 2009 à 15:40
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre 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.

4 réponses

js8bleu Messages postés 576 Date d'inscription samedi 14 octobre 2006 Statut Membre Dernière intervention 27 janvier 2014 2
27 déc. 2009 à 17:24
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.
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 déc. 2009 à 16:41
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]
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 déc. 2009 à 21:38
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 déc. 2009 à 03:25
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 !!)
0
Rejoignez-nous