Bonjour,
J'ai un formulaire où je saisie la date de naissance d'une personne et où j'ai un champ Age que je voudrai remplir automatiquement par un calcul avec la date de naissance.
Merci de me dire comment faire car je n'y arrive pas
Merci.
Bonjour,
J'ai un formulaire où je saisie la date de naissance d'une personne et où j'ai un champ Age que je voudrai remplir automatiquement par un calcul avec la date de naissance.
Merci de me dire comment faire car je n'y arrive pas
Merci.
Bonjour,
il existe la fonction Age ...
exemple de code avec une zone de saisie en format date et un libellé :
à bientôt,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 LIB_SansNom1 = Age(SAI_SansNom1,DateDuJour()) LIB_SansNom1 = Milieu(LIB_SansNom1, 3, 2) + " ans "
Nicolas
Bonjour,
Effectivement, la fonction Age sert à ça.
Pour le code, j'utilise plutot cette syntaxe (qui évite la fonction Milieu)
Mais le code de Nicolas_Jeanneau marche très bien (de visu en tout cas )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 dDateAge est une Date dDateAge = Age(SAI_Date1,DateDuJour()) LIB_SansNom1 = dDateAge..Année + " ans "
Merci Nicolas pour ton aide j'ai utiliser ton code sous cette forme :
Et ça a l air de bien marcher mais je voudrai savoir si dans la table générer par cette fiche la champ Age sera mis a jour automatiquement ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SAI_Age = Age(SAI_DateDeNaissance,DateDuJour()) SAI_Age = Milieu(SAI_Age, 1, 2)
Hé bien, tout dépend de la façon dont tu as relié les champs à ta table. Si le champ est lié à une rubrique, alors l'enregistrement se fera tout seul.
De toute manière, il faudra que tu fasses un petit calcul lors de l'ouverture de la fenêtre si tu veux ajuster l'âge en fonction du jour, car là il te le calcul à un instant t.
Dans la table, aucune mise à jour ne se fait toute seule, il doit y avoir un traitement qui fait le calcul et l'enregistre. Si tu le fais lors de l'ouverture de fenêtre, peut-être est-ce suffisant ou bien ces données doivent-elles être exploitée ailleurs ?
je pense comme vous l avez dit qu il faut que je programme ça sur mon tableau. J ai trouvé la colone que je dois codé mais je ne sais pas si je dois métre le code
- en Initiation de COL_Age(table 1)
- en Entrée de COL_Age(table 1)
- en Sortie de COL_Age(table 1)
- A chaque modification de COL_Age(table 1)
Hé bien je dirais dans la zone d'affichage d'une ligne pour l'initialisation de la table et la mise à jour des données.
Vous voulez dire
en Initiation de COL_Age(table 1) et A chaque modification de COL_Age(table 1)
Non pas dans un code de champs mais dans le code d'affichage d'une ligne de la table. Sélectionne la table au lieu de la colonne.
Patrick Catella
Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.
Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition
comme le dit Mogway, c'est sur la table et dans le code d'affichage d'une ligne. Cela marchera pour l'initialisation de la table et la modification des données dans la table, je me suis mal exprimé.
Si tu modifies les données dans une autre fenêtre, alors il faudra recharger la table ou modifier la ligne pour toutes les valeurs modifiées (dont l'âge si nécessaire).
bonjour j ai ce probléme quand j utilise ce code
quand je met une date comme 2011, 2010, 2007 il me retourne 10,20, 50 il me retourne l age+0 deux chiffre comment régler ce probléme?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SAI_Age = Age(SAI_DateDeNaissance,DateDuJour()) SAI_Age = Milieu(SAI_Age, 1, 2)
Bonjour,
Le code proposé par Nicolas_Jeanneau est
Si tu l'utilise comme il est écrit as-tu toujours ton problème?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Milieu(xxx, 3, 2)
Et si tu utilise le code de djejackk as-tu le problème?
la touche est ton amie. l'aide ne mord pas quand on la consulte...
PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)
Pensez à utiliser les votes et à cliquer sur , merci
avec le premier code j ai le méme probléme avec le deuxiéme j ai carément un chiffre négatif
le code que j utilise marche bien pour des age supérieur a 10ans mais pas ceux inférieur il m ajoute toujours un 0 aprés l age au lieu d avoir 7ans j ai 70ans
le probléme je pense est dans la longeur de la chaine retournée quand je met la longeur =2 cela marche bien pour la >10 mais pas les <10 par contre Quand je me la longueur = 1 cela marche trés bien pour les < 10 mais je n ai que ke premier chiffre pour les >10 exemple au lieu de 26 j ai 2, au lieu de 35 j ai 3
Bonjour
Essaie de passer par une variable chaine.
D'après l'aine la chaine retourne le nombre d'année sur 4 caractères.
Je pense que c'est le format de ton champ de saisie qui te pose problème.
Essaie ça
Sinon rajoute un teste sur SAI_DateDeNaissance pour connaitre sa longueur et en fonction tu prend le valeur sur 1 ou deux carctères, c'est a essayé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 sRetour est chaine = Age(SAI_DateDeNaissance,DateDuJour()) SAI_Age = gauche(sretour,4)
la touche est ton amie. l'aide ne mord pas quand on la consulte...
PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)
Pensez à utiliser les votes et à cliquer sur , merci
Est-ce que le champ âge est bien de type chaîne ?
Si c'est un numérique, n'y-t-il pas un format particulier avec complétion à droite par des 0 ? C'est le problème des longueurs qui me dérange ....
Fais un affichage du résultat du calcul dans un info pour savoir si c'est dans le champ qu'il y a un problème et non pas dans le calcul.
Bonjour
J'extrais ce code-ci d'un écran signalétique qui ne pose aucun problème.
Je viens de le re-tester pour des valeurs "extrêmes" soit
- un bicentenaire de 202 ans 6 mois 3 jours
- un nouveau-né de 1 jour .
A adapter à vos variables
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 DateTest est une Date = chaîneVersDate(MoiMême..ValeurAffichée) Années est une chaîne = NumériqueVersChaîne(Val(Age(DateTest)[[1 A 4]])) + " ans " Mois est une chaîne = NumériqueVersChaîne(Val(Age(DateTest)[[5 A 6]])) + " mois " Jours est une chaîne = NumériqueVersChaîne(Val(Age(DateTest)[[7 A 8]])) + " jours" SI Val(Années) = 0 ALORS Années = "" SI Val(Années) = 1 ALORS Années = "1 an " SI Val(Mois) = 0 ALORS Mois = "" SI Val(Jours) = 0 ALORS Jours = "" SI Val(Jours) = 1 ALORS Jours = " 1 jour" SAI_Age = Années + Mois + Jours
L'utilisation de DateTest est spécifique à ma situation : je pars d'un COMBO texte et non d'un champ "date".
[[ et ]] sont les opérateurs d'extraction de chaînes. Vous pouvez les remplacer par Droite, Gauche et Milieu.
En espérant que cela vous aidera,
Hemgé
Merci mail.spam j ai tester avec ton code mais ca me donne le méme problème mon chanp de saisie e de cette forme jjmmaaaa avec un petit clandrier a coté qui retourne aaaammjj
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 sRetour est chaine = Age(SAI_DateDeNaissance,DateDuJour()) SAI_Age = gauche(sretour,4)
mon champ age est de type numérique comment faire un affichage dans un info?
Re bonjour
Votre champ de saisie de la date de naissance est un champ date.
C'est déjà bon.
A partir de là, calculer un âge est simple avec la fonction Age() qui vous a été renseignée.
Sa syntaxe :
NB : la seconde date <Date de calcul> est optionnelle et est remplacée automatiquement par la date du jour si elle est omise.<ChaineRésultat> = Age(<Date de naissance> [, <Date de calcul>])
Dans votre cas, vous pouvez donc vous en passer.
La fonctionvous renvoie une chaîne de caractère au même format qu'un champ date, c'est à dire : AAAAMMJJ, ou âge en années, mois et jours.
Il suffit d'extraire ces informations
- soit sous forme de chaîne comme proposé par Nicolas_Jeanneau (fonction milieu) ou moi-même (opérateurs d'extraction [[ et ]])
- soit en passant par les propriétés ..An, ..Mois et ..Jour attaché&es aux variables de type Date, comme proposé par djejackk, après avoir affecté le résultat de Age() à une date.
(superbe idée, que je vais retenir. Merci djejackk)
La fonction devient
Le code que je vous proposais tout à l'heure devient alors, en reprenant les variables utilisées dans la discussion :<DateRésultat> = Age(<Date de naissance> [, <Date de calcul>])
Simplement, puisque vous avez de ne plus stocker l'âge et il vaut effectivement éviter cela, le type du champ Age n'a plus beaucoup d'importance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 dRetour est une Date = Age(SAI_DateDeNaissance) //on n'utilise pas la date du jour Années est une chaîne = NumériqueVersChaîne(dRetour..Année) + " ans " Mois est une chaîne = NumériqueVersChaîne(dRetour..Mois) + " mois " Jours est une chaîne = NumériqueVersChaîne(dRetour..Jour) + " jours" SI Val(Années) = 0 ALORS Années = "" SI Val(Années) = 1 ALORS Années = "1 an " SI Val(Mois) = 0 ALORS Mois = "" SI Val(Jours) = 0 ALORS Jours = "" SI Val(Jours) = 1 ALORS Jours = " 1 jour" SAI_Age = Années + Mois + Jours // on peut évidemment supprimer l'affichage des jours etc .
Je vous suggère de transformer votre champ Numérique (où réside probablement le problème) en champ Texte et d'afficher l'âge sous forme de chaîne formatée comme je vous le propose ou en simplifiant le format (remplacer "ans" par un " - " par exemple).
Le résultat doit être :
61 ans 11 mois 3 jours
61 ans 2 jours
61 ans
6 mois 3 jours
1 jour
Bon travail et bonne soirée
Hemgé
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager