IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

calcul d'age automatique [WD15]


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 0
    Points
    0
    Par défaut calcul d'age automatique
    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.
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    il existe la fonction Age ...

    exemple de code avec une zone de saisie en format date et un libellé :

    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 "
    à bientôt,

    Nicolas

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 276
    Points : 739
    Points
    739
    Par défaut
    Bonjour,

    Effectivement, la fonction Age sert à ça.
    Pour le code, j'utilise plutot cette syntaxe (qui évite la fonction Milieu)

    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 "
    Mais le code de Nicolas_Jeanneau marche très bien (de visu en tout cas )

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Nicolas_Jeanneau Voir le message
    Bonjour,

    il existe la fonction Age ...

    exemple de code avec une zone de saisie en format date et un libellé :

    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 "
    Merci Nicolas pour ton aide j'ai utiliser ton code sous cette forme :

    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)
    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 ?

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    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 ?

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 0
    Points
    0
    Par défaut
    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)

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    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.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 0
    Points
    0
    Par défaut
    Vous voulez dire
    en Initiation de COL_Age(table 1) et A chaque modification de COL_Age(table 1)

  9. #9
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    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

  10. #10
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    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).

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 0
    Points
    0
    Par défaut
    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)

  12. #12
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Le code proposé par Nicolas_Jeanneau est
    Si tu l'utilise comme il est écrit as-tu toujours ton problème?
    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

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 0
    Points
    0
    Par défaut
    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

  14. #14
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    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

    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)
    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é.
    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

  15. #15
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    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.

  16. #16
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    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 .

    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
    A adapter à vos variables
    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é

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2012
    Messages : 64
    Points : 0
    Points
    0
    Par défaut
    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)
    Citation Envoyé par mail.spam Voir le message
    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é.

    Citation Envoyé par Nicolas_Jeanneau Voir le message
    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.
    mon champ age est de type numérique comment faire un affichage dans un info?

  18. #18
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    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 :
    <ChaineRésultat> = Age(<Date de naissance> [, <Date de calcul>])
    NB : la seconde date <Date de calcul> est optionnelle et est remplacée automatiquement par la date du jour si elle est omise.
    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
    <DateRésultat> = Age(<Date de naissance> [, <Date de calcul>])
    Le code que je vous proposais tout à l'heure devient alors, en reprenant les variables utilisées dans la discussion :

    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 .
    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.

    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é

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requete select: calcul d'age
    Par amelhajer dans le forum Langage SQL
    Réponses: 1
    Dernier message: 29/03/2007, 10h14
  2. [BO XIr2] Calcul d'age dans le Designer
    Par BOginer dans le forum Designer
    Réponses: 1
    Dernier message: 20/02/2007, 15h59
  3. Calculer une echelle automatiquement
    Par titoine1978 dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 08/08/2006, 00h45
  4. [VBA-E] Calcul de formule automatique
    Par ashurai dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/05/2006, 16h43
  5. Calculer l'age d'une personne
    Par Oberown dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 27/09/2005, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo