Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

liaison module Requête

9 réponses
Avatar
rafael
Bonjour à tous et à toutes ! ! !

Je dispose d'un module me donnant le nombre de jours ouvrés entre 2 dates
(que je saisie)
Je veux le modifier pour y ajouter un 3ème paramètre qui est le numéro
d'employé.
Ceci me permettra de calculer le nombre d'heures absentes pendant la période
pour chaque employé.
Sachant qu'un employé à un jour de sortie à 17H alors qu'il sort d'habitude
à 18H (ce jour est la propriété "Carriere_Date_Sortie_17H" et est un nombre),
je dois donc dans ce module vérifier dans la table Carriere le jour de sortie
de l'employé en le comparant à la date courante.
Si la date courante est le jour de sortie à 17H, on ajoute 7 heures au
total, sinon, on ajoute 8 heures.
Voici le module d'origine :
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates
' Utilise la fonction JourFérié(UneDate As Date)


Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim Resultat As Integer


If IsNull(DateDeb) Or IsNull(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf DateDeb > DateFin Then
Dim dhTemp As Date
dhTemp = DateDeb
DateDeb = DateFin
DateFin = dhTemp
End If


dblDateDeb = CDbl(DateDeb)
dblDateFin = CDbl(DateFin)


Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If Weekday(DateCourante) <> 1 And _
Weekday(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
Resultat = Resultat + 1
End If
dblDateDeb = dblDateDeb + 1
Loop
NbDayOpen = Resultat


End Function
J'espère être suffisamment explicite
Merci d'avance pour votre aide ! ! !

9 réponses

Avatar
Jessy Sempere
Bonjour

Je reconnais mon code... ;-)

Sinon, je n'ai pas tout compris mais à première vu, il n'est pas utile de
modifier la fonction. Mais d'après ce que je comprends, le résultat souhaité
n'est pas un nombre de jour mais un nombre d'heures ? Toujours d'après ce que
je comprends, si tu as une date qui est dans ton champ
Carriere_Date_Sortie_17H, tu comptes 7 heures pour ce jour sinon tu comptes 8
heures et biensûr, tu peux avoir plusieurs date à 17h pour le même employé ???

Maintenant en imaginant que j'ai tout compris... ;-) ça pourrait donner :

1°) Utiliser la fonction dans une requête sans la modifier dans un champ
calculé pour retourner le nombre de jours entre tes 2 dates genre :
NbJour : NbDayOpen(#TaDateDébut# ; #TaDateFin#)

2°) Déterminer le nombre de jour à l'aide d'un champ calculé, où l'employé a
fini à 17 heure :
NbDepart17H:CpteDom("Carriere_Date_Sortie_17H";"TaTableAvecDate17H";"IdEmploye="
& [IdEmploye] & " AND (Carriere_Date_Sortie Between #TaDateDebut# and
#TaDateFin#)")

3°) Utiliser ces 2 calculs pour faire ce que tu souhaites, par exemple :
(8*NbJour)-(NbDepart17H) qui te donnera le nombre d'heures entre tes 2
dates...

Maintenant, il se peut que je n'ai rien compris... ;-))

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Bonjour à tous et à toutes ! ! !

Je dispose d'un module me donnant le nombre de jours ouvrés entre 2 dates
(que je saisie)
Je veux le modifier pour y ajouter un 3ème paramètre qui est le numéro
d'employé.
Ceci me permettra de calculer le nombre d'heures absentes pendant la période
pour chaque employé.
Sachant qu'un employé à un jour de sortie à 17H alors qu'il sort d'habitude
à 18H (ce jour est la propriété "Carriere_Date_Sortie_17H" et est un nombre),
je dois donc dans ce module vérifier dans la table Carriere le jour de sortie
de l'employé en le comparant à la date courante.
Si la date courante est le jour de sortie à 17H, on ajoute 7 heures au
total, sinon, on ajoute 8 heures.
Voici le module d'origine :
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates
' Utilise la fonction JourFérié(UneDate As Date)


Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim Resultat As Integer


If IsNull(DateDeb) Or IsNull(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf DateDeb > DateFin Then
Dim dhTemp As Date
dhTemp = DateDeb
DateDeb = DateFin
DateFin = dhTemp
End If


dblDateDeb = CDbl(DateDeb)
dblDateFin = CDbl(DateFin)


Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If Weekday(DateCourante) <> 1 And _
Weekday(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
Resultat = Resultat + 1
End If
dblDateDeb = dblDateDeb + 1
Loop
NbDayOpen = Resultat


End Function
J'espère être suffisamment explicite
Merci d'avance pour votre aide ! ! !


Avatar
rafael
Voici une présentation de ma base :
1)
Table Employe Employe_Num Entier (Numéro automatique)
Employe_Nom Texte
Employe_Prenom Texte
.
.
Ex :
Employe_Num Employe_ Nom Employe_Prenom . . . . . . . .
01 DUPONT Jacques
02 DUPONT Pierre
03 TOTO Luc
. . .
. . .
2)
Table Carriere =
Carriere_Num Entier (Numéro automatique)
Carriere_Date_Debut Date
Carriere_Date_Sortie Date
Carriere_Jour_Sortie_17H Texte
.
.
Carriere_Employe_Num Entier (clé étrangère de la table Employe)
Ex :
Carriere_Num Carriere_Date_Debut Carriere_Date_Sortie
Carriere_Jour_Sortie_17H Carriere_Employe_Num
01 01/01/2001 25/12/2006 Mercredi 01
02 02/01/2007 valeur nulle Vendredi 01
03 28/04/2003 valeur nulle Mardi 02
04 01/03/2002 30/08/2002 Mercredi 03
05 01/09/2002 valeur nulle Mercredi 03
.
3)
Table Absence =
Absence_Num Entier (reprends le numéro de l’employé concerné)
Absence_Date_Debut Date
Absence_Date_Fin Date
Ex :
Absence_Num Absence_Date_Debut Absence_Date_Fin
02 01/02/2007 27/02/2007
03 09//02/2007 15/02/2007
02 01/03/2007 02/03/2007


EX FINAL :

Calcul du NBRE d’Heures Absentes entre le 12/02/2007 et le 16/02/2007 (dates
saisies par l’utilisateur):
Employe 02 (DUPONT Pierre)
8 x NbDayOpen(Absence_Date_Debut ; Absence_Date_Fin) – (Nb Jours De
Travail à 7 Heures)
=
8 x 5 – 1 (le 16/02/2007 est un vendredi, donc un jour pour lequel l’employé
02 ne travaille que 7 Heures)
= 39 Heures Totales Normalement Travaillées qui sont comptées comme Absentes

Employe 03 (TOTO Luc)
8 x NbDayOpen(Absence_Date_Debut ; Absence_Date_Fin) – (Nb Jours De
Travail à 7 Heures)
8 x 4 – 1 (le 13/02/2007 est un mardi, donc un jour pour lequel l’employé
03 ne travaille que 7 Heures)
= 31 Heures Totales Normalement Travaillées qui sont comptées comme Absentes

Voici ce que je souhaite : les Employés qui ont eu des Absences durant la
période saisie =

Période (correspondant à une semaine)
Employe X X1 Heures Travaillées Absentes
Employe Y Y1 Heures Travaillées Absentes
Employe Z Z1 Heures Travaillées Absentes

Ex :
12/02/2007 - 16/02/2007
DUPONT Pierre 39 Heures Travaillées Absentes
TOTO Luc 31 Heures Travaillées Absentes

Merci d'avance pour ton aide.


Bonjour

Je reconnais mon code... ;-)

Sinon, je n'ai pas tout compris mais à première vu, il n'est pas utile de
modifier la fonction. Mais d'après ce que je comprends, le résultat souhaité
n'est pas un nombre de jour mais un nombre d'heures ? Toujours d'après ce que
je comprends, si tu as une date qui est dans ton champ
Carriere_Date_Sortie_17H, tu comptes 7 heures pour ce jour sinon tu comptes 8
heures et biensûr, tu peux avoir plusieurs date à 17h pour le même employé ???

Maintenant en imaginant que j'ai tout compris... ;-) ça pourrait donner :

1°) Utiliser la fonction dans une requête sans la modifier dans un champ
calculé pour retourner le nombre de jours entre tes 2 dates genre :
NbJour : NbDayOpen(#TaDateDébut# ; #TaDateFin#)

2°) Déterminer le nombre de jour à l'aide d'un champ calculé, où l'employé a
fini à 17 heure :
NbDepart17H:CpteDom("Carriere_Date_Sortie_17H";"TaTableAvecDate17H";"IdEmploye="
& [IdEmploye] & " AND (Carriere_Date_Sortie Between #TaDateDebut# and
#TaDateFin#)")

3°) Utiliser ces 2 calculs pour faire ce que tu souhaites, par exemple :
(8*NbJour)-(NbDepart17H) qui te donnera le nombre d'heures entre tes 2
dates...

Maintenant, il se peut que je n'ai rien compris... ;-))

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Bonjour à tous et à toutes ! ! !

Je dispose d'un module me donnant le nombre de jours ouvrés entre 2 dates
(que je saisie)
Je veux le modifier pour y ajouter un 3ème paramètre qui est le numéro
d'employé.
Ceci me permettra de calculer le nombre d'heures absentes pendant la période
pour chaque employé.
Sachant qu'un employé à un jour de sortie à 17H alors qu'il sort d'habitude
à 18H (ce jour est la propriété "Carriere_Date_Sortie_17H" et est un nombre),
je dois donc dans ce module vérifier dans la table Carriere le jour de sortie
de l'employé en le comparant à la date courante.
Si la date courante est le jour de sortie à 17H, on ajoute 7 heures au
total, sinon, on ajoute 8 heures.
Voici le module d'origine :
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates
' Utilise la fonction JourFérié(UneDate As Date)


Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim Resultat As Integer


If IsNull(DateDeb) Or IsNull(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf DateDeb > DateFin Then
Dim dhTemp As Date
dhTemp = DateDeb
DateDeb = DateFin
DateFin = dhTemp
End If


dblDateDeb = CDbl(DateDeb)
dblDateFin = CDbl(DateFin)


Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If Weekday(DateCourante) <> 1 And _
Weekday(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
Resultat = Resultat + 1
End If
dblDateDeb = dblDateDeb + 1
Loop
NbDayOpen = Resultat


End Function
J'espère être suffisamment explicite
Merci d'avance pour votre aide ! ! !




Avatar
Jessy Sempere
Bonjour

Voilà ci-dessous une fonction détourné de celle que tu as utilisé, la
synthaxe pour l'appeler est par exemple la suivante :

NbHoursOpenDay #2/12/2007#, #2/16/2007#, 8, "vendredi", 7
ou
NbHoursOpenDay [ChampDateDeb], [ChampDateFin], 8,
[Carriere_Jour_Sortie_17H], 7

intHourdDays : entier correspondant au nombre d'heure d'un jour normal
strDay : expression correspondant à un jour spécifique (lundi, mardi, ...)
intStrDay : entier correspondant au nombre d'heure du jour spécifique

************************************************
Public Function NbHoursOpenDay(dtDeb As Date, dtFin As Date, _
intHoursDay As Integer, Optional strDay As String, Optional intStrDay As
Integer) As Integer

Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim resultat As Integer

If IsNull(dtDeb) Or IsNull(dtFin) _
Or IsEmpty(dtDeb) Or IsEmpty(dtFin) Then
NbHoursOpenDay = 0
Exit Function
ElseIf Not IsDate(dtDeb) Or Not IsDate(dtFin) Then
NbHoursOpenDay = 0
Exit Function
ElseIf dtDeb > dtFin Then
Dim dhTemp As Date
dhTemp = dtDeb
dtDeb = dtFin
dtFin = dhTemp
End If

dblDateDeb = CDbl(dtDeb)
dblDateFin = CDbl(dtFin)

Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If WeekDay(DateCourante) <> 1 And _
WeekDay(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
If Format(DateCourante, "dddd") <> strDay Then
resultat = resultat + intHoursDay
Else
resultat = resultat + intStrDay
End If
End If
dblDateDeb = dblDateDeb + 1
Loop
NbHoursOpenDay = resultat

End Function
************************************************

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.mpfa.info/
------------------------------------



Voici une présentation de ma base :
1)
Table Employe > Employe_Num Entier (Numéro automatique)
Employe_Nom Texte
Employe_Prenom Texte
.
.
Ex :
Employe_Num Employe_ Nom Employe_Prenom . . . . . . . .
01 DUPONT Jacques
02 DUPONT Pierre
03 TOTO Luc
. . .
. . .
2)
Table Carriere =
Carriere_Num Entier (Numéro automatique)
Carriere_Date_Debut Date
Carriere_Date_Sortie Date
Carriere_Jour_Sortie_17H Texte
.
.
Carriere_Employe_Num Entier (clé étrangère de la table Employe)
Ex :
Carriere_Num Carriere_Date_Debut Carriere_Date_Sortie
Carriere_Jour_Sortie_17H Carriere_Employe_Num
01 01/01/2001 25/12/2006 Mercredi 01
02 02/01/2007 valeur nulle Vendredi 01
03 28/04/2003 valeur nulle Mardi 02
04 01/03/2002 30/08/2002 Mercredi 03
05 01/09/2002 valeur nulle Mercredi 03
.
3)
Table Absence =
Absence_Num Entier (reprends le numéro de l’employé concerné)
Absence_Date_Debut Date
Absence_Date_Fin Date
Ex :
Absence_Num Absence_Date_Debut Absence_Date_Fin
02 01/02/2007 27/02/2007
03 09//02/2007 15/02/2007
02 01/03/2007 02/03/2007


EX FINAL :

Calcul du NBRE d’Heures Absentes entre le 12/02/2007 et le 16/02/2007 (dates
saisies par l’utilisateur):
Employe 02 (DUPONT Pierre)
8 x NbDayOpen(Absence_Date_Debut ; Absence_Date_Fin) – (Nb Jours De
Travail à 7 Heures)
=
8 x 5 – 1 (le 16/02/2007 est un vendredi, donc un jour pour lequel l’employé
02 ne travaille que 7 Heures)
= 39 Heures Totales Normalement Travaillées qui sont comptées comme Absentes

Employe 03 (TOTO Luc)
8 x NbDayOpen(Absence_Date_Debut ; Absence_Date_Fin) – (Nb Jours De
Travail à 7 Heures)
8 x 4 – 1 (le 13/02/2007 est un mardi, donc un jour pour lequel l’employé
03 ne travaille que 7 Heures)

= 31 Heures Totales Normalement Travaillées qui sont comptées comme Absentes

Voici ce que je souhaite : les Employés qui ont eu des Absences durant la
période saisie =

Période (correspondant à une semaine)
Employe X X1 Heures Travaillées Absentes
Employe Y Y1 Heures Travaillées Absentes
Employe Z Z1 Heures Travaillées Absentes

Ex :
12/02/2007 - 16/02/2007
DUPONT Pierre 39 Heures Travaillées Absentes
TOTO Luc 31 Heures Travaillées Absentes

