J'ai créé avec MS ACCESS 1.1 (hé oui: Access 1.1) un programe de gestion des électeurs.
A partir de la date de naissance je n'arrive pas à déterminer l'age d'un électeur dans un formulaire.
DateDiff a une dent contre moi..
Ce que je voudrais savoir, c'est le format de ton champ "date de naissance" dans ta DB
Est-il en type "Texte" ou en type "Date général" ?
S'il est bien en type Date, tu peux essayer ceci directement dans ta requète SQL (as-tu une requète ? on ne le sais pas non plus)
Select mesAutresChamps, DateDiff("y", [date de naissance], Now) As [Age]
[date de naissance] est sensé être le champ dans lequel est stocké ta date
Now est la date d'aujourd'hui
As [Age] donnera un nom à cette nouvelle colonne
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
tu n'as manifestement pas lu le règlement, toi non plus ...
peut-être auras-tu alors le temps de lire attentivement cette discussion :
http://www.vbfrance.com/forum/sujet-FINIR-AVEC-FORUM-POLLUE_1278668.aspx puis de t'interroger sur le titre donné à ta question et sur le thème choisi pour la poser, hein ...
(si tu as "créé avec MS ACCESS 1.1 (hé oui: Access 1.1) un programe de gestion des électeurs", ton problèm n'(est pas un problème VB.NET).
DateDiff te fournira un nombre de "quelque chose" entre deux dates, il pourra pas te donner directement des années + des mois + des jours
Tout dépend de ce que tu veux faire.
A part compatire à ton problème, on ne peut guère te dire quoi faire si tu ne dis pas ce que tu cherches à faire.
On ne sait pas si tu parles de dates dans le code VBA ou de dates dans une table SQL, et si tu veux faire ce calcul sous SQL (dans une requète) ou dans le code.
DateDiff n'est pas une instruction SQL pure.
Access sait la gérer mais il y a des règles de syntaxe à respecter sous SQL, notament quand les champs sont définis dans la table comme de type Date --> Utiliser un # comme encadrement des valeurs testées
Exemple : ... Where maDate > #12/31/2000#
+ Rappel : les dates sont toujours au format américain dans les bases, donc Mois/Jour/Année
Alors, comme le dis jmf0, soigne le titre de ta question afin que d'autres puissent facilement trouver une réponse à un cas similaire (merci pour nos claviers)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Merci pour vos réponses, sachez cependant qu'il n'était pas dans mes intentions de "polluer" vos pages d'échanges, je cherche tout simplement à comprendre...
Sur mon formulaire "Electeur" en remplissant la zone de texte "date de naissance" je désire accéder à une fonction du genre :Après MAJ = UT_Calcul_Age() qui me permettra de remplir automatiquement la zone de texte "Age" en nombre d'années c'est à dire la différence entre la date de naissance et celle de ce jour.
C'est la rédaction de ce code qui me pose problème.
Je vous remercie pour votre amabilité et votre compréhension.
Marius SZYMCZAK
Nous sommes sensibles au fait que ton intention n'est pas de polluer mais celle de comprendre...
Commence par comprendre ce qui est simple :
- "Au secours" est un tître qui ne révêle en rien la nature du problème à traiter ===>> toute solution sera alors perdu pour tous les autres forumeurs cherchant à solutionner le même problème !
- il ne leur viendra de surcroît pas à l'idée de chercher dans le thème VB.Net des solutions à des problème VBA/ACCESS
Bonne journée, donc.
Bonjour Beau Bébé,
Comme la requète m'a donné satisfaction, j'ai créé une fonction qui me met à jour l'age à partir de l'inscription de la date de naissance dans le formulaire "Electeur".Ce qui me donne cela.
Function UT_Calcul_Age () '07/03/09
Dim Bd As Database, f As Form
Dim SQL As String
Dim FRS As Snapshot
Dim d As Double
Dim Age As String
Dim DateNaissance As String
Set f = Forms(Screen.ActiveForm.FormName)
Set Bd = CurrentDB()
SQL = "SELECT DISTINCTROW Electeur.Nom, Electeur.[N°Electeur]"
SQL = SQL & " FROM Electeur" SQL SQL & " WHERE ((Electeur.[N°Electeur] " & f![N°Electeur] & "));"
Set FRS = Bd.CreateSnapshot(SQL)
'DateDiff("y",[DateNaissance],Now())/365.25 AS Age
If Forms!Electeur.DateNaissance > 0 Then
Forms!Electeur.Age = DateDiff("y", Forms!Electeur.DateNaissance, Now) / 365.25 ' me trouve 66 et des poussières
Forms!Electeur.Date1 = Now 'la date1 est la date de modification
End If
'------------forms!Electeur.Age = DateDiff("y", forms!Electeur.DateNaissance, Now / 365.25) trouve -15761
Re
Une chose bizarre : Normalement, le "y" dans DateDiff représente Year = Année
Pourquoi le redivises-tu par 365.25 ? (nombre de jour annuel moyen sur une période entière de 4 ans)
Oups, je viens de vérifier dans l'aide, ce n'est pas "y" qu'il faut utiliser, mais "yyyy"
Récap de l'aide :
yyyy Année
q Trimestre
m Mois
y Jour de l'année
d Jour
w jour de la semaine
ww Semaine
h Heure
n Minute
s Seconde
D'après les derniers tests que je viens de faire, l'age calculé par DateDiff avec "yyyy" comme argument ne fait qu'un calcul arythmétique entre les années des deux dates et ne tient pas compte du jour ni du mois.
Donc, on ne peut pas dire si la date est révolue ou pas.
Si tu dois faire des tests précis sur l'age, mieux vaudrait utiliser son copain DateAdd (mêmes aruguments temporels) :
... Where DateAdd("yyyy", 18, [date de naissance]) >= Now
pour déterminer si la personne a 18 ans ou plus
PS : Je me suis permis de modifier le titre de ta question afin que d'autres, confrontés à la même interrogation, trouve cette réponse.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)