Bonjour,

J'ai une nouvelle fois besoin de vos lumières.
Il s'agit de calculer le nombre de demi-jours entre deux dates.
Il y a la fonction datediff ( là, aucun souci ) pour le nombre de jours entre deux dates ; cependant, des demi-jours seront à extraire au calcul...

Le contexte

Il s'agit de stocker les exclusions d'un élève ( l'élève ne peut plus aller en cours, car il a fait quelque chose de grave ).
Les exclusions se calculent en demi-jours. Ainsi, s'il est exclu...
  • un lundi toute la journée -> deux demi-jours
  • un lundi matin -> un demi-jour
  • un lundi après-midi -> un demi-jour
  • un mercredi -> un demi-jour ( en Belgique, il n'y a pas cours le mercredi après-midi ).


La table

Les champs de la table concernés pour ce calcul sont :
  • Id_EJE ( numéro auto )
  • Id_Ele ( numérique )
  • EJE_Debut_Date ( date )
  • EJE_Debut_Moment ( texte / choix entre 1-matin; 2-après-midi;3-journée )
  • EJE_Fin_Date ( date )
  • EJE_Fin_Moment ( texte / choix entre 1-matin; 2-après-midi;3-journée )
  • EJE_DemiJours ( numérique )



Le formulaire

Voici un aperçu du (sous-)formulaire d'encodage :
Nom : DvP_NbreDemiJours.png
Affichages : 277
Taille : 5,5 Ko

En encodant la date :
  • s'il s'agit d'un mercredi, la valeur "moment" est réglée sur matin ;
  • s'il s'agit d'un samedi ou d'un dimanche, un message avertit l'utilisateur de choisir une autre date.



Le "problème"

Lorsque deux dates sont encodées, il faut donc calculer le nombre de demi-jours, en tenant compte du moment ( matin/après-midi/journée ) et en excluant:
  • les mercredi après-midi
  • les samedis ( pas école )
  • les dimanches
  • les jours fériés ( idéalement )


Voici dès lors des exemples pour donner une idée des résultats attendus :

Début
(moment)
Fin
(moment)
Demi-jours
Commentaires
Lundi 01/09 matin 1
Lundi 01/09 matin Mardi 02/09 après-midi 4
Lundi 01/09 après-midi Mardi 02/09 après-midi 3
Mercredi 03/09 matin Vendredi 05/09 après-midi 5 congé mercredi après-midi
Vendredi 05/09 matin Lundi 08/09 matin 3 on décompte samedi et dimanche
Lundi 30/04 matin Mercredi 02/05 matin 3 congé le 01/05


Pour calculer le nombre de jours, voici ce que j'ai commencé.

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
Private Sub CalculNombreDemiJours()
On Error GoTo Erreurs
 
If Nz(Me!EJE_Fin_Date, "") = "" Then
    'Une seule date
    Select Case Me!EJE_Debut_Moment
        Case 1 'Matin
            Me!EJE_DemiJours = 1
        Case 2 'Après-midi
            Me!EJE_DemiJours = 1
        Case 3 'Journée
            Me!EJE_DemiJours = 2
        Case Else 'Moment non-défini
            If Weekday(Me!EJE_Debut_Date, vbMonday) = 3 Then
                'Mercredi -> Matin
                MsgBox "Le moment du premier jour d'exclusion n'a pas été défini." & vbCrLf & "Il s'agit d'un mercredi." & vbCrLf & "L'élève sera exclu dès lors le matin uniquement.", vbInformation
                Me!EJE_Debut_Moment = 1
                Me!EJE_DemiJours = 1
            Else
                'Autre jour -> Journée
                MsgBox "Le moment du premier jour d'exclusion n'a pas été défini." & vbCrLf & "L'élève sera considéré comme exclu toute la journée.", vbInformation
                Me!EJE_Debut_Moment = 3
                Me!EJE_DemiJours = 2
            End If
    End Select
Else
    Select Case Me!EJE_Fin_Moment
        Case 1 'Matin
 
        Case 2 'Après-midi
 
        Case 3 'Journée
 
        Case Else 'Moment non-défini
    End Select
End If
Cela fonctionne bien en cas d'une seule date.


Comment calculeriez-vous le nombre de demi-jours entre deux dates, en tenant compte des moments ?
Merci de votre aide.