Episode VI de la saga ‘Weekday’. Cette fois-ci, on introduit la notion de mois puisque l’on souhaite obtenir la date d’un premier jour de semaine du mois de la date de référence. Quelle est la date du premier dimanche du mois ? La date du premier lundi du mois ?
Préambule
Je vous conseille de lire le premier billet de ‘Weekday’ pour comprendre le principe des calculs.
Voir aussi le récapitulatif des fonctions.
La fonction VBA
Nécessite la fonction DateJourSuivant()
DateJourDebutMois = DateJourSuivant(DateRef - Day(DateRef), Jour)
End Function
Pour atteindre rapidement le dernier jour du mois précédent, on soustrait à la date de référence son jour du mois. Par exemple le 15 août – 15 donnera le 31 juillet.
On recherche ensuite le jour de semaine souhaité qui suit le dernier jour du mois précédent grâce à notre fonction DateJourSuivant().
Tester la fonction
Affiche les résultats dans la fenêtre ‘Exécution’ de l’éditeur VB.
Dim s As String, d As Date, dm As Date, djdm As Date
Dim i As Integer, j As Integer, NbErr As Integer
Debug.Print "Test DateJourDebutMois()" & vbCrLf & "----------------------"
d = Int(Now())
While Weekday(d) <> vbMonday: d = d + 1: Wend
Debug.Print "* Semaine de référence du " & Format(d, "dddd dd/mm/yyyy") & " au " & Format(d + 6, "dddd dd/mm/yyyy")
For i = 1 To 7
dm = DateSerial(Year(d), Month(d), 1)
j = i Mod 7 + 1
While Weekday(dm) <> j: dm = dm + 1: Wend
djdm = DateJourDebutMois(d, Weekday(d))
s = s & vbTab & "-> Jour recherché : " & Format(dm, "ddd dd/mm/yyyy") & " - Jour trouvé : " & Format(djdm, "ddd dd/mm/yyyy") & vbCrLf
If djdm <> dm Then NbErr = NbErr + 1
d = d + 1
Next i
Debug.Print s & "***" & IIf(NbErr > 0, NbErr, " Aucune") & " erreur(s) commise(s) ***"
End Function
@+ pour la suite des épisodes ‘Weekday’.
Philippe