1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| Option Explicit
Public Function PremiereDerniereSemaine(strinput As String) As String
'on part du principe qu'on reçoit en chaine de caracteres 'QX YYYY'
Dim dt As Date
Dim dtmin As Date
Dim dtminOK As Boolean
Dim dtmax As Date
Dim dtmaxOK As Boolean
Dim inputyear As Integer
Dim inputpart As Integer
Dim result As String
inputyear = CInt(Right(strinput, 4))
inputpart = CInt(Mid(strinput, 2, 1))
dtmin = DateSerial(inputyear, 1, 1)
dtminOK = False
dtmax = DateSerial(inputyear + 1, 1, 1) - 1
dtmaxOK = False
For dt = DateSerial(inputyear, 1, 1) To DateSerial(inputyear + 1, 1, 1) - 1
If CInt(DatePart("q", dt)) = inputpart Then
If Not dtminOK Then
dtmin = dt
dtminOK = True
End If
ElseIf DatePart("q", dt) > inputpart Then
If Not dtmaxOK Then
dtmax = dt - 1
dtmaxOK = True
End If
End If
Next dt
result = DatePart("ww", dtmin) & "|" & DatePart("ww", dtmax)
PremiereDerniereSemaine = result
End Function
Sub piou()
Debug.Print PremiereDerniereSemaine("Q1 2011")
Debug.Print PremiereDerniereSemaine("Q2 2011")
Debug.Print PremiereDerniereSemaine("Q3 2011")
Debug.Print PremiereDerniereSemaine("Q4 201")
Debug.Print PremiereDerniereSemaine("Q1 2012")
Debug.Print PremiereDerniereSemaine("Q2 2012")
Debug.Print PremiereDerniereSemaine("Q3 2012")
Debug.Print PremiereDerniereSemaine("Q4 2012")
End Sub |
Partager