Langage :
VB6
,
VBA
Date ajout :
04/12/2010
Posté par
PCPT
[
Liste]
DateMAJ :
04/12/2010
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
Remarque :
LE 04/12/2010 :
GetSpecificalDay(vbTuesday, 1, Now) retournera 07/12/2010
GetSpecificalDay(vbTuesday, 4, Now) retournera 28/12/2010
GetSpecificalDay(vbWednesday, 1, Now) retournera 01/12/2010
GetSpecificalDay(vbThursday, 5, Now) retournera 30/12/2010
GetSpecificalDay(vbSaturday, 8, Now) relèvera l'erreur 'le mois [M-12] ne contient pas 8 [D-7].
Function GetSpecificalDay(ByVal eDayOfWeek As System.DayOfWeek, ByVal iIterationInMonth As Integer, 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
'1er du mois/année à charger
Dim dRef As Date = New Date(dDate.Year, dDate.Month, 1)
Dim dDif As Date = dRef
'à laquelle on ajoute le jour recherché
For i As Int16 = 0 To 6
dDif = dRef.AddDays(i)
If dDif.DayOfWeek = 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 = dDif.AddDays((iIterationInMonth - 1) * 7)
'test de valeur MAX (supérieur à 4 ou 5 selon les mois pour la cohérence)
If Not dDif.Month.Equals(dRef.Month) Then _
Throw New Exception(String.Format("Erreur d'utilisation de la fonction 'GetSpecificalDay'" & _
", le mois [M-{0}] ne contient pas {1} [D-{2}].", _
dRef.Month, iIterationInMonth, dDif.DayOfWeek))
Return dDif
End Function