DatePart bug?

Résolu
Jomba Messages postés 58 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 22 juillet 2010 - 16 janv. 2008 à 12:02
Jomba Messages postés 58 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 22 juillet 2010 - 16 janv. 2008 à 14:24
bonjour,
j'utilise dans un de mes programmes la fonction datepart :
Dim

test AsInteger

test = DatePart(DateInterval.WeekOfYear, CDate("31/12/2007"), Microsoft.VisualBasic.FirstDayOfWeek.Monday, Microsoft.VisualBasic.FirstWeekOfYear.FirstFourDays)

Dans le test que je vous ai copié ci-dessus, j'ai la date du 31 dé&cembre 2007 dont je cherche à récupérer le numéro de semaine : elle me ressort semaine 53 au lieu de 1 (1ère semaine de 2008).
Pourtant, j'ai bien spécifé "
FirstFourDays".
Est-ce un bug de la fonction ou un paramétrage raté ou ...?
Ca fait 2 ans que j'utilise cette fonction sans problème à part ça...

Merci d'avance,
Jomba

8 réponses

Jomba Messages postés 58 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 22 juillet 2010
16 janv. 2008 à 14:16
je vous remercie de vos réponses mais ce que je voulais savoir, c'était surtout si c'était moi ou vb.net2005 qui faisait une erreur. Et apparement, c'est vb.
J'ai résolu mon problème en  positionnant ma date sur le jeudi, ainsi, ça marche à tous les coups, quelle que soit la date donnée.

DatePart(DateInterval.WeekOfYear, DateAdd(DateInterval.Day, 4 - DatePart(DateInterval.Weekday,CDate("31/12/2007") ),CDate("31/12/2007") ),Microsoft.VisualBasic.FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFourDays)
3
NHenry Messages postés 15070 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 juin 2023 158
16 janv. 2008 à 12:17
Bonjour

VB doit (je pense) remettre son compteur à "0" lors du changement d'année, il est facile d'éviter d'avoir la semaine 53 :
test = DatePart(DateInterval.WeekOfYear, CDate("31/12/2007"), Microsoft.VisualBasic.FirstDayOfWeek.Monday, Microsoft.VisualBasic.FirstWeekOfYear.FirstFourDays) mod 53

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
0
NHenry Messages postés 15070 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 juin 2023 158
16 janv. 2008 à 12:17
Bonjour

REMARQUE,
if test=0 then test=1
(53 mod 53=0)

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
0
Jomba Messages postés 58 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 22 juillet 2010
16 janv. 2008 à 12:31
merci pour ta solution mais je ne pense pas qu'il remette le compteur à 0 car en mettant la date au 1 er janvier 2008, je récupère bien la semaine 1
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15070 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 juin 2023 158
16 janv. 2008 à 12:46
Bonjour

Oui, mais en mettant "Mod 53" à la fin de ta ligne, le 31/12/2007 fera parti de la semaine 0 ...

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 26
16 janv. 2008 à 13:57
 Bonjour à tous,

Effectivement le DatePart renvoie semaine 53.

Alternative à adapter pour .Net :

MsgBox JoursDeLaSemaine1(2008)

Public Function JoursDeLaSemaine1(annee)
    Dim d, i, MaSemaine
    d = DateSerial(annee, 1, 1)
    ' calcul du premier jour de la première semaine de l'année
    d = DateAdd("d", 1 - Weekday(d, vbMonday), d)

    MaSemaine = "Jours de la semaine 1" &vbcr
    For  i =0 To 6
         MaSemaine = MaSemaine &vbCr& DateAdd("d", i, d)
    Next
    JoursDeLaSemaine1 = MaSemaine
End Function

jean-marc
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
16 janv. 2008 à 14:14
les règles sont exposées ici :
http://fr.wikipedia.org/wiki/ISO_8601#Num.C3.A9ro_de_semaine

dans ce Snippet:
http://www.codyx.org/snippet_recuperer-numero-semaine_61.aspx#401

j'ai codé en VB6 l'algo exposé sur Wiki
mais des codes en .Net sont dispo sur cette page de Codyx.
0
Jomba Messages postés 58 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 22 juillet 2010
16 janv. 2008 à 14:24
j'oubliais, je ne prend pas le mod 53 comme solution car il peut arriver que la semaine 53 existe (quand le 31 décembre tombe un jeudi)

Merci à vous tous et à une prochaine
0