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

Requêtes et SQL. Discussion :

Gestion du temps (Heures)


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 374
    Points : 133
    Points
    133
    Par défaut Gestion du temps (Heures)
    Bonjour,

    Je tourne en rond... j'aimerais calculer le temps de travail d'une journée, je m'explique.

    J'ai une table avec un champ [Date du jour], un champ [Heure] et un champ liste déroulante contenant (Journée, Début de journée, temps de midi, Fin de journée...)

    Exemple d'encodage :
    • Ligne 1 : [Date du jour] = 01-01-2019, [Heure] = 08:45 et [LISTE DEROULANTE] = Début de journée
    • Ligne 2 : [Date du jour] = 01-01-2019, [Heure] = 12:00 et [LISTE DEROULANTE] = Temps de midi
    • Ligne 3 : [Date du jour] = 01-01-2019, [Heure] = 12:30 et [LISTE DEROULANTE] = Journée
    • Ligne 4 : [Date du jour] = 01-01-2019, [Heure] = 17:15 et [LISTE DEROULANTE] = Fin de journée
    • Ligne 5 : [Date du jour] = 02-01-2019, [Heure] = 08:45 et [LISTE DEROULANTE] = Début de journée
    • Ligne 6 : [Date du jour] = 02-01-2019, [Heure] = 12:15 et [LISTE DEROULANTE] = Temps de midi
    • Ligne 7 : [Date du jour] = 02-01-2019, [Heure] = 12:45 et [LISTE DEROULANTE] = Journée
    • Ligne 8 : [Date du jour] = 02-01-2019, [Heure] = 17:30 et [LISTE DEROULANTE] = Fin de journée
    • Ligne 9 : [Date du jour] = 03-01-2019, [Heure] = 08:45 et [LISTE DEROULANTE] = Début de journée
    • Ligne 10 : [Date du jour] = 03-01-2019, [Heure] = 12:15 et [LISTE DEROULANTE] = Temps de midi
    • Ligne 11 : [Date du jour] = 03-01-2019, [Heure] = 14:15 et [LISTE DEROULANTE] = Journée
    • Ligne 12 : [Date du jour] = 03-01-2019, [Heure] = 17:30 et [LISTE DEROULANTE] = Fin de journée


    ...

    J'aimerais maintenant pouvoir afficher :
    [Date du jour] = 01-01-2019 et [HEURES PRESTEES] : 8h
    [Date du jour] = 02-01-2019 et [HEURES PRESTEES] : 8h30
    [Date du jour] = 03-01-2019 et [HEURES PRESTEES] : 6h45

    Merci d'avance pour vos lumières, parce que là...

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 868
    Points : 4 739
    Points
    4 739
    Par défaut
    Bonjour,

    Mon avis : si dans ta table, la colonne que tu appelles "liste déroulante" pour typer les heures renseignées, est un champ multivalué, il te faut corriger cette conception : c'est inexploitable !
    Microsoft n'aurait jamais dû implémenter ce gadget
    Avant tout, que veux-tu faire ?
    • avoir les jours ouvrés de la société, avec les mêmes heures pour tous les employés ?
    • avoir les jours ouvrés pour chaque employé, avec les mêmes heures pour tous les employés ?
    • avoir le pointage de chaque jour ouvré pour chaque employé ?


    CDLT
    "Always look at the bright side of life." Monty Python.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 374
    Points : 133
    Points
    133
    Par défaut
    Bonjour,

    • Avoir le pointage de chaque jour ouvré pour chaque employé ?


    Ps : la liste déroulante est simple, un choix possible. (pour par exemple les temps de midi...)

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 166
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour,
    En attaché un petit exemple avec une façon de faire.
    Une première requête sert à ramener les temps en positif (les heures fin) ou en négatif (les heures début).
    Cette requête est ensuite utilisée pour faire les totaux journaliers.
    Bonne continuation.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 374
    Points : 133
    Points
    133
    Par défaut
    Bonjour,

    Je vais tester, mais déjà un TOUT Grand Merci

    EDIT
    Il semble y avoir un problème d'heure... j'ai l'impression qu'il y a une heure en trop... non ?

  6. #6
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 166
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour,
    Effectivement, il y a une erreur dans la formule de calcul de AgtD dans la requête qDH.
    Elle doit être remplacée par la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AgtD: -(([AgtDH]="DM")-([AgtDH]="DJ")+([AgtDH]="FJ")-([AgtDH]="FM"))*[AgtHeure]
    Bonne continuation.

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 374
    Points : 133
    Points
    133
    Par défaut
    Merci

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 374
    Points : 133
    Points
    133
    Par défaut
    J'ai encore et oui... un petit problème, j'aimerais maintenant faire une somme du champ [SommeDeAgtD] et =Somme([SommeDeAgtD]) ne fonctionne pas...

  9. #9
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 166
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour,

    C'est une des petites bizarreries d'Access, il n'aime pas que l'on utilise les champs nommés automatiquement SommeDe... (sans doute lié aux traductions). Il faut donner un nom à la somme et cela fonctionnera.

    Dans l'exemple joint, dans la requête qDHtot, la somme des AgtD est nommée SAgtD. Ce champ est ensuite utilisé dans le formulaire et le calcul du total général.

    Attention au total général qui dépasse 24h: le format hh:mm ne fonctionnera pas et il n'est pas possible de faire comme dans Excel [hh]:mm

    Bonne continuation.
    Fichiers attachés Fichiers attachés

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 374
    Points : 133
    Points
    133
    Par défaut
    Merci dommage que les heures soient en décimales...

    Ps : je n'arrive pas à l'intégrer dans mon formulaire, j'ai soit 0 ou 1...

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 374
    Points : 133
    Points
    133
    Par défaut
    J'ai donc cette formule qui me calcul la somme des heures
    Elle me retourne par exemple : 172,5 heures
    J'aimerais qu'elle me retourne : 172:30
    Est-ce possible ?
    Merci d'avance

  12. #12
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 166
    Points : 5 485
    Points
    5 485
    Par défaut
    Pour cela il faut se faire une formule telle que celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Function sHM(vH As Single) As String
       '--- conversion heures décimales vH (réel simple) en un texte hhh:mm:ss
       sHM = CStr(Int(vH)) & Format(vH / 24, ":nn:ss")
    End Function
    Bonne continuation.

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 374
    Points : 133
    Points
    133
    Par défaut
    Presque... mais déjà un très grand merci :-)

    Exemple du problème :

    En décimale = 6,0
    En heure = 5:00...


    En décimale : 6,5
    En heure : 6:30

    En décimale : 5,98
    En heure : 5:59



    L'heure juste, est diminuée d'une heure... pourquoi ?...

    EDIT ;

    Je crois avoir trouvé, à tester...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sHM = CStr(Round(vH)) & Format(vH / 24, ":nn:ss")
    NONNNNNNNN, ne fonctionne pas, maintenant c'est

    En décimale = 5,98
    En heure = 6:59...

  14. #14
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 166
    Points : 5 485
    Points
    5 485
    Par défaut
    Il ne faut surtout pas utiliser la fonction Round() car elle arrondi:
    Round(5.49)=>5 et Round(5.50)=>6

    Il faut utiliser la fonction Int(), qui ne prend que la partie entière:
    Int(5.49)=>5 et Int(5.50)=>5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sHM = CStr(Int(vH)) & Format(vH / 24, ":nn")
    Bonne continuation.

Discussions similaires

  1. Gestion de temps en RedMine : Heurs -> Jours
    Par escalebur dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 13/06/2012, 16h58
  2. Aide pour l'analyse d'un problème de gestion de temps
    Par PAINCO dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 03/06/2005, 16h49
  3. [VB.NET] Gestion en temps réel d'une bdd access
    Par qwiskas dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/02/2005, 20h37
  4. Réponses: 3
    Dernier message: 13/08/2004, 19h52
  5. fonction de gestion du temps
    Par fati dans le forum C
    Réponses: 5
    Dernier message: 26/12/2002, 17h32

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