RETROUVER LE NUMERO DE LA SEMAINE D'UNE DATE DONNÉE

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 3 déc. 2002 à 21:25
KaFarD Messages postés 38 Date d'inscription mercredi 12 mars 2003 Statut Membre Dernière intervention 29 mai 2008 - 15 mai 2009 à 13:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/5253-retrouver-le-numero-de-la-semaine-d-une-date-donnee

KaFarD Messages postés 38 Date d'inscription mercredi 12 mars 2003 Statut Membre Dernière intervention 29 mai 2008
15 mai 2009 à 13:54
Solution LIGHT: ( une fonction )

Function WOY (MyDate As Date) As Integer ' Week Of Year
WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
If WOY > 52 Then If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) 2 Then WOY 1
End If
End Function

Utilisation:
Mon_numéro_de_semaine = WOY(ma_date)

A+++
Le Docteur Messages postés 5 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 4 décembre 2007
13 mai 2009 à 17:57
D'accord, sauf que le bug existe toujours avec les
lundi 29/12/2003 et lundi 31/12/2007 (renvoit semaine 53 au lieu de semaine 1)
grarestephane Messages postés 34 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 décembre 2009
12 mai 2009 à 18:04
Pas grave ajoute 1, le tour est joué
Le Docteur Messages postés 5 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 4 décembre 2007
11 mai 2009 à 14:45
"msgbox DateDiff("w",DateSerial(Year(Date),1,1),Date)"

C'était séduisant, mais...
1 - l'argument pour la semaine est "ww"
2 - il faut utiliser les arguments "firstdayofweek" et "Firstweekofyear"
ce qui donnerait :
DateDiff("ww",DateSerial(Year(Date),1,1),Date,2,2)

Mais malgré ça je n'obtiens jamais la bonne semaine.

pour aujourd'hui, 11/05/2009, j'obtiens la semaine 19 alors que nous sommes en semaine 20 !
grarestephane Messages postés 34 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 décembre 2009
1 mai 2009 à 16:21
Trève de bavarderie, voilà la réponse, une seule ligne, avec mon msgbox la réponse est direct...

msgbox DateDiff("w",DateSerial(Year(Date),1,1),Date)

Merci d'avoir joué !
KaFarD Messages postés 38 Date d'inscription mercredi 12 mars 2003 Statut Membre Dernière intervention 29 mai 2008
13 janv. 2009 à 22:48
Chalut, juste pour completer les postes ;)
http://support.microsoft.com/kb/200299/fr

a+++
Le Docteur Messages postés 5 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 4 décembre 2007
5 janv. 2009 à 15:49
Bonjour,

Ce serait en effet la solution la plus simple... sauf qu'il y a un bug dans VB6 :
Au lundi de la première semaine de certaines années, la fonction Format retourne un mauvais n° de semaine :
lundi 29/12/2003 --> semaine 53 au lieu de semaine 1
lundi 31/12/2007 --> semaine 53 au lieu de semaine 1
... j'ai pas testé plus loin !
A priori, ce bug (découvert en 2001) ne semble pas se manifester pour une autre semaine que la semaine 53 et un autre jour que le lundi.
mechantebestiole Messages postés 3 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 15 septembre 2008
15 sept. 2008 à 10:47
Je complète mon commentaire précédent,
Je pense que l'on peut avoir le numéro de semaine en 1 ligne :

Format("01/01/2009", "ww", vbmonday,vbFirstFourDays)

Visiblement les résultats retournés sont bons.
mechantebestiole Messages postés 3 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 15 septembre 2008
15 sept. 2008 à 10:21
On ne peut pas écrire simplement :
TrouverNuméroSemaine = Format(Dte - 2, "ww", vbSaturday)

car il y a une règle concernant la 53ème semaine de l'année.

Il faut déjà commencer par la semaine No 1. Si la première semaine de l'année est incomplète (1er janv. différent de lundi), on la numérote 1 si et seulement si elle a au moins 4 jours.

A partir de cette règle, si les 1er jours de l'année sont semaine 1 et que cette semaineest à cheval sur décembre et janvier, au mois de décembre on numérote ces jours semaine 1. A l'inverse si les premiers jours ne sont pas semaine 1, on les numérotes 53.
Remarque certains préfère numéroté dans le dernier cas 0.

Exemple :
31 décembre 2009 : sem 53
1 janvier 2010 : sem 53 ou 0

31 décembre 2008 : sem 1
1 janvier 2009 : sem 1
Wlad69 Messages postés 6 Date d'inscription lundi 9 septembre 2002 Statut Membre Dernière intervention 5 mai 2021
9 juil. 2008 à 11:43
Salut,
Je ne comprends pas pourquoi un simple :

