Function ISO(ByVal r, Optional X As Byte = 0)
' Transcription ISO d'une date grégorienne r.
'
'.__________________________________________________________________________________________.
'| | | | | |
'| x | retour | format | type | exemple |
'|___________|___________________|______________|________|__________________________________|
'| | | | | |
'| 0 ou omis | date ISO complète | "aaaa-WSS-J" | String |=ISO("3/3/2003") | 2003-W10-1 |
'| 1 | semaine ISO | "aaaa-WSS" | String |=ISO("3/3/2003";1) | 2003-W10 |
'| 2 | semaine ISO | SS | Double |=ISO("3/3/2003";2) | 10 |
'| |
'| Validité probable : lundi premier janvier 1900 - vendredi 31 décembre 9999 inclus. |
'|__________________________________________________________________________________________|
'
Application.Volatile
Dim a&, b&
r = CDate(r)
r = r - (r < 61)
a = r - Weekday(r, vbMonday)
b = DateSerial(Year(a + 4), 1, 1)
ISO = IIf(X < 2, Year(b) & "-W", 0) + (Format((a - b + Weekday(b, vbMonday)) \ 7 + (Weekday(b, vbMonday) > 4) + 1, "00") & IIf(X < 1, "-" & Weekday(r, vbMonday), ""))
End Function
Function GREG(ByVal r) As Date
' Transcription grégorienne d'une date ISO r.
'
'.__________________________________________________________________________________.
'| | | | |
'| r | retour | format | exemple |
'|______________|________________________|________|_________________________________|
'| | | | |
'| "aaaa-WSS-J" | date grégorienne | Date | =GRG("2003-W14-5") | 04/04/2003 |
'| "aaaa-WSS" | lundi de la semaine SS | Date | =GRG("2003-W14") | 31/03/2003 |
'| |
'| Validité probable : 1900-W01-1 - 9999-W52-5 inclus. |
'|__________________________________________________________________________________|
'
Application.Volatile
Dim X, y, z As Date, u%
X = Split(r, "-W", 2)
y = Split(X(1) & "-1", "-")
z = DateSerial(X(0), 1, 1) + 7 * y(0)
u = Weekday(z, vbMonday)
z = z - u + 7 * (u < 5) + y(1)
GREG = z + (z < 61)
End Function