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 :

Une formule pour calculer les in et out d une table de pointage [AC-2003]


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de taz devil
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Avril 2012
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2012
    Messages : 298
    Par défaut Une formule pour calculer les in et out d une table de pointage
    bonjour
    j ai une base access ou sont répertorié les in et les out des certains matricules
    je voudrais savoir s il existe une formule access 2003 pour calculer le temps de
    travail entre 2 date merci le fichier est sur
    http://paf.im/XYg0I

    merci

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Tout dépend du calcul que tu veux faire.

    La fonction principale est dateDiff() (voir l'aide pour les détails).

    Si DateDiff() ne te donne pas les résultats dont tu as besoin, il faudra sans doute programmer le calcul toi-même.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre éclairé Avatar de taz devil
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Avril 2012
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2012
    Messages : 298
    Par défaut la formule
    en faite mon probléme est que la base m est transmit sous la forme

    matricule date heure pointeuse

    1 8/4/15 23:10 in
    1 9/4/15 05:10 out

    etc......................

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Donc, c'est du texte et tu dois les convertir en date pour pouvoir faire tes calculs, c'est bien cela ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre éclairé Avatar de taz devil
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Avril 2012
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2012
    Messages : 298
    Par défaut calcul du 121
    http://www.noelshack.com/2015-15-142...121-in-out.png

    voila comment se présente la base
    je voudrais en faite pouvoir calculé
    le pointage du matricule
    121 qui est entré le 08/04/2015 a 19:16 et qui est sortie le 09/04/2015 a 05:00
    merci

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Désolé l'image ne m'est pas accessible (sécurité de mon poste sans doute).

    Tes données sont-elles déjà dans des champs séparés et typés ou tout d'un bloc dans un fichier texte ?

    Pour le moment je vais supposer que c'est des champs séparés.

    Voilà ce que je suggère.

    Ta table de pointage devrait avoir une structure qui ressemble à :

    Table tblPointage :
    Clef (numero séquentiel automatique)
    Matricule (entier long)
    DatePointage (date/heure)
    HeurePointage (date/heure)
    SensPointage (texte, 255 caractères)
    EstPointageValide (boolean, valeur par défaut : vrai).

    Il te faut une requête qui "reconstitue" la date et l'heure.

    Requete reqDateHeurePointage

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select [tblPointage].[Clef], [tblPointage].[Matricule], DateSerial(year([tblPointage].[DatePointage]), month([tblPointage].[DatePointage]), day([tblPointage].[DatePointage])) + TimeSerial(Hour([tblPointage].[HeurePointage]), minute([tblPointage].[HeurePointage]),0) as DateHeurePointage, [tblPointage].[SensPointage], [EstPointageValide] from [tblPointage];

    Enuite des requêtes qui te donnent les entrées et les sorties et le temps écoulé (en minutes)

    Requête reqPointageEntree

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select [reqDateHeurePointage].* where [reqDateHeurePointage].[SensPointage]="in" and [estPointageValide]

    Requête reqPointageSortie

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select [reqDateHeurePointage].* where [reqDateHeurePointage].[SensPointage]="out" and [estPointageValide]

    Requête reqPointageTemps

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT [reqPointageEntree].[Matricule], [reqPointageEntree].[DateHeurePointage] as [DateHeureEntree], [reqPointageSortie].[DateHeurePointage] as [DateHeureSortie], Datediif("n", [reqPointageEntree].[DateHeurePointage], [reqPointageSortie].[DateHeurePointage])
    FROM [reqPointageEntree] INNER JOIN [reqPointageSortie] ON [reqPointageEntree].[Matricule] = [reqPointageSortie].[Matricule];

    Attention ne marche correctement que si tu as une seule entrée et une seule sortie par "traitement". Si tu as plusieurs entrées et sorties, il va falloir associer les sorties avec les entrées en fonction de la date de sortie, pas seulement par le matricule. Et aussi il faut forcément que tu ais une entrée ET une sortie.

    Pour trouver l'entrée correspondant à la sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DMax("DateheuerPointage", "reqPointageEntree", "[DateHeurePointage]<=#" & format([DateHeurePointage], "yyyy\-mm\-dd hh:nn:ss" & "# and [Matricule]=" & [Matricule])
    Le sql devrait sans doute être :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT [reqPointageSortie].[Matricule], DMax("DateHeurePointage", "reqPointageEntree", "[DateHeurePointage]<=#" & format([DateHeurePointage], "yyyy\-mm\-dd hh:nn:ss" & "# and [Matricule]=" & [Matricule]) as [DateHeureEntree], [reqPointageSortie].[DateHeurePointage] as [DateHeureSortie], Datediif("n", [DateHeureEntree], [DateHeureSortie])
    FROM [reqPointageSortie];

    Là si il manque l'entrée tu vas avoir une date Null, si il manque la sortie, l'entrée ne sera pas traitée.

    Évidement ce sera plus long à éxécuter qu'une jointure.

    Pour éviter les problèmes, il serait bon de vérifier que toutes les entrées ont des sorties et toutes les sorties des entrées et ceux dans un enchaînement logique.
    À mon avis ce sera plus facile à faire en VBA, en parcourant un a un tous les enregistrements, qu'en SQL.
    On pourra basculer estPointageValide à faux si il faut l'ignorer.

    Il faut attraper des erreurs du type :
    1. Entrée1
    2. Entrée2
    3. Sortie1
    4. Sortie2


    Sinon tu vas avoir Entrée2-Sortie1 et Entree2-Sortie2.

    Par contre il sera difficile d'attraper des erreurs du type

    Entree le 2015-01-01
    Sortie le 2015-12-31

    car l'association entre entrée et sortie sera correcte. Il y a bien une entrée et une sortie.

    À mon avis il faudra une alerte sur les périodes de travail trop longues (ex : supérieures à 24h00).

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Inserer une formule pour toutes les colonnes vides
    Par sakhob dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/09/2014, 20h26
  2. Aide pour une formule de calcul
    Par NEC14 dans le forum Excel
    Réponses: 7
    Dernier message: 06/11/2013, 09h45
  3. Réponses: 11
    Dernier message: 13/04/2013, 15h25
  4. Mauvais résultat aprés une formule de calcul complexe
    Par poufouille dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 00h12

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