Bonjour à tous,

Je vous présente rapidemment mon projet et l'endroit où je suis bloquée. Etant novice en access, j'ai réussi grace a l'aide de plusieurs personnes à avancer sur ma base mais là je suis face à problème que je ne sais pas trop comment résoudre.

Alors voilà j'ai un formulaire principal comportant deux sous-formulaires (récupéré à partir d'une requete analyse croisée). Sur le formulaire principal j'ai un tableau qui calcule la somme par jour des deux sous-formulaires.

En dessous j'ai une partie de calcul qui permet de faire la somme par semaine.
Le problème que je rencontre est comment faire pour calculer les heures de début et fin de mois. Par exemple, le mois d'août commence par un jeudi, pour la semaine 1 je veux donc avoir la somme que pour le jeudi, vendredi, samedi, dimanche. (Pas besoin de récupérer les heures du mois précédent).

Pour le moment grace a l'aide de l'User et de Madefemere et d'autres, j'ai un module qui calcule la somme de chaque semaine. Dans ce module il y a une fonction qui prenant en paramètre un jour de la semaine trouve le début de celle-ci. Celà est bien pour une semaine dans le mois mais pour le début ou la fin du mois je n'en ai pas besoin.

Je laisse le code qui permet de calculer la somme
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Option Compare Database
Option Explicit
Dim NbJourMois As Long
Dim i As Integer
Dim d1 As Date, d2 As Date, d3 As Date
 
Public Function DebutSemaine(ByVal DateSemaine As Date) As Date
'NbHeuresSemaine (DateSerial([Formulaires]![Frm_Pointage]![An], [Formulaires]![Frm_Pointage]![Mois], 3))
'Prend en argument un jour dans la semaine choisie et renvoie la date du premier jour de cette semaine
 
i = Weekday(DateSemaine, vbMonday)
DebutSemaine = DateAdd("d", -i + 1, DateSemaine)
End Function
'Calcul du nombre d'heures pointées imputables
Public Function NbHeuresSemaineImpu(ByVal DateSemaine As Date, SalarieLog As String) As Long
d1 = DebutSemaine(DateSemaine)
d2 = d1 + 6
NbJourMois = DaysInMonth(Month(DateSemaine), Year(DateSemaine))
d3 = DateSerial(Year(DateSemaine), Month(DateSemaine), NbJourMois)
If Month(d2) > Month(DateSemaine) Then
    NbHeuresSemaineImpu = Nz(DSum("[NbHeuresPointées]", "[T_Pointage]", "[DatePointage] BETWEEN " & FDateUs(d1) & " AND " & FDateUs(d3) _
                                                            & " AND [LoginSalarié]='" & SalarieLog & "'"), 0)
Else
    NbHeuresSemaineImpu = Nz(DSum("[NbHeuresPointées]", "[T_Pointage]", "[DatePointage] BETWEEN " & FDateUs(d1) & " AND " & FDateUs(d2) _
                                                            & " AND [LoginSalarié]='" & SalarieLog & "'"), 0)
End If
End Function
'Calcul du nombre d'heures par semaines pour les non imputables
Public Function NbHeuresSemaineNonImputable(ByVal DateSemaine As Date, SalarieLog As String) As Long
d1 = DebutSemaine(DateSemaine)
d2 = d1 + 6
NbJourMois = DaysInMonth(Month(DateSemaine), Year(DateSemaine))
d3 = DateSerial(Year(DateSemaine), Month(DateSemaine), NbJourMois)
 
If Month(d2) > Month(DateSemaine) Then
NbHeuresSemaineNonImputable = Nz(DSum("[NbHeuresPointées]", "[T_Pointage_Non_Imputable]", "[DatePointage] BETWEEN " & FDateUs(d1) & " AND " & FDateUs(d3) _
                                                            & " AND [LoginSalarié]='" & SalarieLog & "'"), 0)
Else
NbHeuresSemaineNonImputable = Nz(DSum("[NbHeuresPointées]", "[T_Pointage_Non_Imputable]", "[DatePointage] BETWEEN " & FDateUs(d1) & " AND " & FDateUs(d2) _
                                                            & " AND [LoginSalarié]='" & SalarieLog & "'"), 0)
End If
End Function
et voici la ligne source controle pour chaque zone de texte ou je veux faire la somme par semaine
Code : Sélectionner tout - Visualiser dans une fenêtre à part
=NbHeuresSemaineImpu(SérieDate([An];[Mois];1);[LoginSalarie])
pour la semaine 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
=NbHeuresSemaineImpu(SérieDate([An];[Mois];8);[LoginSalarie])
pour la semaine 2

[CODE]=NbHeuresSemaineImpu(SérieDate([An];[Mois];15);[LoginSalarie])[CODE] pour la semaine 3

Code : Sélectionner tout - Visualiser dans une fenêtre à part
=NbHeuresSemaineImpu(SérieDate([An];[Mois];22);[LoginSalarie])
pour la semaine 4

Code : Sélectionner tout - Visualiser dans une fenêtre à part
=NbHeuresSemaineImpu(SérieDate([An];[Mois];29);[LoginSalarie])
pour la semaine 5

Merci à tous de votre aide