RETROUVER LE NUMERO DE LA SEMAINE D'UNE DATE DONNÉE
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 2016
-
3 déc. 2002 à 21:25
KaFarD
Messages postés38Date d'inscriptionmercredi 12 mars 2003StatutMembreDernière intervention29 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.
KaFarD
Messages postés38Date d'inscriptionmercredi 12 mars 2003StatutMembreDernière intervention29 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és5Date d'inscriptionvendredi 30 mars 2007StatutMembreDerniè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és34Date d'inscriptionmercredi 12 décembre 2007StatutMembreDernière intervention 6 décembre 2009 12 mai 2009 à 18:04
Pas grave ajoute 1, le tour est joué
Le Docteur
Messages postés5Date d'inscriptionvendredi 30 mars 2007StatutMembreDernière intervention 4 décembre 2007 11 mai 2009 à 14:45
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és34Date d'inscriptionmercredi 12 décembre 2007StatutMembreDerniè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...
Le Docteur
Messages postés5Date d'inscriptionvendredi 30 mars 2007StatutMembreDerniè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és3Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention15 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 :
mechantebestiole
Messages postés3Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention15 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és6Date d'inscriptionlundi 9 septembre 2002StatutMembreDerniè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és89Date d'inscriptionmercredi 29 octobre 2003StatutMembreDernière intervention22 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és1Date d'inscriptionvendredi 22 février 2008StatutMembreDernière intervention22 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és1Date d'inscriptiondimanche 25 juin 2006StatutMembreDernière intervention 9 avril 2007 9 avril 2007 à 02:58
C'est quoi un copier coller ?
hi hi hi
Morricon
Messages postés41Date d'inscriptionlundi 23 décembre 2002StatutMembreDerniè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és89Date d'inscriptionmercredi 29 octobre 2003StatutMembreDernière intervention22 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és19Date d'inscriptionmardi 6 juillet 2004StatutMembreDerniè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és19Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention 9 novembre 2007 16 juil. 2004 à 15:33
cs_KEdd
Messages postés2Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention10 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és2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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és110Date d'inscriptionmercredi 24 avril 2002StatutMembreDernière intervention12 août 20101 7 déc. 2002 à 18:04
Ricks27,
Je ne dirais qu'une chose bravo.
Spylover
Messages postés110Date d'inscriptionmercredi 24 avril 2002StatutMembreDernière intervention12 août 20101 7 déc. 2002 à 18:04
Ricks27,
Je ne dirais qu'une chose bravo.
Ricks27
Messages postés79Date d'inscriptionmardi 4 juin 2002StatutMembreDernière intervention29 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és2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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)
15 mai 2009 à 13:54
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+++
13 mai 2009 à 17:57
lundi 29/12/2003 et lundi 31/12/2007 (renvoit semaine 53 au lieu de semaine 1)
12 mai 2009 à 18:04
11 mai 2009 à 14:45
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 !
1 mai 2009 à 16:21
msgbox DateDiff("w",DateSerial(Year(Date),1,1),Date)
Merci d'avoir joué !
13 janv. 2009 à 22:48
http://support.microsoft.com/kb/200299/fr
a+++
5 janv. 2009 à 15:49
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.
15 sept. 2008 à 10:47
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.
15 sept. 2008 à 10:21
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
9 juil. 2008 à 11:43
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
22 févr. 2008 à 15:53
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
22 févr. 2008 à 14:47
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
9 avril 2007 à 02:58
hi hi hi
26 mai 2005 à 14:45
7 sept. 2004 à 16:11
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
16 juil. 2004 à 15:37
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 !
16 juil. 2004 à 15:33
10 janv. 2003 à 13:38
7 déc. 2002 à 18:14
ShareVB
7 déc. 2002 à 18:04
Je ne dirais qu'une chose bravo.
7 déc. 2002 à 18:04
Je ne dirais qu'une chose bravo.
4 déc. 2002 à 09:14
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
3 déc. 2002 à 21:25
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