Calcul de l'age [Résolu]

cs_petchy 710 Messages postés jeudi 20 février 2003Date d'inscription 19 mai 2015 Dernière intervention - 6 janv. 2009 à 17:23 - Dernière réponse : cs_petchy 710 Messages postés jeudi 20 février 2003Date d'inscription 19 mai 2015 Dernière intervention
- 7 janv. 2009 à 09:06
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
Afficher la suite 

10 réponses

Répondre au sujet
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 6 janv. 2009 à 20:59
+3
Utile
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 
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_fauve
Supra3000 160 Messages postés lundi 18 février 2008Date d'inscription 8 janvier 2010 Dernière intervention - 6 janv. 2009 à 17:42
0
Utile
If mDate.Text = "" or IsNull(mDate.Text) = True Then
   msgbox "Veuillez indiquer une date!"
   Exit Sub
End if
Commenter la réponse de Supra3000
cs_petchy 710 Messages postés jeudi 20 février 2003Date d'inscription 19 mai 2015 Dernière intervention - 6 janv. 2009 à 17:56
0
Utile
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

 
Commenter la réponse de cs_petchy
MOUSSAOUIAAZIZ 48 Messages postés samedi 5 août 2006Date d'inscription 9 novembre 2009 Dernière intervention - 6 janv. 2009 à 18:31
0
Utile
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
Commenter la réponse de MOUSSAOUIAAZIZ
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 6 janv. 2009 à 18:52
0
Utile
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 
Commenter la réponse de cs_fauve
cs_petchy 710 Messages postés jeudi 20 février 2003Date d'inscription 19 mai 2015 Dernière intervention - 6 janv. 2009 à 19:50
0
Utile
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
Commenter la réponse de cs_petchy
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 6 janv. 2009 à 20:37
0
Utile
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 
Commenter la réponse de cs_fauve
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 6 janv. 2009 à 20:49
0
Utile
le mieux, nombre de jours / 365.25
Commenter la réponse de Renfield
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 6 janv. 2009 à 21:01
0
Utile
Flûte Renfield a eu 10 min et 49 secondes d'avance sur moi

<hr size="2" width="100%" />Pensez : Réponse Acceptée 
Commenter la réponse de cs_fauve
cs_petchy 710 Messages postés jeudi 20 février 2003Date d'inscription 19 mai 2015 Dernière intervention - 7 janv. 2009 à 09:06
0
Utile
bonjour
un grand merci à vous,c'est nickel
@ plus
petchy
Commenter la réponse de cs_petchy

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.