Date et heure MondayOffweek

patricktoulon

XLDnaute Barbatruc
une autre dans le même genre
le lundi d'une semaine X d'une année(vba/formule)

VB:
Function MondayOffWeek(annee&, Lweek&)
Dim D As Date, WekD&
D = CDate("01/01/" & annee)
WekD = Weekday(D, vbUseSystemDayOfWeek)
D = D + Lweek * 7 - IIf(WekD <> 1, WekD - 1, 0)
MondayOffWeek = D
End Function

Sub testx()
    MsgBox Format(MondayOffWeek(2021, 1), "dddd dd mm yyyy")
    MsgBox Format(MondayOffWeek(2021, 23), "dddd dd mm yyyy")
    MsgBox Format(MondayOffWeek(2021, 52), "dddd dd mm yyyy")
End Sub

formule:
=MondayOffWeek(année, Nieme semaine )

exemple
le lundi de la semaine 23
=MondayOffWeek(2021, 23)
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Pourquoi que les lundis ?
Mercredis --> judo
Vendredis --> Pamela

J'ai tenté d'étendre le champ d'action de la fonction. Ma foi, ça a l'air de marcher :
VB:
Function MondayOffWeek(annee&, Lweek&, jour As Byte)
'- annee : une année
'. Lweeks : numéro de semaine dans l'année en question
'. jour : le jour de la semaine => 1 = lundi | ... | 7 = dimanche

Dim D As Date, WekD&

    D = CDate("01/01/" & annee)
    WekD = WeekDay(D, vbUseSystemDayOfWeek)
    D = D + Lweek * 7 - IIf(WekD <> 1, WekD - jour, 0)
    MondayOffWeek = D

End Function
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
petite correction semaine ISO
VB:
Function MondayOffWeek(annee&, Optional ByVal Lweek& = 1)
    Dim D As Date, WekD&, Z&
    D = CDate("01/01/" & annee)
    WekD = Weekday(D, vbUseSystemDayOfWeek)
    D = D - IIf(WekD <> 1, WekD - 1, 0)
    Z = CLng(D)
    Z = Evaluate("= TRUNC((" & Z & "-WEEKDAY(" & Z & ",2)+11-DATE(YEAR(" & Z & "-WEEKDAY(" & Z & " ,2)+4),1,1))/7)")
    MondayOffWeek = D + IIf(Z > 1, 7, 0) + ((Lweek - 1) * 7)
End Function
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof