marius59360
Messages postés8Date d'inscriptionjeudi 6 mai 2010StatutMembreDernière intervention12 février 2011
-
5 mars 2009 à 23:41
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
7 mars 2009 à 14:56
Bonjour,
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..
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 mars 2009 à 13:54
Re Marius
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)
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 6 mars 2009 à 00:05
Nonsoir,
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).
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 mars 2009 à 00:35
Salut
Catégorie de la question .Net --> VBA
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)
marius59360
Messages postés8Date d'inscriptionjeudi 6 mai 2010StatutMembreDernière intervention12 février 2011 6 mars 2009 à 08:47
Bonjour "JMFO",Bonjour "JACK"
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
A on dot solèy
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 6 mars 2009 à 12:00
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.
marius59360
Messages postés8Date d'inscriptionjeudi 6 mai 2010StatutMembreDernière intervention12 février 2011 7 mars 2009 à 12:52
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 mars 2009 à 14:54
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)