Merci d'avance pour ton aide.


Bonjour

Je reconnais mon code... ;-)

Sinon, je n'ai pas tout compris mais à première vu, il n'est pas utile de
modifier la fonction. Mais d'après ce que je comprends, le résultat souhaité
n'est pas un nombre de jour mais un nombre d'heures ? Toujours d'après ce que
je comprends, si tu as une date qui est dans ton champ
Carriere_Date_Sortie_17H, tu comptes 7 heures pour ce jour sinon tu comptes 8
heures et biensûr, tu peux avoir plusieurs date à 17h pour le même employé ???

Maintenant en imaginant que j'ai tout compris... ;-) ça pourrait donner :

1°) Utiliser la fonction dans une requête sans la modifier dans un champ
calculé pour retourner le nombre de jours entre tes 2 dates genre :
NbJour : NbDayOpen(#TaDateDébut# ; #TaDateFin#)

2°) Déterminer le nombre de jour à l'aide d'un champ calculé, où l'employé a
fini à 17 heure :
NbDepart17H:CpteDom("Carriere_Date_Sortie_17H";"TaTableAvecDate17H";"IdEmploye="
& [IdEmploye] & " AND (Carriere_Date_Sortie Between #TaDateDebut# and
#TaDateFin#)")

3°) Utiliser ces 2 calculs pour faire ce que tu souhaites, par exemple :
(8*NbJour)-(NbDepart17H) qui te donnera le nombre d'heures entre tes 2
dates...

Maintenant, il se peut que je n'ai rien compris... ;-))

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.mpfa.info/
------------------------------------



Bonjour à tous et à toutes ! ! !

Je dispose d'un module me donnant le nombre de jours ouvrés entre 2 dates
(que je saisie)
Je veux le modifier pour y ajouter un 3ème paramètre qui est le numéro
d'employé.
Ceci me permettra de calculer le nombre d'heures absentes pendant la période
pour chaque employé.
Sachant qu'un employé à un jour de sortie à 17H alors qu'il sort d'habitude
à 18H (ce jour est la propriété "Carriere_Date_Sortie_17H" et est un nombre),
je dois donc dans ce module vérifier dans la table Carriere le jour de sortie
de l'employé en le comparant à la date courante.
Si la date courante est le jour de sortie à 17H, on ajoute 7 heures au
total, sinon, on ajoute 8 heures.
Voici le module d'origine :
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates
' Utilise la fonction JourFérié(UneDate As Date)


Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim Resultat As Integer


If IsNull(DateDeb) Or IsNull(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf DateDeb > DateFin Then
Dim dhTemp As Date
dhTemp = DateDeb
DateDeb = DateFin
DateFin = dhTemp
End If


dblDateDeb = CDbl(DateDeb)
dblDateFin = CDbl(DateFin)


Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If Weekday(DateCourante) <> 1 And _
Weekday(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
Resultat = Resultat + 1
End If
dblDateDeb = dblDateDeb + 1
Loop
NbDayOpen = Resultat


End Function
J'espère être suffisamment explicite
Merci d'avance pour votre aide ! ! !






Avatar
rafael
Bonjour Jessy ! ! !
Je te remercie pour ta réponse qui était valable au moment où je te l'ai
posée mais qui ne l'est plus.
J'ai oublié de traiter les personnes qui ne sont pas à 100% : certaines
travaillent 32 Heures (80%), d'autres 24 Heures (60%), d'autres 19.5 Heures
(50%)...
De plus, par exemple pour celles qui travaillent 32 Heures, certaines ne
travaillent pas le mercredi, d'autre ne travaillent pas 2 demi journées dans
la semaine...
Il faut donc savoir pour chacun des jours de la semaine le nombre d'heures
travaillées.
Voici ce que j'ai fait : J'ai créé une table HORAIRE (Horaire_Num Entier,
Horaire_Jour Chaine de caractères, Horaire_Nombre Décimal). Il n'y a pas de
clé primaire.
Horaire_Num reprend le numéro de la Carrière concernée.
Ex :
Carriere_Num : 30
Carriere_Date_Entree : 01/01/2007
Carriere_Date_Sortie : nulle
Carriere_Jour_Sortie_17H : Vendredi

Horaire_Num : 30
Horaire_Jour : Lundi
Horaire_Nombre : 8
Horaire_Jour : Mardi
Horaire_Nombre : 7.5
Horaire_Jour : Mercredi
Horaire_Nombre : 8
Horaire_Jour : Jeudi
Horaire_Nombre : 7.5
Horaire_Jour : Vendredi
Horaire_Nombre : 8

Dans un module (semblable à ton dernier), je souhaiterai comparer la
DateCourante à l'Horaire_Jour correspondant, et ainsi pouvoir ajouter la
valeur saisie dans Horaire_Nombre au résultat.

Je souhaiterai donc savoir si l'idée est bonne, et si c'est le cas, comment
faire ce module ? ? ? ?

Merci d'avance Jessy.


Bonjour

Voilà ci-dessous une fonction détourné de celle que tu as utilisé, la
synthaxe pour l'appeler est par exemple la suivante :

NbHoursOpenDay #2/12/2007#, #2/16/2007#, 8, "vendredi", 7
ou
NbHoursOpenDay [ChampDateDeb], [ChampDateFin], 8,
[Carriere_Jour_Sortie_17H], 7

intHourdDays : entier correspondant au nombre d'heure d'un jour normal
strDay : expression correspondant à un jour spécifique (lundi, mardi, ...)
intStrDay : entier correspondant au nombre d'heure du jour spécifique

************************************************
Public Function NbHoursOpenDay(dtDeb As Date, dtFin As Date, _
intHoursDay As Integer, Optional strDay As String, Optional intStrDay As
Integer) As Integer

Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim resultat As Integer

If IsNull(dtDeb) Or IsNull(dtFin) _
Or IsEmpty(dtDeb) Or IsEmpty(dtFin) Then
NbHoursOpenDay = 0
Exit Function
ElseIf Not IsDate(dtDeb) Or Not IsDate(dtFin) Then
NbHoursOpenDay = 0
Exit Function
ElseIf dtDeb > dtFin Then
Dim dhTemp As Date
dhTemp = dtDeb
dtDeb = dtFin
dtFin = dhTemp
End If

dblDateDeb = CDbl(dtDeb)
dblDateFin = CDbl(dtFin)

Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If WeekDay(DateCourante) <> 1 And _
WeekDay(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
If Format(DateCourante, "dddd") <> strDay Then
resultat = resultat + intHoursDay
Else
resultat = resultat + intStrDay
End If
End If
dblDateDeb = dblDateDeb + 1
Loop
NbHoursOpenDay = resultat

End Function
************************************************

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.mpfa.info/
------------------------------------



Voici une présentation de ma base :
1)
Table Employe > > Employe_Num Entier (Numéro automatique)
Employe_Nom Texte
Employe_Prenom Texte
.
.
Ex :
Employe_Num Employe_ Nom Employe_Prenom . . . . . . . .
01 DUPONT Jacques
02 DUPONT Pierre
03 TOTO Luc
. . .
. . .
2)
Table Carriere =
Carriere_Num Entier (Numéro automatique)
Carriere_Date_Debut Date
Carriere_Date_Sortie Date
Carriere_Jour_Sortie_17H Texte
.
.
Carriere_Employe_Num Entier (clé étrangère de la table Employe)
Ex :
Carriere_Num Carriere_Date_Debut Carriere_Date_Sortie
Carriere_Jour_Sortie_17H Carriere_Employe_Num
01 01/01/2001 25/12/2006 Mercredi 01
02 02/01/2007 valeur nulle Vendredi 01
03 28/04/2003 valeur nulle Mardi 02
04 01/03/2002 30/08/2002 Mercredi 03
05 01/09/2002 valeur nulle Mercredi 03
.
3)
Table Absence =
Absence_Num Entier (reprends le numéro de l’employé concerné)
Absence_Date_Debut Date
Absence_Date_Fin Date
Ex :
Absence_Num Absence_Date_Debut Absence_Date_Fin
02 01/02/2007 27/02/2007
03 09//02/2007 15/02/2007
02 01/03/2007 02/03/2007


EX FINAL :

Calcul du NBRE d’Heures Absentes entre le 12/02/2007 et le 16/02/2007 (dates
saisies par l’utilisateur):
Employe 02 (DUPONT Pierre)
8 x NbDayOpen(Absence_Date_Debut ; Absence_Date_Fin) – (Nb Jours De
Travail à 7 Heures)
=
8 x 5 – 1 (le 16/02/2007 est un vendredi, donc un jour pour lequel l’employé
02 ne travaille que 7 Heures)
= 39 Heures Totales Normalement Travaillées qui sont comptées comme Absentes

Employe 03 (TOTO Luc)
8 x NbDayOpen(Absence_Date_Debut ; Absence_Date_Fin) – (Nb Jours De
Travail à 7 Heures)
8 x 4 – 1 (le 13/02/2007 est un mardi, donc un jour pour lequel l’employé
03 ne travaille que 7 Heures)


= 31 Heures Totales Normalement Travaillées qui sont comptées comme Absentes

Voici ce que je souhaite : les Employés qui ont eu des Absences durant la
période saisie =

Période (correspondant à une semaine)
Employe X X1 Heures Travaillées Absentes
Employe Y Y1 Heures Travaillées Absentes
Employe Z Z1 Heures Travaillées Absentes

Ex :
12/02/2007 - 16/02/2007
DUPONT Pierre 39 Heures Travaillées Absentes
TOTO Luc 31 Heures Travaillées Absentes

Merci d'avance pour ton aide.


Bonjour

Je reconnais mon code... ;-)

Sinon, je n'ai pas tout compris mais à première vu, il n'est pas utile de
modifier la fonction. Mais d'après ce que je comprends, le résultat souhaité
n'est pas un nombre de jour mais un nombre d'heures ? Toujours d'après ce que
je comprends, si tu as une date qui est dans ton champ
Carriere_Date_Sortie_17H, tu comptes 7 heures pour ce jour sinon tu comptes 8
heures et biensûr, tu peux avoir plusieurs date à 17h pour le même employé ???

Maintenant en imaginant que j'ai tout compris... ;-) ça pourrait donner :

1°) Utiliser la fonction dans une requête sans la modifier dans un champ
calculé pour retourner le nombre de jours entre tes 2 dates genre :
NbJour : NbDayOpen(#TaDateDébut# ; #TaDateFin#)

2°) Déterminer le nombre de jour à l'aide d'un champ calculé, où l'employé a
fini à 17 heure :
NbDepart17H:CpteDom("Carriere_Date_Sortie_17H";"TaTableAvecDate17H";"IdEmploye="
& [IdEmploye] & " AND (Carriere_Date_Sortie Between #TaDateDebut# and
#TaDateFin#)")

3°) Utiliser ces 2 calculs pour faire ce que tu souhaites, par exemple :
(8*NbJour)-(NbDepart17H) qui te donnera le nombre d'heures entre tes 2
dates...

Maintenant, il se peut que je n'ai rien compris... ;-))

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.mpfa.info/
------------------------------------



Bonjour à tous et à toutes ! ! !

Je dispose d'un module me donnant le nombre de jours ouvrés entre 2 dates
(que je saisie)
Je veux le modifier pour y ajouter un 3ème paramètre qui est le numéro
d'employé.
Ceci me permettra de calculer le nombre d'heures absentes pendant la période
pour chaque employé.
Sachant qu'un employé à un jour de sortie à 17H alors qu'il sort d'habitude
à 18H (ce jour est la propriété "Carriere_Date_Sortie_17H" et est un nombre),
je dois donc dans ce module vérifier dans la table Carriere le jour de sortie
de l'employé en le comparant à la date courante.
Si la date courante est le jour de sortie à 17H, on ajoute 7 heures au
total, sinon, on ajoute 8 heures.
Voici le module d'origine :
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates
' Utilise la fonction JourFérié(UneDate As Date)


Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim Resultat As Integer


If IsNull(DateDeb) Or IsNull(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf DateDeb > DateFin Then
Dim dhTemp As Date
dhTemp = DateDeb
DateDeb = DateFin
DateFin = dhTemp
End If


dblDateDeb = CDbl(DateDeb)
dblDateFin = CDbl(DateFin)


Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If Weekday(DateCourante) <> 1 And _
Weekday(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
Resultat = Resultat + 1
End If
dblDateDeb = dblDateDeb + 1
Loop
NbDayOpen = Resultat


End Function
J'espère être suffisamment explicite
Merci d'avance pour votre aide ! ! !








Avatar
rafael
Une petite correction pour mon exemple : Sachant que la carriere 30 contient
2 jours pour lesquels l'employé sort à 17H30, le jour de sortie n'est pas
"vendredi" mais "Mardi et Jeudi 17H30".
Merci encore.


Bonjour Jessy ! ! !
Je te remercie pour ta réponse qui était valable au moment où je te l'ai
posée mais qui ne l'est plus.
J'ai oublié de traiter les personnes qui ne sont pas à 100% : certaines
travaillent 32 Heures (80%), d'autres 24 Heures (60%), d'autres 19.5 Heures
(50%)...
De plus, par exemple pour celles qui travaillent 32 Heures, certaines ne
travaillent pas le mercredi, d'autre ne travaillent pas 2 demi journées dans
la semaine...
Il faut donc savoir pour chacun des jours de la semaine le nombre d'heures
travaillées.
Voici ce que j'ai fait : J'ai créé une table HORAIRE (Horaire_Num Entier,
Horaire_Jour Chaine de caractères, Horaire_Nombre Décimal). Il n'y a pas de
clé primaire.
Horaire_Num reprend le numéro de la Carrière concernée.
Ex :
Carriere_Num : 30
Carriere_Date_Entree : 01/01/2007
Carriere_Date_Sortie : nulle
Carriere_Jour_Sortie_17H : Vendredi

Horaire_Num : 30
Horaire_Jour : Lundi
Horaire_Nombre : 8
Horaire_Jour : Mardi
Horaire_Nombre : 7.5
Horaire_Jour : Mercredi
Horaire_Nombre : 8
Horaire_Jour : Jeudi
Horaire_Nombre : 7.5
Horaire_Jour : Vendredi
Horaire_Nombre : 8

Dans un module (semblable à ton dernier), je souhaiterai comparer la
DateCourante à l'Horaire_Jour correspondant, et ainsi pouvoir ajouter la
valeur saisie dans Horaire_Nombre au résultat.

Je souhaiterai donc savoir si l'idée est bonne, et si c'est le cas, comment
faire ce module ? ? ? ?

Merci d'avance Jessy.


Bonjour

Voilà ci-dessous une fonction détourné de celle que tu as utilisé, la
synthaxe pour l'appeler est par exemple la suivante :

NbHoursOpenDay #2/12/2007#, #2/16/2007#, 8, "vendredi", 7
ou
NbHoursOpenDay [ChampDateDeb], [ChampDateFin], 8,
[Carriere_Jour_Sortie_17H], 7

intHourdDays : entier correspondant au nombre d'heure d'un jour normal
strDay : expression correspondant à un jour spécifique (lundi, mardi, ...)
intStrDay : entier correspondant au nombre d'heure du jour spécifique

************************************************
Public Function NbHoursOpenDay(dtDeb As Date, dtFin As Date, _
intHoursDay As Integer, Optional strDay As String, Optional intStrDay As
Integer) As Integer

Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim resultat As Integer

If IsNull(dtDeb) Or IsNull(dtFin) _
Or IsEmpty(dtDeb) Or IsEmpty(dtFin) Then
NbHoursOpenDay = 0
Exit Function
ElseIf Not IsDate(dtDeb) Or Not IsDate(dtFin) Then
NbHoursOpenDay = 0
Exit Function
ElseIf dtDeb > dtFin Then
Dim dhTemp As Date
dhTemp = dtDeb
dtDeb = dtFin
dtFin = dhTemp
End If

dblDateDeb = CDbl(dtDeb)
dblDateFin = CDbl(dtFin)

Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If WeekDay(DateCourante) <> 1 And _
WeekDay(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
If Format(DateCourante, "dddd") <> strDay Then
resultat = resultat + intHoursDay
Else
resultat = resultat + intStrDay
End If
End If
dblDateDeb = dblDateDeb + 1
Loop
NbHoursOpenDay = resultat

End Function
************************************************

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.mpfa.info/
------------------------------------



Voici une présentation de ma base :
1)
Table Employe > > > Employe_Num Entier (Numéro automatique)
Employe_Nom Texte
Employe_Prenom Texte
.
.
Ex :
Employe_Num Employe_ Nom Employe_Prenom . . . . . . . .
01 DUPONT Jacques
02 DUPONT Pierre
03 TOTO Luc
. . .
. . .
2)
Table Carriere =
Carriere_Num Entier (Numéro automatique)
Carriere_Date_Debut Date
Carriere_Date_Sortie Date
Carriere_Jour_Sortie_17H Texte
.
.
Carriere_Employe_Num Entier (clé étrangère de la table Employe)
Ex :
Carriere_Num Carriere_Date_Debut Carriere_Date_Sortie
Carriere_Jour_Sortie_17H Carriere_Employe_Num
01 01/01/2001 25/12/2006 Mercredi 01
02 02/01/2007 valeur nulle Vendredi 01
03 28/04/2003 valeur nulle Mardi 02
04 01/03/2002 30/08/2002 Mercredi 03
05 01/09/2002 valeur nulle Mercredi 03
.
3)
Table Absence =
Absence_Num Entier (reprends le numéro de l’employé concerné)
Absence_Date_Debut Date
Absence_Date_Fin Date
Ex :
Absence_Num Absence_Date_Debut Absence_Date_Fin
02 01/02/2007 27/02/2007
03 09//02/2007 15/02/2007
02 01/03/2007 02/03/2007


EX FINAL :

Calcul du NBRE d’Heures Absentes entre le 12/02/2007 et le 16/02/2007 (dates
saisies par l’utilisateur):
Employe 02 (DUPONT Pierre)
8 x NbDayOpen(Absence_Date_Debut ; Absence_Date_Fin) – (Nb Jours De
Travail à 7 Heures)
=
8 x 5 – 1 (le 16/02/2007 est un vendredi, donc un jour pour lequel l’employé
02 ne travaille que 7 Heures)
= 39 Heures Totales Normalement Travaillées qui sont comptées comme Absentes

Employe 03 (TOTO Luc)
8 x NbDayOpen(Absence_Date_Debut ; Absence_Date_Fin) – (Nb Jours De
Travail à 7 Heures)
8 x 4 – 1 (le 13/02/2007 est un mardi, donc un jour pour lequel l’employé
03 ne travaille que 7 Heures)



= 31 Heures Totales Normalement Travaillées qui sont comptées comme Absentes

Voici ce que je souhaite : les Employés qui ont eu des Absences durant la
période saisie =

Période (correspondant à une semaine)
Employe X X1 Heures Travaillées Absentes
Employe Y Y1 Heures Travaillées Absentes
Employe Z Z1 Heures Travaillées Absentes

Ex :
12/02/2007 - 16/02/2007
DUPONT Pierre 39 Heures Travaillées Absentes
TOTO Luc 31 Heures Travaillées Absentes

Merci d'avance pour ton aide.


Bonjour

Je reconnais mon code... ;-)

Sinon, je n'ai pas tout compris mais à première vu, il n'est pas utile de
modifier la fonction. Mais d'après ce que je comprends, le résultat souhaité
n'est pas un nombre de jour mais un nombre d'heures ? Toujours d'après ce que
je comprends, si tu as une date qui est dans ton champ
Carriere_Date_Sortie_17H, tu comptes 7 heures pour ce jour sinon tu comptes 8
heures et biensûr, tu peux avoir plusieurs date à 17h pour le même employé ???

Maintenant en imaginant que j'ai tout compris... ;-) ça pourrait donner :

1°) Utiliser la fonction dans une requête sans la modifier dans un champ
calculé pour retourner le nombre de jours entre tes 2 dates genre :
NbJour : NbDayOpen(#TaDateDébut# ; #TaDateFin#)

2°) Déterminer le nombre de jour à l'aide d'un champ calculé, où l'employé a
fini à 17 heure :
NbDepart17H:CpteDom("Carriere_Date_Sortie_17H";"TaTableAvecDate17H";"IdEmploye="
& [IdEmploye] & " AND (Carriere_Date_Sortie Between #TaDateDebut# and
#TaDateFin#)")

3°) Utiliser ces 2 calculs pour faire ce que tu souhaites, par exemple :
(8*NbJour)-(NbDepart17H) qui te donnera le nombre d'heures entre tes 2
dates...

Maintenant, il se peut que je n'ai rien compris... ;-))

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.mpfa.info/
------------------------------------



Bonjour à tous et à toutes ! ! !

Je dispose d'un module me donnant le nombre de jours ouvrés entre 2 dates
(que je saisie)
Je veux le modifier pour y ajouter un 3ème paramètre qui est le numéro
d'employé.
Ceci me permettra de calculer le nombre d'heures absentes pendant la période
pour chaque employé.
Sachant qu'un employé à un jour de sortie à 17H alors qu'il sort d'habitude
à 18H (ce jour est la propriété "Carriere_Date_Sortie_17H" et est un nombre),
je dois donc dans ce module vérifier dans la table Carriere le jour de sortie
de l'employé en le comparant à la date courante.
Si la date courante est le jour de sortie à 17H, on ajoute 7 heures au
total, sinon, on ajoute 8 heures.
Voici le module d'origine :
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates
' Utilise la fonction JourFérié(UneDate As Date)


Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim Resultat As Integer


