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

IHM Discussion :

Calcul de durées supérieures à 24h [AC-2010]


Sujet :

IHM

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut Calcul de durées supérieures à 24h
    Bonjour à tous,

    Je voudrais connaitre le format à appliquer à un champ pour que celui-ci accepte des durées du type 42h20mn et que les données entrées soient récupérables pour formatage et additions.

    Vu que Access n'accepte pas les formats heures supérieurs à 24h sur un champ au format "Heure abrégé", comment permettre à l'utilisateur de rentrer dans un seul champ directement cette donnée ? (je ne parle pas de faire de Datediff mais de pouvoir rentrer par ex : 123 heures et 17 minutes et de récupérer cette donnée pour la formater ensuite grâce à un module...)

    Merci d'avance pour toute réponse !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour, j'aurais tendance à te dire de faire au plus simple :
    • Un champ [Heures] Numérique
    • Un champ [Minutes] Numérique
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 266
    Points : 19 435
    Points
    19 435
    Billets dans le blog
    63
    Par défaut
    Salut,

    Tu peux faire une saisie du style 25:00 ou 25h00 dans un champ de type texte et après utiliser une fonction avec split pour faire des calculs sur ce champ:

    exemple:

    si champ1 contient la valeur "25:00" tu peux utiliser la fonction split pour séparer les heures des minutes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim H as integer, M as Integer
     
    H=Split(champ1, ":")(0)
    M=Split(champ1, ":")(1)
    ...
    ...
    Tu peux aussi sortir le résultat sous la forme d'une date ou d'1 réel double, avec une fonction dans un module:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function HourSup24(h As String) As Date
     
    HourSup24 = TimeSerial(Split(h, ":")(0), Split(h, ":")(1), 0)
     
    End Function
    et après utiliser cette fonction dans une requête ou 1 module:

    La fonction inverse est dans la faq.

    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par paidge Voir le message
    Bonjour, j'aurais tendance à te dire de faire au plus simple :
    • Un champ [Heures] Numérique
    • Un champ [Minutes] Numérique
    Tu viens de me démontrer que rien ne sert de se casser la tête parfois ! tu avais raison !!!!

    J'explique la démarche pour ceux qui en auraient besoin :

    J'ai fait des champs calculés :
    [Heure] en numérique
    [Minutes] en numérique avec condition <=59
    [Total] en Euros

    Et des champs dépendants de la table
    [Taux horaire]en euros
    [Durée] en Texte
    [Montant Total] en Euros

    Je mets dans le champ dépendant [Montant]=([Heures]*[TauxHoraire])+(([Minutes]*[TauxHoraire])/60)

    Il suffit ensuite d'appliquer une chaîne sur le champ durée pour concaténer la valeur heures et minutes et de sauvegarder les valeurs de [Montant] et de la chaine ([heures]&"h"&[Minutes]&"mn") dans les champs dépendants [Montant Total] et [Durée] de la table grâce à un événement after update en VBA.

    Ceci dit reste à voir comment additionner ces valeurs dans des requêtes et états ...Je suppose qu'il faudra extraire les fractions Minutes et Heures grâce à un module ?

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Bonjour User et merci à toi,
    Il me semble que ta méthode est la meilleure si l'on veut retravailler les données dans des requêtes et états, je vais l'essayer et vous mettre au courant...

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par User Voir le message
    Salut,

    Tu peux faire une saisie du style 25:00 ou 25h00 dans un champ de type texte et après utiliser une fonction avec split pour faire des calculs sur ce champ:

    exemple:

    si champ1 contient la valeur "25:00" tu peux utiliser la fonction split pour séparer les heures des minutes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim H as integer, M as Integer
     
    H=Split(champ1, ":")(0)
    M=Split(champ1, ":")(1)
    ...
    ...
    Tu peux aussi sortir le résultat sous la forme d'une date ou d'1 réel double, avec une fonction dans un module:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function HourSup24(h As String) As Date
     
    HourSup24 = TimeSerial(Split(h, ":")(0), Split(h, ":")(1), 0)
     
    End Function
    et après utiliser cette fonction dans une requête ou 1 module:

    La fonction inverse est dans la faq.

    A+
    Le gros problème c'est donc de retravailler ces données horaires hors formulaire, par exemple dans les requêtes et états:

    Mettons que l'on ait une requête ayant seulement un seul champ durée et seulement 2 lignes qui afficheraient :

    25h35m
    34h40mn

    Quelle syntaxe mettre dans un champ [TotalHeures] de la dite requête pour que la fraction "Minutes" s'additionne à celle des heures et recompose une chaine hh:mm correcte ?

    Sur deux lignes ça va encore mais sur plusieurs lignes on pourrait se retrouver avec 1000 Minutes par ex...

    Je pense qu'il doit y avoir un moyen très simple de recalculer ça grâce à une fonction déjà incluse à mettre comme argument de champ de requete , non ?

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 266
    Points : 19 435
    Points
    19 435
    Billets dans le blog
    63
    Par défaut
    Salut,

    En effet ton exemple est assez bien trouvé et abouti à une méthode assez amusante :

    Si tu as dans une table nommée "Table1" les valeurs:
    Durée
    ------
    25:35
    34:40

    Tu aurais une requête du style:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT HeureSup24(Sum(HourSup24([Table1].[Duree]))) AS TotalHeures
    FROM Table1;

    Note que j'utilise d'abord la fonction HourSup24 pour traduite la durée texte en expression date et heure.

    Puis je fais la somme de ces expressions date et heure.

    Pour enfin la retraduire en expression chaine du style "00:00" avec la fonction HeureSup24 de la faq.

    C'est assez tordu mais aussi assez marrant à mettre en place

    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par User Voir le message
    Salut,

    En effet ton exemple est assez bien trouvé et abouti à une méthode assez amusante :

    Si tu as dans une table nommée "Table1" les valeurs:
    Durée
    ------
    25:35
    34:40

    Tu aurais une requête du style:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT HeureSup24(Sum(HourSup24([Table1].[Duree]))) AS TotalHeures
    FROM Table1;

    Note que j'utilise d'abord la fonction HourSup24 pour traduite la durée texte en expression date et heure.

    Puis je fais la somme de ces expressions date et heure.

    Pour enfin la retraduire en expression chaine du style "00:00" avec la fonction HeureSup24 de la faq.

    C'est assez tordu mais aussi assez marrant à mettre en place

    A+
    Bonjour à toi User,

    Et dire qu'access pourrait gérer ça automatiquement comme le fait Excel en mettant [hh]:nn !!!!

    Que de complications !
    En plus, au moment de la saisie de la durée, aucun masque de saisie ne semble être pratique pour l'utilisateur, s'agissant d'un champ texte.
    A moins qu'il y ait une autre fonction à mettre en place !

    Pfffff, par moment on se demande ...

    Merci pour tout commentaire !

  9. #9
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 266
    Points : 19 435
    Points
    19 435
    Billets dans le blog
    63
    Par défaut
    Salut,

    Pour le masque de saisie tu peux essayer un truc comme celà:

    "00:00;0;_"

    En évitant bien sûr de mettre un format pour le champ
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

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

Discussions similaires

  1. Affichage de durées supérieures à 24h
    Par Stach029 dans le forum BIRT
    Réponses: 8
    Dernier message: 13/01/2015, 11h33
  2. [JExcel] Affichage de durée supérieure à 24h
    Par nelsonimor dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 09/09/2011, 15h20
  3. Calculer la duree d'un MP3
    Par k-koo dans le forum C
    Réponses: 4
    Dernier message: 16/03/2006, 21h01
  4. [Date] Fonction de calcul de durée entre 2 dates
    Par jesus144 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/01/2006, 16h36
  5. Calculer une duree entre 2 dates
    Par d.w.d dans le forum C++
    Réponses: 7
    Dernier message: 02/03/2005, 22h39

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