Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…