If IsNull(DateDeb) Or IsNull(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf DateDeb > DateFin Then
Dim dhTemp As Date
dhTemp = DateDeb
DateDeb = DateFin
DateFin = dhTemp
End If


dblDateDeb = CDbl(DateDeb)
dblDateFin = CDbl(DateFin)


Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If Weekday(DateCourante) <> 1 And _
Weekday(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
Resultat = Resultat + 1
End If
dblDateDeb = dblDateDeb + 1
Loop
NbDayOpen = Resultat


End Function
J'espère être suffisamment explicite
Merci d'avance pour votre aide ! ! !











Avatar
Jessy Sempere
Bonjour

Si tu pars dans l'optique d'une table contenant les horaires de chaque jour
pour les employés, une fonction plus simple peut-être envisagée je pense, en
gros, tu rajoutes pour chaque date, la valeur contenu dans ta table HORAIRE,
et je dirais même que ton champ Carriere_Jour_Sortie_17h n'est plus
d'utilité...

En gros, ça pourrait donner un truc dans ce genre :

Public Function NbHoursOpenDay(dtDeb As Date, dtFin As Date, _
intNum As Integer) As Integer

Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim resultat As Integer

resultat = 0

If IsNull(dtDeb) Or IsNull(dtFin) _
Or IsEmpty(dtDeb) Or IsEmpty(dtFin) Then
NbHoursOpenDay = 0
Exit Function
ElseIf Not IsDate(dtDeb) Or Not IsDate(dtFin) Then
NbHoursOpenDay = 0
Exit Function
ElseIf dtDeb > dtFin Then
Dim dhTemp As Date
dhTemp = dtDeb
dtDeb = dtFin
dtFin = dhTemp
End If

dblDateDeb = CDbl(dtDeb)
dblDateFin = CDbl(dtFin)

Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If WeekDay(DateCourante) <> 1 And _
WeekDay(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
resultat = resultat + dlookup("Horaire_Nombre","HORAIRE", _
"Horaire_Jour='" & Format(DateCourante, "dddd") & "' And
Horaire_Num =" & intNum)
End If
dblDateDeb = dblDateDeb + 1
Loop
NbHoursOpenDay = resultat

End Function

--
@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
Avatar
rafael
Bonjour ! ! ! ! ! ! ! ! ! !

Merci Jessy pour tes réponses car elles correspondent à mes questions à
chaque fois (cela signifie que je ne me débrouille pas trop mal pour les
poser :=) ).

Je suis bientôt à la fin de ma demande.

Il me reste à mélanger 2 requêtes afin de calculer le nombre réel
d’Heures faites par tous les employés pendant une période, et ainsi pouvoir
connaître le nombre d’Heures à rattraper (s’ils ont trop d’Heures absentes)
OU à récupérer plus tard (s’ils ont au final travaillé plus que le temps
normal).
Pour une période saisie (qui peut être 3 jours, 10 jours, 17 jours, dans la
plupart des cas une semaine…), je dispose des requêtes me donnant :
- le nombre d’Heures Supp effectuées par les employés (malheureusement
seulement ceux qui en ont faites pendant la période).
- le nombre d’Heures Absentes effectuées par les employés
(malheureusement seulement ceux qui en ont faites pendant la période)..

Si je mélange les 2 requêtes, je n’aurai, à priori, que les employés
ayant pendant la période saisie, fait à la fois des Heures Supp ET des Heures
Absentes, ceci étant du aux jointures des tables utilisées.
Je cherche donc à pouvoir afficher pour tout le personnel actif pendant la
période saisie le nombre d’Heures Normales (39 Heures pour ceux qui sont à
100% pour une période d’une semaine, 31 Heures pour ceux qui sont à 80%, 24
Heures pour ceux qui sont à 60% ; les nombres 39, 31, 24… dépendent des
valeurs saisies dans la propriété Horaire_Nombre de la table Horaire pour
chaque jour travaillé de la semaine), le nombre d’Heures Supp, et le nombre
d’Heures Absentes, et les TOTAUX correspondant aux Heures effectuées et aux
Heures à mémoriser .


TOTAL1 : Nombre d’Heures réalisées pendant la période
TOTAL2 : Nombre d’Heures qui seront à rattraper (si c’est négatif) OU à
récupérer par la suite (si c’est positif)
CALCUL DU TOTAL2 : Si TOTAL1 <= NB HEURES NORMALES
Alors on affiche la différence
Sinon Pour les H Supp comprises entre la 40ème et la 43ème (les
4 premières H Supp), les H Supp sont à 25%
Pour les H Supp faites après la 43ème Heure, les H Supp sont à 50%.

Ex :

NOM PRENOM NB NORMALES NB H SUPP NB H ABSENTES TOTAL1 TOTAL2
TOTO Julien 39 0 8 31 -8
TATA Dominique 39 3 0 42 3.75 (3x1.25)
TUTU Jacques 39 0 0 39 0
TETE Marc 39 10 4 45 8 (4x1.25 + 2x1.5)
TYTY Luc 24 2 1 25 1.25 (1x1.25)

Voici les 2 requêtes utilisées :

SELECT [Saisissez le Début de la Période], [Saisissez la Fin de la Période],
SUM(HeureSup.HeureSup_Duree_APayer) AS [Nb H SUP A PAYER],
SUM(HeureSup.HeureSup_Duree_ARecup) AS [Nb H SUP A RECUP],
Employe.Employe_Nom_Patronymique AS NOM, Employe.Employe_Prenom AS PRENOM
FROM (Employe INNER JOIN Carriere ON
Employe.Employe_NumÊrriere.Carriere_Employe_Num) INNER JOIN HeureSup ON
Employe.Employe_Num=HeureSup.HeureSup_Num
WHERE HeureSup_Date Between [Saisissez le Début de la Période] And
[Saisissez la Fin de la Période] And
Carriere.Carriere_Date_Entree<=[Saisissez la Fin de la Période] And
(Carriere.Carriere_Date_Sortie Is Null Or
Carriere.Carriere_Date_Sortie>=[Saisissez le Début de la Période]) And
HeureSup_Date Between Carriere.Carriere_Date_Entree And
IIf(Carriere.Carriere_Date_Sortie Is
Null,#12/31/9999#,Carriere.Carriere_Date_Sortie)
GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom;


SELECT [Saisissez le Début de la période] AS [DEBUT PERIODE], [Saisissez la
Fin de la période] AS [FIN PERIODE], Employe.Employe_Nom_Patronymique AS NOM,
Employe.Employe_Prenom AS PRENOM, SUM(
IIF(Absence.Absence_Date_Debut = Absence.Absence_Date_Fin, Absence_DureeHeure,
NbHoursOpenDay(IIf([Saisissez le Début de la
période]>Absence.Absence_Date_Debut, [Saisissez le Début de la
période],Absence.Absence_Date_Debut),
IIf([Saisissez la Fin de la période]>Absence.Absence_Date_Fin,
Absence.Absence_Date_Fin,[Saisissez la Fin de la période]),
Carriere.Carriere_Num)
))/5 AS [NB HEURES TRAVAILLEES ABSENTES]
FROM AbsenceType INNER JOIN (((Employe INNER JOIN Carriere ON
Employe.Employe_NumÊrriere.Carriere_Employe_Num) INNER JOIN Horaire ON
Carriere.Carriere_Num=Horaire.Horaire_Num) INNER JOIN Absence ON
Employe.Employe_Num«sence.Absence_Num) ON
AbsenceType.AbsenceType_Num«sence.Absence_Absence_Type_Num
WHERE (Absence.Absence_Date_Debut>Êrriere.Carriere_Date_Entree And
(Absence.Absence_Date_Fin<Êrriere.Carriere_Date_Sortie
Or Carriere.Carriere_Date_Sortie Is Null)
And Year(Absence.Absence_Date_Debut)=Year([Saisissez le Début de la Période])
And Year(Absence.Absence_Date_Fin)=Year([Saisissez la Fin de la Période]))
And (year(Carriere.Carriere_Date_Entree)<=Year([Saisissez le Début de la
Période]))
And (Carriere.Carriere_Date_Sortie Is Null
Or year(Carriere.Carriere_Date_Sortie)>=Year([Saisissez la Fin de la
Période]))
And (Absence.Absence_Date_Debut Between [Saisissez le Début de la Période]
And [Saisissez la Fin de la Période]
Or Absence.Absence_Date_Fin Between [Saisissez le Début de la Période] And
[Saisissez la Fin de la Période]
Or (Absence.Absence_Date_Debut<[Saisissez le Début de la Période]
And Absence.Absence_Date_Fin>[Saisissez la Fin de la Période]))
GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom;

J'espère que ma demande est réalisable.
Merci encore pour ton aide.
Avatar
Jessy Sempere
Bonsoir Rafael

Bon... là... j'avoue... la longueur du mail m'a fait déprimer... ;-)

Je vais regarder et je te disrais ce que je pense...
Juste pour être sûr, tu veux au final les champs de ton exemple de tous les
employés de la base pour une période donnée ???

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"rafael" a écrit dans le message de news:

Bonjour ! ! ! ! ! ! ! ! ! !

Merci Jessy pour tes réponses car elles correspondent à mes questions à
chaque fois (cela signifie que je ne me débrouille pas trop mal pour les
poser :=) ).

Je suis bientôt à la fin de ma demande.

Il me reste à mélanger 2 requêtes afin de calculer le nombre réel
d'Heures faites par tous les employés pendant une période, et ainsi
pouvoir
connaître le nombre d'Heures à rattraper (s'ils ont trop d'Heures
absentes)
OU à récupérer plus tard (s'ils ont au final travaillé plus que le temps
normal).
Pour une période saisie (qui peut être 3 jours, 10 jours, 17 jours, dans
la
plupart des cas une semaine.), je dispose des requêtes me donnant :
- le nombre d'Heures Supp effectuées par les employés (malheureusement
seulement ceux qui en ont faites pendant la période).
- le nombre d'Heures Absentes effectuées par les employés
(malheureusement seulement ceux qui en ont faites pendant la période)..

Si je mélange les 2 requêtes, je n'aurai, à priori, que les employés
ayant pendant la période saisie, fait à la fois des Heures Supp ET des
Heures
Absentes, ceci étant du aux jointures des tables utilisées.
Je cherche donc à pouvoir afficher pour tout le personnel actif pendant la
période saisie le nombre d'Heures Normales (39 Heures pour ceux qui sont à
100% pour une période d'une semaine, 31 Heures pour ceux qui sont à 80%,
24
Heures pour ceux qui sont à 60% ; les nombres 39, 31, 24. dépendent des
valeurs saisies dans la propriété Horaire_Nombre de la table Horaire pour
chaque jour travaillé de la semaine), le nombre d'Heures Supp, et le
nombre
d'Heures Absentes, et les TOTAUX correspondant aux Heures effectuées et
aux
Heures à mémoriser .


TOTAL1 : Nombre d'Heures réalisées pendant la période
TOTAL2 : Nombre d'Heures qui seront à rattraper (si c'est négatif) OU à
récupérer par la suite (si c'est positif)
CALCUL DU TOTAL2 : Si TOTAL1 <= NB HEURES NORMALES
Alors on affiche la différence
Sinon Pour les H Supp comprises entre la 40ème et la 43ème (les
4 premières H Supp), les H Supp sont à 25%
Pour les H Supp faites après la 43ème Heure, les H Supp sont à 50%.

Ex :

NOM PRENOM NB NORMALES NB H SUPP NB H ABSENTES TOTAL1 TOTAL2
TOTO Julien 39 0 8 31 -8
TATA Dominique 39 3 0 42 3.75 (3x1.25)
TUTU Jacques 39 0 0 39 0
TETE Marc 39 10 4 45 8 (4x1.25 + 2x1.5)
TYTY Luc 24 2 1 25 1.25 (1x1.25)

Voici les 2 requêtes utilisées :

SELECT [Saisissez le Début de la Période], [Saisissez la Fin de la
Période],
SUM(HeureSup.HeureSup_Duree_APayer) AS [Nb H SUP A PAYER],
SUM(HeureSup.HeureSup_Duree_ARecup) AS [Nb H SUP A RECUP],
Employe.Employe_Nom_Patronymique AS NOM, Employe.Employe_Prenom AS PRENOM
FROM (Employe INNER JOIN Carriere ON
Employe.Employe_NumÊrriere.Carriere_Employe_Num) INNER JOIN HeureSup ON
Employe.Employe_Num=HeureSup.HeureSup_Num
WHERE HeureSup_Date Between [Saisissez le Début de la Période] And
[Saisissez la Fin de la Période] And
Carriere.Carriere_Date_Entree<=[Saisissez la Fin de la Période] And
(Carriere.Carriere_Date_Sortie Is Null Or
Carriere.Carriere_Date_Sortie>=[Saisissez le Début de la Période]) And
HeureSup_Date Between Carriere.Carriere_Date_Entree And
IIf(Carriere.Carriere_Date_Sortie Is
Null,#12/31/9999#,Carriere.Carriere_Date_Sortie)
GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom;


SELECT [Saisissez le Début de la période] AS [DEBUT PERIODE], [Saisissez
la
Fin de la période] AS [FIN PERIODE], Employe.Employe_Nom_Patronymique AS
NOM,
Employe.Employe_Prenom AS PRENOM, SUM(
IIF(Absence.Absence_Date_Debut = Absence.Absence_Date_Fin,
Absence_DureeHeure,
NbHoursOpenDay(IIf([Saisissez le Début de la
période]>Absence.Absence_Date_Debut, [Saisissez le Début de la
période],Absence.Absence_Date_Debut),
IIf([Saisissez la Fin de la période]>Absence.Absence_Date_Fin,
Absence.Absence_Date_Fin,[Saisissez la Fin de la période]),
Carriere.Carriere_Num)
))/5 AS [NB HEURES TRAVAILLEES ABSENTES]
FROM AbsenceType INNER JOIN (((Employe INNER JOIN Carriere ON
Employe.Employe_NumÊrriere.Carriere_Employe_Num) INNER JOIN Horaire ON
Carriere.Carriere_Num=Horaire.Horaire_Num) INNER JOIN Absence ON
Employe.Employe_Num«sence.Absence_Num) ON
AbsenceType.AbsenceType_Num«sence.Absence_Absence_Type_Num
WHERE (Absence.Absence_Date_Debut>Êrriere.Carriere_Date_Entree And
(Absence.Absence_Date_Fin<Êrriere.Carriere_Date_Sortie
Or Carriere.Carriere_Date_Sortie Is Null)
And Year(Absence.Absence_Date_Debut)=Year([Saisissez le Début de la
Période])
And Year(Absence.Absence_Date_Fin)=Year([Saisissez la Fin de la Période]))
And (year(Carriere.Carriere_Date_Entree)<=Year([Saisissez le Début de la
Période]))
And (Carriere.Carriere_Date_Sortie Is Null
Or year(Carriere.Carriere_Date_Sortie)>=Year([Saisissez la Fin de la
Période]))
And (Absence.Absence_Date_Debut Between [Saisissez le Début de la Période]
And [Saisissez la Fin de la Période]
Or Absence.Absence_Date_Fin Between [Saisissez le Début de la Période] And
[Saisissez la Fin de la Période]
Or (Absence.Absence_Date_Debut<[Saisissez le Début de la Période]
And Absence.Absence_Date_Fin>[Saisissez la Fin de la Période]))
GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom;

J'espère que ma demande est réalisable.
Merci encore pour ton aide.


Avatar
rafael
Bonjour Jessy ! ! !

Je comprends ton désaroi.

Mon objectif est d'afficher dans la période saisie (DATE DEBUT PERIODE,
DATE FIN PERIODE) la liste exhaustive des personnes actives (NOM et PRENOM),
leur nombre d'Heures Théorique travaillé (39, 31, 24), le nombre d'Heures
Supp, le nombre d'Heures d'Absence, le TOTAL1 (Heures Théoriques + Heures
Supp - Heures Absence), ainsi que le TOTAL2 (expliqué précedemment : les 4
premières Heures Supp à 25%, et les suivantes à 50%).

Mon problème est que je ne vois pas comment afficher dans la même
requête ceux et celles qui n'ont pas en même temps des H Supp et des H
Absentes, c'est à dire la majorité des cas.

Merci pour le temps passé sur ces requêtes.
Bonne journée.


Bonsoir Rafael

Bon... là... j'avoue... la longueur du mail m'a fait déprimer... ;-)

