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
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
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.
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
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.
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
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 :
Le sql devrait sans doute être :
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])
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 :
- Entrée1
- Entrée2
- Sortie1
- 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.
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
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.
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
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager