Bonjour à tous,

Une petit amélioration que je dois effectuer sur une base mais je ne sais pas comment le faire. Alors voilà j'ai ce module qui permet de calculer le nombre d'heures par semaine à partir d'heures par jour.

Par exemple si le mois d'août commence un jeudi il me calcule la somme du lundi 29 juillet au dimanche 4 août alors que je souhaiterais simplement calculer la somme du jeudi 1/08 au 4/08. Pareil pour la fin août.

Voici donc le code du module.
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
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 'Trouve le début de la semaine en passant en paramètre un jour quelconque
 
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 Double
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 Double
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 ici la fonction qui compte le nombre de jour du mois en cours
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
' Retourne le nombre de jour d'un mois donné, en utilisant Day(), DateSerial et DateAdd()
Public Function DaysInMonth(ByVal nMonth As Integer, ByVal nYear As Integer) As Integer
    DaysInMonth = Day(DateAdd("d", -1, DateAdd("m", 1, DateSerial(nYear, nMonth, 1))))
End Function
Merci à tous de votre aide.