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 :
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é.
Cela fonctionne bien en cas d'une seule date.
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
Comment calculeriez-vous le nombre de demi-jours entre deux dates, en tenant compte des moments ?
Merci de votre aide.
Partager