Function DateJourSemaine(Année As Integer, Mois As String, JourSemaine As String, RangJourSemaine As Integer, AuDelaMois) As String
'Révision : ROGER2327 - 5 Germinal CCXVII
Dim mes As Byte, dia As Byte
Dim DateCherchée, DerDuMois [COLOR="SeaGreen"]'DerDuMois renvoie la date de la dernière occurence du jour
'cherché dans le mois passé en paramètre.[/COLOR]
Select Case MajMinSansAccent(Mois, 0)
Case "janvier", "january", "enero": mes = 1
Case "fevrier", "february", "febrero": mes = 2
Case "mars", "march", "marzo": mes = 3
Case "avril", "april", "abril": mes = 4
Case "mai", "may", "mayo": mes = 5
Case "juin", "june", "junio": mes = 6
Case "juillet", "july", "julio": mes = 7
Case "aout", "august", "agosto": mes = 8
Case "septembre", "september", "septiembre", "setiembre": mes = 9
Case "octobre", "october", "octubre": mes = 10
Case "novembre", "november", "noviembre": mes = 11
Case "decembre", "december", "diciembre": mes = 12
Case Else: DateCherchée = "?": GoTo fin
End Select
Select Case MajMinSansAccent(JourSemaine, 0)
Case "lundi", "monday", "lunes": dia = 1
Case "mardi", "tuesday", "martes": dia = 2
Case "mercredi", "wednesday", "miercoles": dia = 3
Case "jeudi", "thursday", "jueves": dia = 4
Case "vendredi", "friday", "viernes": dia = 5
Case "samedi", "saturday", "sabado": dia = 6
Case "dimanche", "sunday", "domingo": dia = 7
Case Else: DateCherchée = "?": GoTo fin
End Select
[B][COLOR="DarkRed"] DerDuMois = DateSerial(Année, mes + 1, 1) - 1 - (Weekday(DateSerial(Année, mes + 1, 1) - dia, vbMonday) - 1) Mod 7
DateCherchée = DerDuMois + 7 * (IIf(RangJourSemaine < 0, RangJourSemaine + 1, RangJourSemaine) - 1 - Day(DerDuMois - 1) \ 7)
If AuDelaMois = 0 Then
If DateCherchée >= DateSerial(Année, mes + 1, 1) Then DateCherchée = DerDuMois
If DateCherchée < DateSerial(Année, mes, 1) Then DateCherchée = DerDuMois - 7 * (Day(DerDuMois - 1) \ 7)
End If[/COLOR][/B]
fin:
DateJourSemaine = DateCherchée
End Function