En VBA, je souhaite convertir une date sous le numéro 03/11/2017 (JJ/MM/AAAA) en numéro de semaine pour cette date.
Jusqu'à présent, j'ai le code suivant:
'geting the date out of the string
HeadlineTemp = Mid(VRHeadline, InStr(VRHeadline, "[") + 1, 10)
'switch "." to "/"
HeadlineTemp = Replace(HeadlineTemp, ".", "/")
'convert to a date
FristVRFirstKW = CDate(HeadlineTemp)
Maintenant, j'ai besoin d'une fonction pour convertir cette date en numéro de semaine de l'année. Le premier jour de la semaine est le lundi.
Pour que le numéro de semaine avec lundi soit le premier jour, utilisez les éléments suivants:
WorksheetFunction.WeekNum(now,vbMonday)
En utilisant VBA, pour convertir une date en un numéro isoWeek, vous avez simplement besoin de la fonction DatePart
(où DT correspond à la date d'intérêt):
isoWeekNumber = DatePart("ww", DT, vbMonday, vbFirstFourDays)
Si vous souhaitez utiliser d'autres définitions que celle spécifiée dans l'ISO 8601, examinez certaines des autres options de FirstDayOfWeek
et FirstWeekOfYear
.
Soyez prudent en ce qui concerne les numéros de semaine car il existe différentes définitions. La définition Excel diffère de la définition ISO. Pour utiliser le numéro de semaine ISO (copié de http://www.rondebruin.nl/win/s8/win001.htm )
Public Function IsoWeekNumber(d As Date) As Integer
Dim d2 As Long
d2 = DateSerial(Year(d - Weekday(d - 1) + 4), 1, 3)
IsoWeekNumber = Int((d - d2 + Weekday(d2) + 5) / 7)
End Function
Donc, ceci est ma version finale et fonctionne parfaitement
Public Function IsoWeekNumber(d As Date) As String
Dim kwtemp As String
kwtemp = DatePart("ww", d, vbMonday, vbFirstFourDays)
If Len(kwtemp) = 1 Then kwtemp = "0" & kwtemp
IsoWeekNumber = kwtemp
End Function
If Application.International(xlMDY) = True Then
HeadlineTemp = Mid(VRHeadline, InStr(VRHeadline, "[") + 1, 10)
HeadlineTemp = Replace(HeadlineTemp, ".", "/")
HeadlineTemp = Mid(HeadlineTemp, 4, 3) & Left(HeadlineTemp, 2) & Right(HeadlineTemp, 5)
VRFirstKW = CDate(HeadlineTemp)
HeadlineTempEndKW = Mid(VRHeadline, InStr(VRHeadline, "]") - 10, 10)
HeadlineTempEndKW = Replace(HeadlineTempEndKW, ".", "/")
HeadlineTempEndKW = Mid(HeadlineTempEndKW, 4, 3) & Left(HeadlineTempEndKW, 2) & Right(HeadlineTempEndKW, 5)
VREndKW = CDate(HeadlineTempEndKW)
VRKW = "KW" & IsoWeekNumber(VRFirstKW) & "-" & IsoWeekNumber(VREndKW) & "/" & Year(VREndKW)
Else 'don't switch position of the month with days
HeadlineTemp = Mid(VRHeadline, InStr(VRHeadline, "[") + 1, 10)
HeadlineTemp = Replace(HeadlineTemp, ".", "/")
VRFirstKW = CDate(HeadlineTemp)
HeadlineTempEndKW = Mid(VRHeadline, InStr(VRHeadline, "]") - 10, 10)
HeadlineTempEndKW = Replace(HeadlineTempEndKW, ".", "/")
VREndKW = CDate(HeadlineTempEndKW)
VRKW = "KW" & IsoWeekNumber(VRFirstKW) & "-" & IsoWeekNumber(VREndKW) & "/" & Year(VREndKW)
WeekdayName( number, [abbreviate], [firstdayofweek] )
WeekdayName(2)
Résultat: 'lundi'
WeekdayName(2, TRUE)
.__ Résultat: 'Mon'
WeekdayName(2, TRUE, vbMonday)
.__ Résultat: 'Mon'