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 heure minutes [WD17]


Sujet :

WinDev

  1. #1
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut calcul heure minutes
    Bonjour,

    Je tourne en rond, j'ai utilisé les formules suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    vdécimal=0
    vheure=""
    //etat_edition_travail_heures.Montant_heure = etat_edition_travail_heures.Montant_minutes / 60
    vmontantminutes = etat_edition_travail_heures.Montant_minutes / 60
    vdécimal = PartieDécimale(vmontantminutes) * 60
     
    vheure = PartieEntière(vmontantminutes) + "." + vdécimal
    etat_edition_travail_heures.Montant_heure=vheure
    ceci marche parfaitement bien sauf quand on a une décimale qui commence par 0.0xxxx
    dans ce cas le zéro après la décimale est mangé hélas je pourrais manipuler l'ensemble par une chaine mais ça m'embête si vous aviez une idée je vous en remercie

    avez vous pu résoudre ce problème ?

    Merci par avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Pourquoi faire des traitements alambiqués pour séparer partie entière/partie décimal, alors que tu peux utiliser un masque de saisie, ou utiliser NumeriqueVersChaine() pour formatter ta valeur ?

    Tatayo.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    y'a pas de masque c'est un traitement de fin de mois qui calcule le nombre d'heures par employé

    j'ai la version 23 je pourrais peut-être voir si ça résout mon problème

  4. #4
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Pourquoi faire des traitements alambiqués pour séparer partie entière/partie décimal, alors que tu peux utiliser un masque de saisie, ou utiliser NumeriqueVersChaine() pour formatter ta valeur ?

    Tatayo.
    j'ai essayé ça

    edit : je veux trouver la meilleure Façon de faire

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Plus je regarde ton code, moins je comprends ce que tu veux faire.

    Est-ce que tu peux nous donner des exemples de "Montant_Minute" et les valeurs correspondantes pour "etat_edition_travail_heures.Montant_heure" ?

    Tatayo.

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 052
    Points : 9 387
    Points
    9 387
    Par défaut
    Tu as des numériques ( vmontantminutes et vdécimal)
    Tu veux convertir ces numériques vers des chaines (vheure) : tu veux une mremière chaine pour convertir vmontantminutes , puis une 2ème chaine pour vdécimal, et ensuite tu veux concaténer ces 2 chaines, avec un "." entre les 2.

    Pour convertir un numérique en chaine, il y a une fonction toute faite : NumériqueVersChaine()
    Si tu lis la doc de cette fonction, tu trouveras qu'en mettant les bons paramètres, tu obtiendras le résultat voulu.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #7
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 804
    Points : 5 251
    Points
    5 251
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    On a aussi les propriétés EnHeure() et EnMinute(), ainsi que ..Heure et ..Minute. Tout dépend de ce que l'on veut faire.
    E.g. pour la facture d'un travail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    duDuréeTravail est Durée
    rMultTravail est réel
    moTarifHoraire est monétaire
     
    moTarifHoraire=50
     
    duDuréeTravail..Heure=1
    duDuréeTravail..Minute=30
     
    rMultTravail=duDuréeTravail..EnHeures
     
    InfoConstruit("Travaillé :%1%2Tarif horaire :%3€%2Montant dû %4 € HT",DuréeVersChaîne(duDuréeTravail,"HH:MM"),...
    				CRLF,moTarifHoraire,rMultTravail*moTarifHoraire)
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  8. #8
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Plus je regarde ton code, moins je comprends ce que tu veux faire.

    Est-ce que tu peux nous donner des exemples de "Montant_Minute" et les valeurs correspondantes pour "etat_edition_travail_heures.Montant_heure" ?

    Tatayo.
    Merci de prendre de ton temps pour moi

    alors voila

    106 minutes divisé par 60 donne 1.766666
    j'ai vu sur internet
    que l'on sépare la partie entière donc 1
    et la partie décimale 0.7666666
    la partie décimale on la multiplie par 60 ce qui donne 46

    ce qui est vrai 106 minutes est bien égal a 1 heure et 46 minutes

    par contre la même opération sur 122 minutes

    me donne 2.20 minutes en fait il me mange le 0,03 et me calcule 3 le zéro de la partie décimale est mangé

    j'espère avoir été clair
    je ne veux pas passer par les fonctions entiervers heure ou autre mais bon si j'ai pas d'autre solution je le ferais peut-être

    en tout cas merci à vous tous qui vous intéressez à mon problème

  9. #9
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Bonjour,
    On a aussi les propriétés EnHeure() et EnMinute(), ainsi que ..Heure et ..Minute. Tout dépend de ce que l'on veut faire.
    E.g. pour la facture d'un travail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    duDuréeTravail est Durée
    rMultTravail est réel
    moTarifHoraire est monétaire
     
    moTarifHoraire=50
     
    duDuréeTravail..Heure=1
    duDuréeTravail..Minute=30
     
    rMultTravail=duDuréeTravail..EnHeures
     
    InfoConstruit("Travaillé :%1%2Tarif horaire :%3€%2Montant dû %4 € HT",DuréeVersChaîne(duDuréeTravail,"HH:MM"),...
    				CRLF,moTarifHoraire,rMultTravail*moTarifHoraire)
    merci je vais étudier cette piste lundi la je suis en week-end

  10. #10
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 052
    Points : 9 387
    Points
    9 387
    Par défaut
    La méthode de Voroltinquo te donnera bien 2 pour le nombre d'heures, puis 2 pour le nombre de minutes, si tu pars de 122minutes. Sans passer par des divisions et des multiplications par 60.

    Mais pour convertir le nombre 2 ( 2 minutes) en "02" parce que tu veux voir ce 0, il faut passer par NumériqueVersChaine.

    Tu peux aussi faire des calculs sauvages : 2 heures , plus 2 minutes, tu calcules ce nombre : Nbreheure + nbreminutes /100, ça te donne le nombre 2.02 et selon que tu as de la chance ou pas, selon ta configuration, ça affiche 2.02 ou 2,02.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Donc ici il s'agit d'une durée, dans ce cas tu as (comme souvent avec Windev) une fonction toute faite: DuréeVersChaine().
    L'aide te fournit même un exemple qui fait exactement ce que tu cherches.

    Tatayo.

  12. #12
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    Merci à vous tous

    Lundi j'essaie ce que vous me suggérez et je vous tient informé du résultat. je posterait le code final pour toute personne qui aurait aussi ce soucis.


    Bon week-end

  13. #13
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    Bonjour à tous,

    J'ai tenté de me connecter ce matin au forum mais je n'y suis pas arrivé, ce qui m'a un peu privé de toutes les indications que vous m'avez donné.
    Je connais bien les fonctions numériqeverschaine et autres. J'ai aussi regardé les fonctions que volterino m'avait indiqué ..heure ..minute etc.

    Au final je suis repartit vers mon idée initiale. J'ai un nombre total de minutes et pour un rapport je doit l'afficher en heure minutes. Voici ce que j'ai donc écrit

    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
     
    vheure est une chaîne
    vdécimal est un monétaire
    vmontantminutes est un monétaire
     
     
    vdécimal=0
    vheure=""
     
    vmontantminutes = etat_edition_travail_heures.Montant_minutes / 60
    vdécimal=PartieDécimale(vmontantminutes) * 60
    vdécimal=Arrondi(vdécimal) 
     
    vheure = PartieEntière(vmontantminutes) + "." + vdécimal
    SI vdécimal < 10 ALORS
    	vheure = PartieEntière(vmontantminutes) + ".0" + Gauche(vdécimal,1)
    FIN
    etat_edition_travail_heures.Montant_heure=vheure
    *etat_edition_travail_heures.Montant_heure est un numérique d'un champ de l'éditeur d'état.

    donc je part bien d'un nombre que je dois passer à une chaine formaté.

    Même si pas très élégant ce code fonctionne et 122 me donne bien 2:02

    peut on faire mieux ? j'en suis certain et dès que j'ai un peu de temps j'y retourne pour reregarder vos commentaires.
    je ne clos donc pas cette discutions en espérant pourvoir lire vos critiques et/ou commentaires.

    Encore une fois merci pour votre intérêt et le temps passé à me lire.

  14. #14
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 804
    Points : 5 251
    Points
    5 251
    Billets dans le blog
    1
    Par défaut
    Dans ton cas, il faut passer par la 2° syntaxe de EnMinute()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    duDuréeTravail est Durée
     
    duDuréTravail.EnMinute()=122
     
    Trace(DuréeVersChaine(duDuréeTravail,"HH.MM")
    Attention MM doit être en majuscule sinon tu te retrouves avec des mois.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  15. #15
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Dans ton cas, il faut passer par la 2° syntaxe de EnMinute()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    duDuréeTravail est Durée
     
    duDuréTravail.EnMinute()=122
     
    Trace(DuréeVersChaine(duDuréeTravail,"HH.MM")
    Attention MM doit être en majuscule sinon tu te retrouves avec des mois.
    Merci Beaucoup pour m'avoir montré la voie

    voici le code corrigé grâce à toi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    vmontantminutes..EnMinutes = etat_edition_travail_heures.Montant_minutes
     
    vheure=(DuréeVersChaîne(vmontantminutes,"HH.MM"))
     
    etat_edition_travail_heures.Montant_heure=vheure

  16. #16
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Ne pas le prendre mal, c'est juste pour l'humour
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  17. #17
    Membre actif
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 270
    Points
    270
    Par défaut
    Citation Envoyé par laurent30s Voir le message
    Ne pas le prendre mal, c'est juste pour l'humour
    t'inquiètes j'adore l'humour et j'ai adoré

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

Discussions similaires

  1. [XL-2007] Calcul durée en heures/minutes entre 2 dates/2heures
    Par youlig dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/04/2013, 21h42
  2. Réponses: 5
    Dernier message: 18/03/2011, 22h43
  3. DateTime et calcul Heures:Minutes
    Par digitaldna dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/03/2008, 16h25
  4. [MySQL] Calculer la somme d'une durée sous la forme Heure:Minute:Seconde
    Par radhwene dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/06/2007, 10h49

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