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

VBA Access Discussion :

Nombre d'heures travaillées


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut Nombre d'heures travaillées
    Bonjour tout le monde,
    je dois calculer les heures travaillées, le problème est que je n'ai pas heure debut et heure fin, je dois détecter les heures travaillées par ligne, comme 1et2 + 3et4 et ainssi de suite.
    Calcule heures de travail:
    date heures flag
    10-10-2012 08:30 1
    10-10-2012 12:00 2
    10-10-2012 14:30 3
    10-10-2012 19:00 4

    la je dois accumuler (12:00 - 08:30) + (19:00 - 14:30) + (...),
    la règle est:
    (2-1) + (4-3) + (6-5)

    Merci.

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Ben, à priori, tu pourrais faire un négatif sur le flags impairs, et positif sur les flags pairs
    Et tu finis, ensuite, par faire une somme...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SIGNEE:iif([heures] mod 2 = 1;-1 ; 1) * [Heures]

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Merci Maxcense, j'ai essayé ta méthode, et y a pas d'erreur ca marche bien mais le signée (-) n'apparait pas devant l'heure.
    Est ce qu'il y a un astuce pour faire apparaitre le (-).
    Merci.

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 914
    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 914
    Points : 4 814
    Points
    4 814
    Par défaut
    Bonjour,
    Maxcense, j'ai essayé ta méthode, et y a pas d'erreur ca marche bien mais le signée (-) n'apparait pas devant l'heure
    dans quel format as-tu actuellement tes heures ?

    disposes-tu déjà de date + heure dans un champ de type Date ?
    ce serait le plus simple ?


  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 667
    Points : 43 691
    Points
    43 691
    Par défaut champ flag
    Pour commencer 1 peu d'algorithmie

    I faut gérer le(s) cas ou tu as une entrée sans sortie ou inversement une sortie sans entrées. En cas d'1 seule erreur c'est facile, le nbre sera impair. En cas de 2 erreurs, le cumul ne permet pas de le voir. Il faut donc borner les "couples" entrées-sorties. Pour cela, il faut contrôler 2 par 2 si l'écart entre les 2 enregistrement est cohérent ( par exemple pas plus de 8h d'écarts entre les 2 enregistrements 1 journée de travail ne dépassant en principe pas 8h - à adapter à tes réalités)

    Le plus simple je pense est de transformer chaque date/heure en timestamp

    L'écart entre les timestamp de deux bornes donne le temps, ceci intégré dans 1 boucle

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Bonjour, et merci pour votre aide.
    Le problème est dans la gestion des rentrer et sortie, les employeurs quand ils entre vont scanner leur carte autant de fois il peuvent entrer et sortir plusieurs fois, là c’est la gestion des humains, mais je n’ai pas le choix il faut accumuler chaque entrer et sortie,
    Ex :
    Entrer sortie
    08:30 12:00
    14:30 19:00
    Mais la machine qui scanne les carte d'accées génère un fichier qui contient (ID, NOM, DATE, HEURE), et comme l’exemple avant j’ai deux lignes mais le fichier génère 4 lignes, seulement se qui est était scanné.
    Salut micniv, pour ta question pour la date et heure, comme tu vois c'est séparer.
    Merci.

  7. #7
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Moi, en essaynt ça... ça semble marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT 
          t.[Date]
        , Sum(IIf(t.[flag] Mod 2=1,-1,1)*t.[Heures]) AS Duree
    FROM 
        Table1  t
    GROUP BY 
        t.[Date];

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 772
    Points : 14 814
    Points
    14 814
    Par défaut
    Bonsoir Maxence,
    Citation Envoyé par Maxence HUBICHE Voir le message
    Moi, en essaynt ça... ça semble marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT 
          t.[Date]
        , Sum(IIf(t.[flag] Mod 2=1,-1,1)*t.[Heures]) AS Duree
    FROM 
        Table1  t
    GROUP BY 
        t.[Date];
    Cela marche en effet. Malheureusement le modèle de données a changé entre temps et le flag du début semble avoir disparu
    Mais la machine qui scanne les carte d'accées génère un fichier qui contient (ID, NOM, DATE, HEURE)
    En supposant que ID est l'identifiant du genre matricule ou n° d'employé :
    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
    SELECT
           [T3].ID
          ,[T3].date
          ,Sum(iif(Rang Mod 2=1,-1,1)*[Heures]) AS DUREE
    FROM (SELECT 
                 [T1].ID
                ,[T1].date
                ,[T1].Heures
                ,(SELECT Count(Heures) 
                    FROM Table1 T2 
                   WHERE [T2].Heures<[T1].Heures)+1 AS Rang
            FROM Table1 AS T1
        ORDER BY ID,date,Heures
         ) AS T3 
    GROUP BY [T3].ID, [T3].date
    ;

  9. #9
    Membre habitué Avatar de TheBlue
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 167
    Points : 147
    Points
    147
    Par défaut
    Bonjour tee_grandbois,

    Merci pour la proposition, ça m’a aidé dans un sujet sur lequel je bosse en ce moment.

    Juste comme remarque, il faut mettre la sous requête qui construit la table T3 dans une table temporaire, sinon vous aurez une erreur du genre :

    La clause ORDER BY n'est pas valide dans les vues, les fonctions inline, les tables dérivées, les sous-requêtes et les expressions de table communes, sauf si TOP, OFFSET ou FOR XML est également spécifié.
    Cordialement.

Discussions similaires

  1. [MCD] Nombre d'heures travaillées par mois par année par compte
    Par Tidus159 dans le forum Schéma
    Réponses: 9
    Dernier message: 11/03/2011, 12h20
  2. [AC-2007] calcul nombre d'heures travaillées
    Par hugodu28 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/01/2011, 17h10
  3. Nombre d'heures de travail en apprentissage
    Par Eithne dans le forum Contrat
    Réponses: 3
    Dernier message: 17/06/2010, 11h15
  4. Réponses: 1
    Dernier message: 05/01/2010, 23h59
  5. Convertir un nombre d'heure format HH:MM
    Par jerome_sinclair dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/11/2005, 21h51

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