VBA : Date d’un premier jour de semaine du mois

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()

Public Function DateJourDebutMois(ByVal DateRef As Date, ByVal Jour As VbDayOfWeek) As Date
   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.

Public Function TestDateJourDebutMois()
   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

Laisser un commentaire