Calcul de l'age [Résolu]

Signaler
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 mai 2015
-
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 mai 2015
-
bonsoir
j'ai se code pour convertir une date en age,elle fonctionne super bien

PrivateSub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

Dim datedenaissance = CDate(mDate.Text)
Dim age AsInteger = DateDiff(DateInterval.Year, DateTime.Now, datedenaissance)
If mDate.Text = ("--/--/----") Then
MsgBox("ATTENTION : Veuillez mettre une date de naissance....", vbCritical + vbExclamation, "OUBLI")
Else
Me.Label1.Text = age & " ans"
EndIf
EndSub
mais le probleme c'est quand le textbox (mDate) est vide j'ai une erreur,donc jai mis se msgbox
mais j'ai cette erreur :
"La conversion de la chaîne "  /  /" en type 'Date' n'est pas valide."
auriez vous une idée
merci
pechy

10 réponses

Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
Je viens de remarquer que ce n'est pas assez précis avec le nombre de mois et j'ai donc essayé avec le nombre de jours que j'ai divisé avec 365,25.

Mais j'avais le même problème, j'ai fini par trouver, ça venait de Math.Round. Il faut utiliser à la place Math.Truncate (pour tronquer le nombre)

Voici donc le code qui fonctionne correctement :





Private Sub
 Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

     Dim datedenaissance As Date
     Dim age As Integer

     If mDate.Text =   ""   Or Not  IsDate(mDate.Text) Then
          MsgBox("Veuillez entrer une date correcte", MsgBoxStyle.Information, "Erreur !!!")
          Exit Sub
     End If

     datedenaissance  = CDate(mDate.Text)

     age =  DateDiff(DateInterval.Day, datedenaissance,  Date .Today)

     age  = Math.Truncate(age / 365.25)

     Label1.Text =  age &  " ans"

End Sub





++

Fauve

<hr size ="2" width="100%" />
Pensez : Réponse Acceptée 
Messages postés
159
Date d'inscription
lundi 18 février 2008
Statut
Membre
Dernière intervention
8 janvier 2010
2
If mDate.Text = "" or IsNull(mDate.Text) = True Then
   msgbox "Veuillez indiquer une date!"
   Exit Sub
End if
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 mai 2015
3
Re
merci de ta réponse ,mais ça ne fonctionne pas
je suis en vb9
j'ai essayer de remplacer IsNull par DBNull mais c'est refuser.
petchy

 
Messages postés
48
Date d'inscription
samedi 5 août 2006
Statut
Membre
Dernière intervention
9 novembre 2009

Salut;



If







Not

IsDate(mDate.Text)

Then



   MsgBox("ATTENTION : Veuillez mettre une date de naissance....", vbCritical +    vbExclamation, "OUBLI")






Else
     



mDate.Text = Format(TextBox1.Text,


"dd-mm-yyyy"

)
      Me.Label1.Text = age & " ans"

end if
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
Salut,


<hr size= "2" width="100%" />


Il y avait quelques petites erreurs :

1°) Il faut vérifier avant de faire la conversion que mDate contient au moins un caractère et que ceux
qui est rentré soit une date.

2°)
Dim
age
As
Integer
= DateDiff(DateInterval.Year, DateTime.Now, datedenaissance)




En écrivant cette ligne de code comme ci-dessus, l'age que tu vas récupérer sera négatif, il faut intervertir DateTime.Now avec datenaissance





<hr size="2" width="100%" />


Voici le code en entier :




Private
Sub


TextBox1_TextChanged(


ByVal






sender


As






System.Object,


ByVal






e


As






System.EventArgs)


Handles


TextBox1.TextChanged




Dim
 datedenaissance As Date
Dim age As Integer

If mDate.Text  =  ""  Or Not IsDate(mDate.Text) Then
     MsgBox("Veuillez entrer une date correcte", MsgBoxStyle.Information, "Erreur !!!")
     Exit Sub
End If

datedenaissance  =   CDate (mDate.Text)

age  = DateDiff(DateInterval.Year, datedenaissance, DateTime.Now)

Label1.Text = age & " ans"






End
Sub








<hr size="2" width="100%" />
++

Fauve

<hr size="2" width="100%" />
Pensez : Réponse Acceptée 
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 mai 2015
3
super merci à vous c'est nickel

encore une derniere question
voila quand je met une date 01/02/2000 il m'indique 9ans
comment faire pour qu'il mette 8 ans,pour etre un peu plus précis.
encore merci pour mon premier probleme

petchy
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
Dans ce cas, il faut alors récupérer le nombre de mois au lieu de l'année car je pense que DateDiff doit arrondir au supérieur.

En récupérant le nombre de mois, on pourra nous même effectuer la conversion et être plus précis.

Voici le code :




P





rivate Sub
 TextBox1_TextChanged( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

     Dim  datedenaissance As Date
     Dim month, age As Integer

     If mDate.Text =   ""   Or Not  IsDate(mDate.Text) Then
          MsgBox("Veuillez entrer une date correcte", MsgBoxStyle.Information, "Erreur !!!")
          Exit Sub
     End If

     datedenaissance  = CDate(mDate.Text)

     month =  DateDiff(DateInterval.Month, datedenaissance,  Date .Today)

     age  = Math.Round(month / 120, MidpointRounding.AwayFromZero)

     Label1.Text =  age &  " ans"

End Sub





++

Fauve

<hr size ="2" width="100%" />
Pensez : Réponse Acceptée 
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
le mieux, nombre de jours / 365.25
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
Flûte Renfield a eu 10 min et 49 secondes d'avance sur moi

<hr size="2" width="100%" />Pensez : Réponse Acceptée 
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 mai 2015
3
bonjour
un grand merci à vous,c'est nickel
@ plus
petchy