Retourner le Nième jour de la période (ex : 3ème lundi d'aout 2010)


Contenu du snippet

Function GetSpecificalDay(ByVal eDayOfWeek As VBA.VbDayOfWeek, ByVal iIterationInMonth, ByVal dDate As Date) As Date
    'iDayOfWeek             jour de la semaine recherché
    'iIterationInMonth      position du jour dans le mois. ex : 2 pour le 2ème mercredi du mois
    'dDate                  date de recherche, le mois et l'année servent de référence
    Dim dRef As Date, dDif As Date, i As Integer
'   1er du mois/année à charger
    dRef = DateSerial(Year(dDate), Month(dDate), 1)
    dDif = dRef
'   à laquelle on ajoute le jour recherché
    For i = 0 To 6
        dDif = DateAdd("d", i, dRef)
        If Weekday(dDif) = eDayOfWeek Then Exit For
    Next
'   on a maintenant le premier jour recherché. exception nombre négatif non-pris en compte
    If iIterationInMonth > 1 Then dDif = DateAdd("d", (iIterationInMonth - 1) * 7, dDif)
'   test de valeur MAX (supérieur à 4 ou 5 selon les mois pour la cohérence)
    If Month(dDif) <> Month(dRef) Then Err.Raise vbError, "GetSpecificalDay", _
        "Erreur d'utilisation de la fonction, le mois [M-" & CStr(Month(dRef)) & "] ne contient pas " & _
        CStr(iIterationInMonth) & " [D-" & CStr(Weekday(dDif)) & "]."
    GetSpecificalDay = dDif
End Function

Compatibilité : VB6, VBA

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.