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.

  1. #1
    Membre habitué 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
    Points : 141
    Points
    141
    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
    il faut de tout pour faire un monde

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    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 habitué 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
    Points : 141
    Points
    141
    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......................
    il faut de tout pour faire un monde

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    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 habitué 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
    Points : 141
    Points
    141
    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
    il faut de tout pour faire un monde

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    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.

  7. #7
    Membre habitué 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
    Points : 141
    Points
    141
    Par défaut le format de la table
    Nom : 121 in out.png
Affichages : 471
Taille : 40,1 Ko

    la table est sous forme de tableau

    ID DATE HEURE STRUCTURE POINTEUSE
    121 04/09/2015 05:00:00 YOFF OUT
    121 05/09/2015 19:16:00 YOFF IN


    Exemple en question est celui qui me crée le plus de probléme car l employé pointe a une date x et sort a une date x+1

    merci beaucoup pour le coup de main

    http://cjoint.com/?EDnn4MFvIFq
    il faut de tout pour faire un monde

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Donc mon hypothèse était correcte.

    Tu peux appliquer tout ce qui est dans mon message précédent.

    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.

  9. #9
    Membre habitué 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
    Points : 141
    Points
    141
    Par défaut
    Pour ce qui de la combinaison de la date et heure je peut obtenir une base access du type
    ID Pointage STRUCTURE POINTEUSE
    121 04/09/2015 05:00:00 YOFF OUT
    121 05/09/2015 19:16:00 YOFF IN
    121 06/09/2015 04:16:00 YOFF OUT
    121 06/09/2015 18:26:00 YOFF IN

    mais mon soucis il existe certains employés
    qui pointe 2 fois dans la méme journée

    exemple :

    employé 121 pointe 2 fois le 06/09/2015
    1fois en OUT
    1fois en IN

    SensPointage (texte, 255 caractères)
    EstPointageValide (boolean, valeur par défaut : vrai).
    J ai du mal a savoir quel champs correspond au champs IN et OUT MERCI
    il faut de tout pour faire un monde

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour

    [SensPointage] crrespond à "In/Out". Tu peux changer le nom si cela ne te paraît pas clair.

    [EstPointageValide] est un champ technique qui te permets d'exclure facilement une ligne de ton calcul.

    Pour les gens qui pointe plusieurs fois par jour, voir la fin de mon message du 10/04/2015 à 17h28 et la façon de trouver le "in" qui correspond au "out" en cherchant le in qui précède le immédiatement le out.

    Une solution alternative serait de faire une première vérification dans Excel. Trouver quel "in" précede quel "out" est beaucoup plus simple en Excel.
    Une fois les couples identifiés tu peux leur attribuer un numéro unique de couple.
    Repérer les in et ou manquant devrait être aussi, à mon avis, plus facile en Excel.
    Une fois les associations faites dans ton Excel, tu importes tes données dans Access et tu n'as plus trop à te casser la tête puisque tu sais déjà quel "in" va avec quel "out".

    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.

  11. #11
    Membre habitué 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
    Points : 141
    Points
    141
    Par défaut Merci a marot_r
    Super taf
    il faut de tout pour faire un monde

+ 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