Date et heure MondayOffweek

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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)
 
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:
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
 
Bonjour à toutes et tous,
Je passais par là, et je n'ai pas pu résister à l'envie de titiller un peu ! 🙂
Cordialement.

VB:
Public Function MondayInWeek(year As Integer, Optional week)
Dim dt As Date, weeks As Integer

    If IsMissing(week) Then week = 1
    dt = VBA.DateSerial(year, 1, -2)
    weeks = WorksheetFunction.IsoWeekNum(VBA.DateSerial(year, 12, 28))
    MondayInWeek = IIf(week <= weeks, dt - VBA.Weekday(VBA.DateSerial(year, 1, 3)) + week * 7, vbNullString)
    
End Function
 
bonsoir

VB:
Function MondayOfWeek(year, Optional w As Long = 1)
    Dim Dat
    Dat = CDate("01/01/" & year): Dat = (Dat - (Weekday(Dat, vbMonday) - 1))
    MondayOfWeek = Dat - (7 * (w - Abs(WorksheetFunction.IsoWeekNum(Dat) >= 1)))
End Function
 
Dernière édition:
Je passais par là, et je n'ai pas pu résister à l'envie de titiller un peu ! 🙂
Itou, du coup je te propose une autre version. 😉

VB:
Public Function LundiAnSem(Annee As Integer, NumSem As Integer)
    LundiAnSem = DateSerial(Annee, 1, 4) - Weekday(DateSerial(Annee, 1, 4), 2) + 7 * NumSem - 6
End Function
 
Dernière édition:
Bonjour,
Une petite mise à jour ! 😊
Bonne journée.

Code:
Public Function MondayInWeek(year As Integer, week As Integer)
    MondayInWeek = DateSerial(year, 1, -2) - Weekday(DateSerial(year, 1, 3)) + 7 * week
End Function
 
Bonjour à tous les deux
du coup j'ai réuni les deux mondayOfweek et NiemdayOfWeek l'autre fonction dans la rubrique fonction personnalisée
VB:
Sub test3()
    Dim i%
    For i = 2010 To 2025 'tout les lundis
        MsgBox Format(NiemDayOfWeek2(i, 1, 1), "dddd dd mm yyyy") 'les lundis
       ' MsgBox Format(NiemDayOfWeek2(i, 1, 3), "dddd dd mm yyyy") 'les mercredis
    Next
End Sub

Public Function NiemDayOfWeek2(year&, Optional week& = 1, Optional Niem& = 1)
    NiemDayOfWeek2 = CDate("04/01/" & year) - Weekday(CDate("04/01/" & year), 2) + (7 * week) - 6 + Niem - 1
End Function

et sa petite soeur NiemeMondayOfYear qui peut être utile dans l'organisation de planning
VB:
Sub test2()
    For i = 2020 To 2025 'tout les lundis
        MsgBox Format(NiemeMondayOfYear(i, 1), "dddd dd mm yyyy")
    Next
End Sub

'le N ème lundi de l'année  et pas de la semaine (X)
Function NiemeMondayOfYear(a, Niem As Long)
    Dat = CDate("01/01/" & a): Dat = (Dat + ((7 - (Weekday(Dat, vbMonday) - 1))) * Abs(Weekday(Dat, vbMonday) > 1)) + (Niem - 1)
    NiemeMondayOfYear = Dat
End Function

pour info on est pas dans le forum excel ici mais dans les fonction personnalisée
si on veut participer on s’adresse a l'auteur de la fonction personnalisée et à tout les participants et surtout par un bonjour
merci de votre compréhension
Patrick
 
Dernière édition:
Bonjour @Dranreb
je répète donc c'est une ressource /article /fonction personnalisée
ce forum a été créé par @David Aubert pour récolter des fonctions personnalisées a fin de faire un complément de fonction XLD
la surenchère avec une panoplie de truc et d'astuce n'ont pas leur place ici
donc donne juste ta fonction avec une petite sub de test si tu y tiens
le reste on en a pas besoin
afin que l'on puisse la tester
merci de ta compréhension

ps d'autant plus que je commence a être excédé de voir systématiquement mes posts pollués par des choses qui sont hors contexte
dans le quel j'ai créé cet article
et surtout un manque de respect manifeste de certains

ps2:
si il leur est si difficile pour certains de s'adresser à moi c'est pas grave , on est pas fâché, il leur est toujours possible d'ouvrir leur propre article

merci de votre compréhension à tous
Patrick
 
Bof. La discussion parlait d'un fonction qui donnait le lundi d'une semaine d'une année, j'ai montré une fonction soit perso soit Excel avec un LET qui donne en somme n'importe lequel des 7 jours d'une telle semaine. Il n'y a pas à en faire toute une histoire …
 
la fonction perso je veux bien mais pas le reste
une formule let n'a pas sa place ici
je compte commencer un projet xla xld commun
je garderais la meilleure
je vais entamer cette discussion dans le forum
 
Bonjour Patrick,
Je tiens à m'excuser pour le ton de mon message précédent.
Je ne voulais pas que mes paroles soient interprétées comme un manque de respect envers tes contributions.
J'apprécie tes efforts et ta volonté de partager tes connaissances.
Cordialement.
 
Je préfère aussi les fonctions perso, mais pour les nombreux qui semblent préférer les éviter lorsque ça peut se faire par formules utilisant les fonctions standard d'Excel, et puisque c'était assez simple ici, j'en ai proposé qui font la même chose, c'est tout. Notez aussi la fonction inverse, An, Semaine et Jour semaine correspondant à une date. Ça peut servir, non ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
975
Réponses
0
Affichages
2 K
Retour