Renvoi du numéro de semaine (bogue du 29 décembre 2003)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 184 fois - Téléchargée 28 fois

Contenu du snippet

Si vous regardez votre calendrier, vous verrez que :
  • le premier janvier n'est pas toujours dans la semaine 1
  • le 29 décembre 2003 est en semaine 1 ; et lorsque l'on code on le retrouve en semaine 53 (bogue)


Voici deux petites fonctions qui renvoient les bons numéros de semaine et d'année, pour les Français.

Source / Exemple :


Function TrouveSemaineDeLaDate(ByVal DateConcernee As Date) As String
   ' Bogue du lundi 29 décembre 2003 qui est compté en semaine 53 au lieu de semaine 1
   If Format(DateConcernee, "dd/mm/yyyy", vbMonday, vbFirstFourDays) = "29/12/2003" Then
      TrouveSemaineDeLaDate = "01"
   Else
      TrouveSemaineDeLaDate = Format(Format(DateConcernee, "ww", vbMonday, vbFirstFourDays), "00")
   End If
End Function

Function TrouveAnneeDeLaDate(ByVal DateConcernee As Date) As String
   ' Bogue du lundi 29 décembre 2003 qui est compté en semaine 53 au lieu de semaine 1
   If Format(DateConcernee, "dd/mm/yyyy", vbMonday, vbFirstFourDays) = "29/12/2003" Then
      TrouveAnneeDeLaDate = "2004"
   Else
      TrouveAnneeDeLaDate = Format(DateConcernee, "yyyy", vbMonday, vbFirstFourDays)
   End If
End Function

A voir également

Ajouter un commentaire

Commentaires

mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
http://www.codyx.org/snippet_calculer-numero-semaine-date_152.aspx


Y'a aussi une soluce (enfin, 2) ici ^^

@++
cs_kadertall
Messages postés
3
Date d'inscription
lundi 23 juillet 2007
Statut
Membre
Dernière intervention
1 août 2007

svp, quelle est la bonne solution retenue?
fkuchta
Messages postés
44
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
20 novembre 2008

Je suppose que la bogue a été résolue car avec ce code :

Dim JeudiSemaine As Date
Dim NumSemJeudi As Integer
Dim CetteDate As Date
CetteDate = "31/12/2007"
JeudiSemaine = CetteDate - Weekday(CetteDate, vbMonday) + vbThursday - 1
NumSemJeudi = CInt(Format(JeudiSemaine, "ww", vbMonday, vbFirstFourDays))
MsgBox NumSemJeudi & "-" & Weekday(CetteDate, vbMonday)

CetteDate = "29/12/2003"
JeudiSemaine = CetteDate - Weekday(CetteDate, vbMonday) + vbThursday - 1
NumSemJeudi = CInt(Format(JeudiSemaine, "ww", vbMonday, vbFirstFourDays))
MsgBox NumSemJeudi & "-" & Weekday(CetteDate, vbMonday)


J'obtiens toujours semaine 1 partout !!
Certainement un patch quelque part...
cs_buzzo
Messages postés
29
Date d'inscription
jeudi 20 janvier 2005
Statut
Membre
Dernière intervention
30 novembre 2006

Merci beaucoup pour ce source !
JCDussDuss
Messages postés
24
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
20 novembre 2008

Bonjour,

Merci pour cette petite fonction 106, qui fonctionne parfaitement au moins jusqu'en 2015 (je me suis arreté là dans mes tests). Pour ceux qui auraient la flemme d'utiliser cette fonction car ils auraient des dates supérieurs à 2003, sachez que la fonction Format bogue pour le 29/12/2003 mais également pour le 31/12/2007, qu'elle trouve comme seul et unique jour de la semaine 53 (au lieu de 01).

Merci encore.

JC

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.