Je vais regarder et je te disrais ce que je pense...
Juste pour être sûr, tu veux au final les champs de ton exemple de tous les
employés de la base pour une période donnée ???

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"rafael" a écrit dans le message de news:

Bonjour ! ! ! ! ! ! ! ! ! !

Merci Jessy pour tes réponses car elles correspondent à mes questions à
chaque fois (cela signifie que je ne me débrouille pas trop mal pour les
poser :=) ).

Je suis bientôt à la fin de ma demande.

Il me reste à mélanger 2 requêtes afin de calculer le nombre réel
d'Heures faites par tous les employés pendant une période, et ainsi
pouvoir
connaître le nombre d'Heures à rattraper (s'ils ont trop d'Heures
absentes)
OU à récupérer plus tard (s'ils ont au final travaillé plus que le temps
normal).
Pour une période saisie (qui peut être 3 jours, 10 jours, 17 jours, dans
la
plupart des cas une semaine.), je dispose des requêtes me donnant :
- le nombre d'Heures Supp effectuées par les employés (malheureusement
seulement ceux qui en ont faites pendant la période).
- le nombre d'Heures Absentes effectuées par les employés
(malheureusement seulement ceux qui en ont faites pendant la période)..

Si je mélange les 2 requêtes, je n'aurai, à priori, que les employés
ayant pendant la période saisie, fait à la fois des Heures Supp ET des
Heures
Absentes, ceci étant du aux jointures des tables utilisées.
Je cherche donc à pouvoir afficher pour tout le personnel actif pendant la
période saisie le nombre d'Heures Normales (39 Heures pour ceux qui sont à
100% pour une période d'une semaine, 31 Heures pour ceux qui sont à 80%,
24
Heures pour ceux qui sont à 60% ; les nombres 39, 31, 24. dépendent des
valeurs saisies dans la propriété Horaire_Nombre de la table Horaire pour
chaque jour travaillé de la semaine), le nombre d'Heures Supp, et le
nombre
d'Heures Absentes, et les TOTAUX correspondant aux Heures effectuées et
aux
Heures à mémoriser .


TOTAL1 : Nombre d'Heures réalisées pendant la période
TOTAL2 : Nombre d'Heures qui seront à rattraper (si c'est négatif) OU à
récupérer par la suite (si c'est positif)
CALCUL DU TOTAL2 : Si TOTAL1 <= NB HEURES NORMALES
Alors on affiche la différence
Sinon Pour les H Supp comprises entre la 40ème et la 43ème (les
4 premières H Supp), les H Supp sont à 25%
Pour les H Supp faites après la 43ème Heure, les H Supp sont à 50%.

Ex :

NOM PRENOM NB NORMALES NB H SUPP NB H ABSENTES TOTAL1 TOTAL2
TOTO Julien 39 0 8 31 -8
TATA Dominique 39 3 0 42 3.75 (3x1.25)
TUTU Jacques 39 0 0 39 0
TETE Marc 39 10 4 45 8 (4x1.25 + 2x1.5)
TYTY Luc 24 2 1 25 1.25 (1x1.25)

Voici les 2 requêtes utilisées :

SELECT [Saisissez le Début de la Période], [Saisissez la Fin de la
Période],
SUM(HeureSup.HeureSup_Duree_APayer) AS [Nb H SUP A PAYER],
SUM(HeureSup.HeureSup_Duree_ARecup) AS [Nb H SUP A RECUP],
Employe.Employe_Nom_Patronymique AS NOM, Employe.Employe_Prenom AS PRENOM
FROM (Employe INNER JOIN Carriere ON
Employe.Employe_NumÊrriere.Carriere_Employe_Num) INNER JOIN HeureSup ON
Employe.Employe_Num=HeureSup.HeureSup_Num
WHERE HeureSup_Date Between [Saisissez le Début de la Période] And
[Saisissez la Fin de la Période] And
Carriere.Carriere_Date_Entree<=[Saisissez la Fin de la Période] And
(Carriere.Carriere_Date_Sortie Is Null Or
Carriere.Carriere_Date_Sortie>=[Saisissez le Début de la Période]) And
HeureSup_Date Between Carriere.Carriere_Date_Entree And
IIf(Carriere.Carriere_Date_Sortie Is
Null,#12/31/9999#,Carriere.Carriere_Date_Sortie)
GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom;


SELECT [Saisissez le Début de la période] AS [DEBUT PERIODE], [Saisissez
la
Fin de la période] AS [FIN PERIODE], Employe.Employe_Nom_Patronymique AS
NOM,
Employe.Employe_Prenom AS PRENOM, SUM(
IIF(Absence.Absence_Date_Debut = Absence.Absence_Date_Fin,
Absence_DureeHeure,
NbHoursOpenDay(IIf([Saisissez le Début de la
période]>Absence.Absence_Date_Debut, [Saisissez le Début de la
période],Absence.Absence_Date_Debut),
IIf([Saisissez la Fin de la période]>Absence.Absence_Date_Fin,
Absence.Absence_Date_Fin,[Saisissez la Fin de la période]),
Carriere.Carriere_Num)
))/5 AS [NB HEURES TRAVAILLEES ABSENTES]
FROM AbsenceType INNER JOIN (((Employe INNER JOIN Carriere ON
Employe.Employe_NumÊrriere.Carriere_Employe_Num) INNER JOIN Horaire ON
Carriere.Carriere_Num=Horaire.Horaire_Num) INNER JOIN Absence ON
Employe.Employe_Num«sence.Absence_Num) ON
AbsenceType.AbsenceType_Num«sence.Absence_Absence_Type_Num
WHERE (Absence.Absence_Date_Debut>Êrriere.Carriere_Date_Entree And
(Absence.Absence_Date_Fin<Êrriere.Carriere_Date_Sortie
Or Carriere.Carriere_Date_Sortie Is Null)
And Year(Absence.Absence_Date_Debut)=Year([Saisissez le Début de la
Période])
And Year(Absence.Absence_Date_Fin)=Year([Saisissez la Fin de la Période]))
And (year(Carriere.Carriere_Date_Entree)<=Year([Saisissez le Début de la
Période]))
And (Carriere.Carriere_Date_Sortie Is Null
Or year(Carriere.Carriere_Date_Sortie)>=Year([Saisissez la Fin de la
Période]))
And (Absence.Absence_Date_Debut Between [Saisissez le Début de la Période]
And [Saisissez la Fin de la Période]
Or Absence.Absence_Date_Fin Between [Saisissez le Début de la Période] And
[Saisissez la Fin de la Période]
Or (Absence.Absence_Date_Debut<[Saisissez le Début de la Période]
And Absence.Absence_Date_Fin>[Saisissez la Fin de la Période]))
GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom;

J'espère que ma demande est réalisable.
Merci encore pour ton aide.