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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 542 fois - Téléchargée 30 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 17
20 août 2007 à 04:18
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
6 août 2007 à 13:17
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
18 avril 2006 à 09:33
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
17 avril 2006 à 12:06
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
12 déc. 2005 à 10:02
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
Afficher les 12 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.