Bonjour le Forum,
Bonjour le Futur Fil,
Pour relancer un des Best Post de tous les forums parlant de programmation sur Windows, je vais vous parler de mon soucis avec le N° ISO de Semaine.
Voilà donc pour récupérer le numéro ISO d'une semaine j'utilise la fonction suivante :
Jusque là tout va bien mais lorsque l'on à travailler sur des analyses glissantes (genre analyse sur les x dernières semaines) il faut inclure une notion d'année pour avoir un classement croissant des semaines et ainsi par exemple avoir :
31/12/2004 = 53 ième semaine de 2004 ie 453
01/01/2005 = 53 ième semaine de 2004 ie 453
03/01/2005 = 1ère semaine 2005 ie 501
31/12/2005 = 52 ième semaine de 2005 ie 552
01/01/2006 = 52 ième semaine de 2005 ie 552
02/01/2006 = 1 ère semaine de 2006 ie 601
ce codage sur 3 chiffres de la semaine à l'avantage en étant numérique d'être simple à gérer et respecte l'ordre des semaines
D'où l'idée de faire quelques chose comme ça :
Mais évidemment dans ce cas on va avoir une erreur puisque par exemple 01/01/2005 va retourner 553 au lieu de 453.
Un idée ?
D'avance merci.
Bonjour le Futur Fil,
Pour relancer un des Best Post de tous les forums parlant de programmation sur Windows, je vais vous parler de mon soucis avec le N° ISO de Semaine.
Voilà donc pour récupérer le numéro ISO d'une semaine j'utilise la fonction suivante :
Code:
Public Function NoSem(UneDate As Date) As Integer
' donne le numéro de la semaine selon la norme Européenne (1ère semaine = 1ère semaine de 4 jours)
On Error Resume Next
NoSem = _
CInt(Format(UneDate, 'ww', vbMonday, vbFirstFourDays))
End Function
Jusque là tout va bien mais lorsque l'on à travailler sur des analyses glissantes (genre analyse sur les x dernières semaines) il faut inclure une notion d'année pour avoir un classement croissant des semaines et ainsi par exemple avoir :
31/12/2004 = 53 ième semaine de 2004 ie 453
01/01/2005 = 53 ième semaine de 2004 ie 453
03/01/2005 = 1ère semaine 2005 ie 501
31/12/2005 = 52 ième semaine de 2005 ie 552
01/01/2006 = 52 ième semaine de 2005 ie 552
02/01/2006 = 1 ère semaine de 2006 ie 601
ce codage sur 3 chiffres de la semaine à l'avantage en étant numérique d'être simple à gérer et respecte l'ordre des semaines
D'où l'idée de faire quelques chose comme ça :
Code:
Public Function NoAnneeSem(UneDate As Date) As Integer
' donne le numéro de la semaine selon la norme Européenne (1ère semaine = 1ère semaine de 4 jours)
On Error Resume Next
NoAnneeSem = _
(CInt(Format(UneDate, 'yyyy', vbMonday, vbFirstFourDays)) - 2000) * 100 _
+ CInt(Format(UneDate, 'ww', vbMonday, vbFirstFourDays))
End Function
Mais évidemment dans ce cas on va avoir une erreur puisque par exemple 01/01/2005 va retourner 553 au lieu de 453.
Un idée ?
D'avance merci.