Numéro de semaine

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 206 fois - Téléchargée 20 fois

Contenu du snippet

Afin de déterminer le numéro d'une semaine en partculier, j'ai écrit ce code en m'appuyant sur la Norme ISO 8601 permettant le comptage des semaines.

Source / Exemple :


Dim Date_Jeudi As Date 'Date du Jeudi de la semaine à référencer
Dim Date_4Janv As Date 'Le 4 Janvier de l'année en cours
Dim Indice4Janv As Integer 'Numéro du jour correspondant au 4 Janvier de l'année en cours
Dim Delta_Jour As Integer 'Différence de jour
Dim Date_1lundi As Date 'Date du 1er Lundi de la semaine du 4 Janvier
Dim Semaine As Integer 'Numéro de la semaine

 
Indice = WeekDay(DateT, vbMonday) - 1 'Indice du jour trouvé
Delta_Jour = 3 - Indice
Date_Jeudi = DateAdd("d", Delta_Jour, DateT) 'Où se trouve le jeudi de la semaine trouvée
Date_4Janv = DateSerial(Year(DateT), 1, 4)
If DateT < Date_4Janv Then Date_4Janv = DateSerial(Year(DateT) - 1, 1, 4)
Indice4Janv = WeekDay(Date_4Janv, vbMonday) - 1 'Ca tombe un quel jour le 4 janv
Date_1lundi = DateAdd("d", -Indice4Janv, Date_4Janv) 'Où se trouve le jeudi de la semaine trouvée
Delta_Jour = DateDiff("d", Date_1lundi, Date_Jeudi)
Semaine = Delta_Jour \ 7 + 1

Conclusion :


Ce code marche bien (enfin pour moi)...

Bien sur il est perfectible...

A voir également

Ajouter un commentaire Commentaires
Messages postés
56
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
15 février 2013
1
Hello. Old topic, mais solution qui fonctionne = Commentaire de Renfield le 09/09/2009 10:58:27

avec la petite modif suivante :
"vdInput + 7" modifié en "vdInput.AddDays(7)"

soit :
Public Function GetISOWeek(ByVal vdInput As Date) As Long
GetISOWeek = DatePart("ww", vdInput, vbMonday, vbFirstFourDays) If GetISOWeek >52 And DatePart("ww", vdInput.AddDays(7), vbMonday, vbFirstFourDays) 2 Then
GetISOWeek = 1
End If
End Function
Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

Numérotation ISO des semaines
http://fr.wikipedia.org/wiki/Num%C3%A9rotation_ISO_des_semaines
Il faut parfois faire un traitement en plus selon si l'on souhaite ou pas avoir une semaine n°53 et pas de semaine n°1 (cela peut arriver, par exemple au début de l'année 2009 avec la fonction DotNet que j'ai indiquée)
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
idem que la solution de Jack... strictement.

fauda m'expliquer la necessité de faire:
DateSerial(Year(Date), Month(Date), Day(Date))

pourquoi ne pas laisser Date ??
Messages postés
1174
Date d'inscription
vendredi 8 avril 2005
Statut
Membre
Dernière intervention
2 avril 2009

Salut à tous
Moi j'utilise ça , mais je n'ai jamais comparé avec des dates anciennes ...

NumSemaine = DatePart("ww", DateSerial(Year(Date), Month(Date), Day(Date)), vbMonday, vbFirstFourDays)

A voir ...
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
nop, c'est ce qu'a proposé Jack au début:
? DatePart("ww", now, vbMonday, vbFirstFourDays)
(vbMonday vaut 2 :p)

du coup, ca colle pas.
Afficher les 24 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.