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 :

Fonction Age pour calculer age personne [WD18]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut Fonction Age pour calculer age personne
    A partir de ma requête, j'ai cliqué sur la rubrique calculée pour afficher la fonction Age WLangage pour obtenir la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WL.Age(GestionPersonnel.DateDeNaissance)
    En faisant le test, j'obtiens les infos suivantes:
    "00480427" au lieu de 48 ans, 4 mois et 27 jours
    "00211100" au lieu de 21 ans et 11 mois
    Je me suis demandé comment obtenir exactement
    48 ans, 4 mois et 27 jours
    21 ans et 11 mois
    Merci infiniment pour votre précieuse aide!!!!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 204
    Points : 12 784
    Points
    12 784
    Par défaut
    Bonjour,
    Les données sont bien dans la valeur retournée, au format AAAAMMJJ:
    00480427 => 0048 04 27 => 0048 ans, 04 mois et 27 jours
    Il suffit de mettre cette valeur dans une variable de type date, et le tour est joué.

    Tatayo.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Les données sont bien dans la valeur retournée, au format AAAAMMJJ:
    00480427 => 0048 04 27 => 0048 ans, 04 mois et 27 jours
    Il suffit de mettre cette valeur dans une variable de type date, et le tour est joué.
    Merci Tatayo pour la réponse, mais, tu sais, j'ai déjà pensé à ce que tu dis là, mais en aucune manière, je ne réussis pas à avoir les résultats voulus, exactement comme ceci :
    0048 ans, 04 mois et 27 jours , sinon, s'agit-il de ma version? (W18 01F180056f) Car, en ce qui concerne les masques de saisie/Affichage, j'ai presque tout essayé, je suis pourtant convaincu que les résultats que je veux avoir, sont tout à fait possibles!!!
    Y a-t-il d'autres possibilités?
    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 204
    Points : 12 784
    Points
    12 784
    Par défaut
    Je ne sais pas si on peut le faire avec un format d'affichage, mais avec un peu de code c'est simple: en stockant le résultat dans une variable de type date (avec chaineversdate()), il est possible d'isoler chaque "partie" avec ..année, ..jour, ..mois.
    Ensuite un simple construitchaine(), et le tour est joué.

    Tatayo.

  5. #5
    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,

    Avez-vous lu l'aide ? On y trouve un exemple qui illustre la solution que tatayo vous a donnée.

    // Quel âge avez-vous ?
    dMonAge est une Date
    dMonAge = Age("19790201", "20061025")
    InfoConstruit("Vous avez : %1 ans %2 mois %3 jours", dMonAge..Année, dMonAge..Mois, dMonAge..Jour)
    // Affiche : "Vous avez : 27 ans 08 mois 24 jours"
    Après cela, vous devrez quand même gérer le "0 ans", "0 mois" et "0 jours" avant d'appeler ChaineConstruit() ...
    Faites en une petite routine, cela vous sera utile à l'avenir.

    Hemgé

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Merci, pour la rapidité
    En fait, je suis ton raisonnement, mais tu peux me donner un peu plus clair le code exact, j'arrive pas à bien te suivre.
    Merci

  7. #7
    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
    En principe, le code, c'est votre boulot ... et nous vous aidons à le mettre au point !

    La première idée est que on n'écrit pas "0 ans 2 mois 3 jours", ni "60 ans 0 mois 6 jours", donc si il y a 0 ans, mois ou jours, cette partie de la chaîne ne doit pas apparaître, pour obtenir "2 mois 3 jours" ou "60 ans 6 jours".

    La seconde idée est qu'on peut aussi tenir compte du singulier et du pluriel, suivant qu'il y a plusieurs ans ou plusieurs jours, mois étant invariable.
    Si on ne veut pas se fatiguer, on utilise "an(s)" et "jour(s)".

    Si on reprend l'exemple de la doc, on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sAgeAnnées, sAgeMois, AgeJours sont des chaines
    SELON dMonAge..années
       CAS 0
          sAgeAnnées = ""
       //Cas 1
          sAgeAnnées = NumériqueVersChaine(dMonAge..année) + " an "
       AUTRE CAS
          sAgeAnnées = NumériqueVersChaine(dMonAge..année) + " ans "
    FIN
    //
    //idem pour mois et jours
    //
    Mon Message = "Vous avez : " + sAgeAnnées + sAgeMois + sAgeJours
    Si vous rencontrez un problème pour compléter le code, postez nous votre code.

    Bon travail

    Hemgé

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Merci à vous tous qui partagent vos talents, nous aident à avoir beaucoup plus de notion et de connaissance sur Windev en tant que débutant
    Thanks

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Bonjour!
    Compte tenu de tout ce qui est dit ci-dessus, mon problème réside maintenant dans le fait que je ne sais pas comment faire pour que le code tient compte du code de ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WL.Age(GestionPersonnel.DateDeNaissance)
    voici mon actuel code que j'ai mis en Procédure locale, mais qui ne passe toujours pas:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    sAgeAnnée, sAgeMois, sAgeJours sont des chaînes
    dAteDeNaissance est une Date
    dMonAge est une Date
    dMonAge= PartieEntière((DateVersEntier(DateDuJour)-DateVersEntier(dAteDeNaissance))/365) // le problème peut être ici, ceci doit tenir compte du code WL.Age(GestionPersonnel.DateDeNaissance)
    SELON dMonAge..Année
    	CAS 0
    		sAgeAnnée = ""
    		//Cas 1
    		sAgeAnnée = NumériqueVersChaîne(dMonAge..Année) + " an "
    	AUTRE CAS
    		sAgeAnnée = NumériqueVersChaîne(dMonAge..Année) + " ans "
    FIN
    SELON dMonAge..Mois
    	CAS 0
    		sAgeMois = ""
    		sAgeMois = NumériqueVersChaîne(dMonAge..Mois)+ " mois "
    	AUTRE CAS
    		sAgeMois = NumériqueVersChaîne(dMonAge..Mois)+ "mois"
    FIN
    SELON dMonAge..Jour
    	CAS 0 
    		sAgeJours = ""
    		sAgeJours= NumériqueVersChaîne(dMonAge..Jour)+ "jour"
    	AUTRE CAS
    		sAgeJours= NumériqueVersChaîne(dMonAge..Jour)+ " jours"
    FIN
    //
    COL_Age=ChaîneConstruit("%1 ans, %2 mois et %3 jours", dMonAge..Année, dMonAge..Mois, dMonAge..Jour)
    l'Age construit à partir de la requête doit être placé dans la colonne COL_Age sous format ans...mois...jours
    Merci infiniment pour votre aide......

  10. #10
    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,

    qui ne passe toujours pas:
    Qu'est-ce qui ne passe pas ? Pouvez-vous être plus explicite ?

    Concernant le calcul de l'âge, pourquoi avez-vous renoncé à la fonction Age() que vous avez pourtant explorée en début de cette discussion ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dMonAge = Age(DateDeNaissance, DateDuJour)
    Cela vous donne l'âge au format date de WD et vous pouvez en exploiter les propriétés.

    Personnellement, je ne crois pas que cela soit une bonne idée de calculer l'âge dans votre requête. Je préfère conserver des requêtes aussi standard que possible et traiter les données dans le cadre de la procédure.
    Donc, je me contenterais de rapatrier dDateDeNaissance (variable de type date) et de passer cela à la procédure de calcul et mise en page de l"âge.

    Pour chipoter, si vous ne traitez pas le 1 jour, 1 an, alors supprimez les lignes de code mises en commentaire et utilisez "jour(s)" et "an(s)" comme suggéré.
    Sinon libérez le code au niveau du traitement des années et reprenez le au niveau des jours.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Tiens, ça distrait un peu de faire des codes comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    PROCEDURE AgeEnLettres(LOCAL dDateNaiss est une Date)
    LOCAL
    	sAge est une chaîne
     
    dDateNaiss = Age(dDateNaiss)
    SI dDateNaiss..Année > 0 ALORS sAge += ["$"] + Val(dDateNaiss..Année) + " an" + Répète("s", dDateNaiss..Année > 1)
    SI dDateNaiss..Mois > 0 ALORS sAge += ["$"] + Val(dDateNaiss..Mois) + " mois"
    SI dDateNaiss..Jour > 0 ALORS sAge += ["$"] + Val(dDateNaiss..Jour) + " jour" + Répète("s", dDateNaiss..Jour > 1)
    sAge = sAge[[A PositionOccurrence(sAge, "$", ChaîneOccurrence(sAge, "$")) -1]] + " et " + sAge[[1 + PositionOccurrence(sAge, "$", ChaîneOccurrence(sAge, "$")) A]]
    sAge = Remplace(sAge, "$", ", ")
    RENVOYER sAge

  12. #12
    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
    Impressionnant, "n'est-il pas ?"

    Mais, parce qu'il y a des mais, du moins me semble-t-il :

    • Est-ce que ce code n'est pas trop compact pour la bonne compréhension de zonoelson ?
    • idem pour le recyclage de dDateNaiss et sAge
    • Les propriétés ..Années, ..Mois et ..Jour renvoient des entiers. Donc, val(d'un entier) m'interpelle.
    • Je préfère NumériqueVersChaîne(dDateNaiss..Année) à ["$"] + Val(dDateNaiss..Année) + " an" qui repose sur une conversion implicite (que j'évite soigneusement).
    • Il me semble qu'on pourrait se passer du "$" inaugural (ligne 6), qui finit par rester en tête de sAge (je ne dispose pas de Windev ici et ne peux tester)
    • Si j'ai bien suivi, la ligne 10 remplace le "$" inaugural par une "," , ce qui doit être supprimé. (peut-être le résidu d'un copier/coller ?)


    Mais, cela reste une belle pièce de code.

  13. #13
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Impressionnant, "n'est-il pas ?"

    Mais, parce qu'il y a des mais, du moins me semble-t-il :
    => Oui oui, il y a des mais
    • Est-ce que ce code n'est pas trop compact pour la bonne compréhension de zonoelson ?
      => Peut-être, pourquoi pas lui ajouter un nPos = PositionOccurrence(sAge, "$", ChaîneOccurrence(sAge, "$")), ça serait plus lisible.
    • idem pour le recyclage de dDateNaiss et sAge
      => Ce sont dDateNaiss est déclarée "locale", On peut donc travailler dessus sans réserver une zone mémoire supplémentaire
    • Les propriétés ..Années, ..Mois et ..Jour renvoient des entiers. Donc, val(d'un entier) m'interpelle.
      => Erreur de ma part, je pensais que ..année renvoyait une chaîne sur 4.
    • Je préfère NumériqueVersChaîne(dDateNaiss..Année) à ["$"] + Val(dDateNaiss..Année) + " an" qui repose sur une conversion implicite (que j'évite soigneusement).
      => Les conversions implicites sont bien gérées en WD, inutile de passer une fonction NumeriqueVersChaine dans ce cas. ["$"] + dDateNaiss..Année + " an" suffit.
    • Il me semble qu'on pourrait se passer du "$" inaugural (ligne 6), qui finit par rester en tête de sAge (je ne dispose pas de Windev ici et ne peux tester)
      => Oui, je l'ai mis car j'avais inversé le sens de lecture de l'age au début. ("vous avez 13 jours et 36 ans" au lieu de "36 ans et 13 jours")
    • Si j'ai bien suivi, la ligne 10 remplace le "$" inaugural par une "," , ce qui doit être supprimé. (peut-être le résidu d'un copier/coller ?)
      => Non, il est là pour remplacer le premier $ par un séparateur choisi. Je trouvais le texte plus lisible avec une virgule, mais le remplacement par un espace fonctionnera tout aussi bien.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Merci à tous!!!!
    J'espère que ceci sera mon dernier message sur ce sujet,
    Merci à Bowen, le code que vous avez, est indiscutablement impressionnant, mais........
    Parce qu'il y a des mais, du moins.........je préfère l'autre pour le moment.
    En créant une nouvelle fenêtre, pour essayer mon code, je fais ceci, créer un champ de saisie et un bouton de commande, j'ai testé ceci et ça marche comme il fallait.....
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    sAgeAnnée, sAgeMois, sAgeJours sont des chaînes
    dMonAge est une Date
    dMonAge= Age(SAI_DateDeNaissance,DateDuJour)
    SELON dMonAge..Année
    	CAS 0
    		sAgeAnnée = ""
    		//Cas 1
    		sAgeAnnée = NumériqueVersChaîne(dMonAge..Année) + " an "
    	AUTRE CAS
    		sAgeAnnée = NumériqueVersChaîne(dMonAge..Année) + " ans "
    FIN
    SELON dMonAge..Mois
    	CAS 0
    		sAgeMois = ""
    		sAgeMois = NumériqueVersChaîne(dMonAge..Mois)+ " mois "
    	AUTRE CAS
    		sAgeMois = NumériqueVersChaîne(dMonAge..Mois)+ "mois"
    FIN
    SELON dMonAge..Jour
    	CAS 0 
    		sAgeJours = ""
    		sAgeJours= NumériqueVersChaîne(dMonAge..Jour)+ "jour"
    	AUTRE CAS
    		sAgeJours= NumériqueVersChaîne(dMonAge..Jour)+ " jours"
    FIN
    //
    InfoConstruit("%1 ans, %2 mois et %3 jours", dMonAge..Année, dMonAge..Mois, dMonAge..Jour)
    Alors, je reviens sur mon projet en reproduisant le même code, légèrement modifié, je n'arriver pas à gérer/mettre dans le code les pluriels an/ans jour/jours ; je n'arrive pas à afficher dans ma table, dans la colonne voulue, COL_Age ;
    ; j'en conclus qu'il s'agit d'une erreur d'emplacement de code et je me demande où exactement les mettre?
    Voici le code que je suis presque sûr qu'il s'agit d'un bon code
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    sAgeAnnée, sAgeMois, sAgeJours sont des chaînes
    dAteDeNaissance est une Date
    dMonAge est une Date
    dMonAge= Age(dAteDeNaissance,DateDuJour)
    SELON dMonAge..Année
    	CAS 0
    		sAgeAnnée = ""
    		//Cas 1
    		sAgeAnnée = NumériqueVersChaîne(dMonAge..Année) + " an "
    	AUTRE CAS
    		sAgeAnnée = NumériqueVersChaîne(dMonAge..Année) + " ans "
    FIN
    SELON dMonAge..Mois
    	CAS 0
    		sAgeMois = ""
    		sAgeMois = NumériqueVersChaîne(dMonAge..Mois)+ " mois "
    	AUTRE CAS
    		sAgeMois = NumériqueVersChaîne(dMonAge..Mois)+ "mois"
    FIN
    SELON dMonAge..Jour
    	CAS 0 
    		sAgeJours = ""
    		sAgeJours= NumériqueVersChaîne(dMonAge..Jour)+ "jour"
    	AUTRE CAS
    		sAgeJours= NumériqueVersChaîne(dMonAge..Jour)+ " jours"
    FIN
    //
    COL_Age=ChaîneConstruit("%1 ans, %2 mois et %3 jours", dMonAge..Année, dMonAge..Mois, dMonAge..Jour) // pour l’insérer dans la colonne COL_Age

  15. #15
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Heu... Tu déclares 3 variables sAgeAnnée, sAgeMois, sAgeJours dont tu ne te sers pas dans ton instruction finale.
    Si on suit ton exemple, il faudrait plutôt un truc de ce genre :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    sAgeAnnée, sAgeMois, sAgeJours sont des chaînes
    dAteDeNaissance est une Date
    dMonAge est une Date
    dMonAge= Age(dAteDeNaissance,DateDuJour)
    SELON dMonAge..Année
    	CAS 0
    		//sAgeAnnée = ""
    	Cas 1
    		sAgeAnnée = NumériqueVersChaîne(dMonAge..Année) + " an "
    	AUTRE CAS
    		sAgeAnnée = NumériqueVersChaîne(dMonAge..Année) + " ans "
    FIN
    SELON dMonAge..Mois
    	CAS 0
    		//sAgeMois = ""
    	AUTRE CAS
    		sAgeMois = NumériqueVersChaîne(dMonAge..Mois)+ "mois"
    FIN
    SELON dMonAge..Jour
    	CAS 0 
    		//sAgeJours = ""
    	CAS 1
    		sAgeJours= NumériqueVersChaîne(dMonAge..Jour)+ "jour"
    	AUTRE CAS
    		sAgeJours= NumériqueVersChaîne(dMonAge..Jour)+ " jours"
    FIN
    //
    COL_Age=ChaîneConstruit("%1 %2 %3", sAgeAnnée, sAgeMois, sAgeJours) // pour l’insérer dans la colonne COL_Age
    Il reste à ajouter la gestion des différents cas pour le placement du "et". (qui doit venir remplacer le dernier espace)

  16. #16
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2013
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    j'en conclus qu'il s'agit d'une erreur d'emplacement de code et je me demande où exactement les mettre?

  17. #17
    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,

    Pour être franc, vous semblez ne pas comprendre les codes qui vous ont été livrés et attendre qu'on fasse le boulot pour vous.

    Vous vous souviendrez peut-être de mon second message :
    En principe, le code, c'est votre boulot ... et nous vous aidons à le mettre au point !
    On est loin, très loin de ce cas de figure.

    Dans votre code, vous reprenez la construction d'une chaîne avec des paramètres et les sous-chaînes "ans", "mois ", "jours", alors que celles-ci apparaissent clairement entre guillemets dans le code qui vous a été fourni.
    Vous ne savez vraisemblablement pas déchiffrer ou n'avez pas fait l'effort de déchiffrer ce code.

    Vous auriez dû (re)lire la doc sur l'instruction SELON / CAS et vous auriez pu avancer sur le //Cas 1 (// mis en commentaire) du SELON dMonAge..Année, comprendre qu'il gérait l'option 1 année et le passer en code actif, pour le reproduire ensuite pour la gestion des jours.
    Pas des mois, puis mois est invariable.

    OK, en espérant que vous vous allez prendre la doc et décrypter le code et son fonctionnement, ce qui rejoindrait alors la finalité du Forum, je finalise le code pour vous.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    sAgeAnnées, sAgeMois, sAgeJours sont des chaînes
    dAteDeNaissance est une Date
    dMonAge est une Date
    dMonAge= Age(dAteDeNaissance,DateDuJour)
    SELON dMonAge..Année
    	CAS 0 //signifie quand dMonAge..Années = 0
    		sAgeAnnées = ""
    		//Cas 1
     	CAS 1  //signifie quand dMonAge..Années = 1
    		sAgeAnnées = NumériqueVersChaîne(dMonAge..Année) + " an "
    	AUTRE CAS // touts les autres cas de figure, même le cas de valeurs négatives ! qui ne sont cependant pas traitées
    		sAgeAnnées = NumériqueVersChaîne(dMonAge..Année) + " ans "
    FIN
    SELON dMonAge..Mois
    	CAS 0
    		sAgeMois = ""
    //on ne traite pas CAS 1 puisque "mois" est invariable
    		sAgeMois = NumériqueVersChaîne(dMonAge..Mois)+ " mois "
    	AUTRE CAS
    		sAgeMois = NumériqueVersChaîne(dMonAge..Mois)+ " mois"
    FIN
    SELON dMonAge..Jour
    	CAS 0 
    		sAgeJours = ""
    	CAS 1
    		sAgeJours= NumériqueVersChaîne(dMonAge..Jour)+ "jour"
    	AUTRE CAS
    		sAgeJours= NumériqueVersChaîne(dMonAge..Jour)+ " jours"
    FIN
    //
    COL_Age= sAgeAnnée + sAgeMois + sAgeJours // pour l’insérer dans la colonne COL_Age
    Ceci suppose que votre colonne COL_Age attend une variable de type chaîne.

    J'espère qu'ainsi, tout fonctionnera selon vos attentes.

    Hemgé

  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
    @ Bowen

    • Est-ce que ce code n'est pas trop compact pour la bonne compréhension de zonoelson ?
      => Peut-être, pourquoi pas lui ajouter un nPos = PositionOccurrence(sAge, "$", ChaîneOccurrence(sAge, "$")), ça serait plus lisible.
      Non, non, il faut être beaucoup plus "évident", plus basique à lire
    • idem pour le recyclage de dDateNaiss et sAge
      => Ce sont dDateNaiss est déclarée "locale", On peut donc travailler dessus sans réserver une zone mémoire supplémentaire
      Pas de problème pour moi, mais cela nuit à la clarté du propos, indispensable pour notre interlocuteur.
    • Je préfère NumériqueVersChaîne(dDateNaiss..Année) à ["$"] + Val(dDateNaiss..Année) + " an" qui repose sur une conversion implicite (que j'évite soigneusement).
      => Les conversions implicites sont bien gérées en WD, inutile de passer une fonction NumeriqueVersChaine dans ce cas. ["$"] + dDateNaiss..Année + " an" suffit.
      J'évite les conversions implicites par "discipline de codification" (de même que les GOTO et autres) et les déconseillerais certainement à quelqu'un qui ne sait pas encore "exactement" ce qu'il fait
    [/QUOTE]

    Dommage que cela ne fonctionne pas avec toutes les langues, notamment pas le Néerlandais (indispensable en Belgique), sinon je l'aurais repris dans la routine d'âge (multilingue) que j'enrichis peu à peu, pour la simplifier.

  19. #19
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Points : 1 100
    Points
    1 100
    Par défaut
    Qu'est-ce qui ne fonctionne pas en néerlandais ?
    L'ordre des jours-mois-année est-il inversé ?

  20. #20
    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
    Citation Envoyé par Bowen Voir le message
    Qu'est-ce qui ne fonctionne pas en néerlandais ?
    L'ordre des jours-mois-année est-il inversé ?
    En anglais et en français, on ajoute un s et c'est OK.

    Mais en néerlandais, si le pluriel des noms se fait habituellement en ajoutant -EN ou -S, la difficulté réside dans l'application des règles d'orthographe, dans l'emploi ou non du pluriel qui ne correspond pas toujours au français ainsi que dans les pluriels irréguliers.

    Et ensuite, quid de l'allemand, de l'espagnol etc ?

    Donc, on y va gentiment, mais je rouvrirai mon code pour voir si, malgré tout, il n'y a pas quelque chose à retenir.

    Hemgé

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Calcul de l'age d'une personne
    Par stephyugh dans le forum Développement
    Réponses: 12
    Dernier message: 21/03/2017, 23h09
  2. formule pour calculer age
    Par Daniela dans le forum Excel
    Réponses: 3
    Dernier message: 19/09/2011, 15h21
  3. Calcul age d'une personne
    Par amirad dans le forum VB.NET
    Réponses: 6
    Dernier message: 29/07/2009, 11h55
  4. Formule(s) pour calculer l'age
    Par Eric5151 dans le forum Deski
    Réponses: 3
    Dernier message: 28/05/2008, 16h15
  5. Calcul Age
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/01/2005, 08h56

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