Public Function TrouverNuméroSemaine(ByVal Dte As Date) As Integer
TrouverNuméroSemaine=Format(Dte, "ww", vbMonday, vbFirstFourDays)
End Function

Ne suffirait pas ?!
Pouvez-vous m'expliquer à quoi sert le
TrouverNuméroSemaine = Format(Dte - 2, "ww", vbSaturday)

Merci
vialstephane Messages postés 89 Date d'inscription mercredi 29 octobre 2003 Statut Membre Dernière intervention 22 mai 2008
22 févr. 2008 à 15:53
Salut,
C'est assez simple.

Tu met la fonction suivante dans un module et tu l'appelles n'importe ou dans ton programme par
TrouverNuméroSemaine("22/02/2008")
C'est un exemple pour aujourd'hui.



Public Function (ByVal Dte As Date) As Integer

TrouverNuméroSemaine = Format(Dte - 2, "ww", vbSaturday)
If TrouverNuméroSemaine > 52 Then
If Format(Dte + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then
TrouverNuméroSemaine = 1
End If
End If

End Function
MEDIQUAL Messages postés 1 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 22 février 2008
22 févr. 2008 à 14:47
Je débute de chez débute en informatique (Développement, Visual Basic)

J'ai une colonne de dates sous la forme jj/mm/aaaa et je veux que dans une autre colonne pour chaque ligne la date de la première colonne soit transformée en numéro de semaine.

Pouvez-vous m'expliquer comment faire comme si j'avais 5 ans !!
Merci
euskual2003 Messages postés 1 Date d'inscription dimanche 25 juin 2006 Statut Membre Dernière intervention 9 avril 2007
9 avril 2007 à 02:58
C'est quoi un copier coller ?

hi hi hi
Morricon Messages postés 41 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 1 mars 2007
26 mai 2005 à 14:45
Est-ce normal que la date du 26-05-2005 renvoie comme n° semaine : 22 (alors qu'il s'agit de la semaine 21 !) ?
vialstephane Messages postés 89 Date d'inscription mercredi 29 octobre 2003 Statut Membre Dernière intervention 22 mai 2008
7 sept. 2004 à 16:11
salut,

y'as des trucs qui ne marchent pas dans ta formule.

Je l'ai donc corrigée, j'espere que tu m'en voudras pas trop !

@+


Public Function TrouverNuméroSemaine(ByVal Dte As Date) As Integer

TrouverNuméroSemaine = Format(Dte - 2, "ww", vbSaturday)
If TrouverNuméroSemaine > 52 Then
If Format(Dte + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then
TrouverNuméroSemaine = 1
End If
End If

End Function
spy_EIT Messages postés 19 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 9 novembre 2007
16 juil. 2004 à 15:37
Merci Ricks27, exactement ce qu'il me fallait !

Par contre, j'ai supprimé l'argument vbFirstFullWeek, car il me semble que les premiers jours de l'année sont considérés comme Semaine1... en tout cas, sans cet argument, la function retourne le bon numéro de semaine, comme dans les calendriers !
spy_EIT Messages postés 19 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 9 novembre 2007
16 juil. 2004 à 15:33
cs_KEdd Messages postés 2 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 10 janvier 2003
10 janv. 2003 à 13:38
Bravo Ricks27 mais si ShareVB dit que ça peut servir je le croit parce que je ne sait pas ce qu'est la date julienne...
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
7 déc. 2002 à 18:14
bon d'accord format est bien mais mon code c plutot pour du calcul astronomique. JJ qui donne la date julienne ca peut quand meme servir

ShareVB
Spylover Messages postés 110 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 12 août 2010 1
7 déc. 2002 à 18:04
Ricks27,

Je ne dirais qu'une chose bravo.
Spylover Messages postés 110 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 12 août 2010 1
7 déc. 2002 à 18:04
Ricks27,

Je ne dirais qu'une chose bravo.
Ricks27 Messages postés 79 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 29 juillet 2005
4 déc. 2002 à 09:14
Y'a bcp + simple. Utilises la fonction "Format" de vb!!

Function TrouverNuméroSemaine(ByVal Dte As Date) As Integer
TrouverNuméroSemaine = Format(Dte, "ww", vbSaturday, vbFirstFullWeek)
If TrouverNuméroSemaine > 52 Then
If Format(Dte + 7, "ww", vbMonday, vbFirstFullWeek) = 2 Then
TrouverNuméroSemaine = 1
End If
End If
End Function
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
3 déc. 2002 à 21:25
bon je sais vous allez me dire "Y A PLUS SIMPLE" et la je vous répondrais que je suis d'accord :
mais au moins mon code a le mérite d'expliquer comment on peut calculer sans les fonctions de VB (a part dateserial et timeserial)

ShareVB
Rejoignez-nous