Pb n° semaine (date) access

Bonjour,

Je n'arrive pas à récupérer le bon numéro de semaine pour la date du 29/12/2003 : access donne la semaine 53 au lieu de 1.
Auriez-vous une solution à me proposer ?

Merci

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. bah en recuperant le numero de la semaine (ici 53) tu fait modulo 52 non?
    1. Non en fait je dois utiliser la fonction datepart, afin de prendre en compte le premier jour de la semaine (vbfirstdayokweek).
      Merci quand même
    2. Modérateur
      Salut,

      en fait, quand tu cherches des numéros de semaine, il y a une valeur qu'il faut IMPERATIVEMENT renseigner dans ta fonction, c'est la constante firstweekofyear, elle indique comment ACCESS doit calculer la première semaine de l'année :

      Est-ce celle qui contient le premier janvier ?
      Est-ce celle qui est complète ?
      Est-ce celle qui comprend au moins quatre jours ?

      C'est un argument de la fonction DatePart (4ième paramètre), mais on n'y pense pas jusqu'à ce qu'on se plante en début (ou en fin) d'année car les données sont incorrectes... :-)

      A+ Blux
       "Les cons, ça ose tout.
      C'est même à ça qu'on les reconnait"
    3. @bluxBonjour,

      Merci pour la réponse.
      J'ai déjà essayé tous les paramètres, et seule la date du 29/12/2003 pose problème ?
      Est-ce lié à une année bissextile qui suit ?

      Merci
    4. Modérateur
      @bluxElle pose problème avec tous les paramètres ?
      Etrange !

      A+ Blux
       "Les cons, ça ose tout.
      C'est même à ça qu'on les reconnait"
  2. en faisant un petit tour sur vbfrance.com, je suis tombé sur ce code
    Langage : VB6 , VBA
    Date ajout : 04/01/2008
    Posté par Renfield [Liste]

    '# https://fr.wikipedia.org/wiki/ISO_8601#Num.C3.A9ro_de_semaine
    Public Function Week(ByVal vDate As Date) As Integer
    Dim dThursday As Date
    Dim dMonday As Date
    Dim nResult As Single
       '# Calculer le jeudi de la même semaine que la date cherchée.
       '# On calculera le numéro de semaine de ce jeudi pour être sûr de compter dans la
       '# bonne année sans test particulier. (Ce jeudi peut tomber l'année précédente ou suivante,
       '# c'est tout l'intérêt.)
       dThursday = DateAdd("D", 4 - Weekday(vDate, vbMonday), vDate)
       
       '# On considère le 4 janvier de la même année que ce jeudi
       dMonday = DateSerial(Year(dThursday), 1, 4)
       
       '# On calcule le lundi de la même semaine que ce 4 janvier (identifiant ainsi le début du comptage;
       '# noter que ce lundi peut lui même tomber l'année encore avant: peu importe)
       dMonday = DateAdd("D", 1 - Weekday(dMonday, vbMonday), dMonday)
       '# On calcule le nombre de jours écoulés entre nos deux dates particulières (ce jeudi et ce lundi).
       '# On divise par 7 (arrondir à l'entier supérieur). On a le résultat voulu.
       nResult = Abs(DateDiff("D", dThursday, dMonday)) / 7
       If Fix(nResult) <> nResult Then
           Week = nResult + 1
       Else
           Week = nResult
       End If
    End Function
    
    1. Salut j'ai exactement le même problème.
      Semaine: PartDate("ww";[datesaisie];2;2)
      La date du 29/12 apparait en semaine 53.
      c4est bizarre ce truc!!!
      1. Bonjour,

        Avez-vous trouvé une solution ?

        Merci.
        Azerty
    2. Modérateur
      ben non , c'est normal... C'est bien la 53ième semaine de l'année en cours...
      Si tu mets PartDate("ww";[datesaisie]) alors tu auras 53 jusqu'au 31/12 et 1 à partir du 1er de l'an...

      A+ Blux
       "Les cons, ça ose tout.
      C'est même à ça qu'on les reconnait"
      1. Bonjour,

        Pourriez-vous faire un essai, car en 2003 le 29/12/2003 et uniquement cette date crée une semaine 53, alors que les 30 et 31/12/2003 vont bien sur la semaine 1 de 2004 comme attendu ?

        Merci.
        Azerty
      2. Modérateur
        J'avais bien fait l'essai, avec la ligne sans les 3ième et 4ième param, et j'ai bien semaine 53 jusqu'au 31/12/2003 et semaine 1 à partir du 01/01/2004

        A+ Blux
         "Les cons, ça ose tout.
        C'est même à ça qu'on les reconnait"
      3. salut
        je confirme les propos de Blux
        dans une année il y a 53 semaines et non pas 52 car :
        52 semaines de 7 jours = 364 j
        > il manque 1j,25 ou 2j ( bissext ) pour completer l'année donc S53

        dans ma boite meme les polytechniciens n'en demordaient pas , ils voulaient absolument 52s pour 1 année et quand tu fait des stats sur des semaines pleine de 7 j , la derneire semaine de l'année est forcement la 53 eme

        prendre la solution de blux sur partdate... si on ne veut pas semaine complete de 7j
      4. Modérateur
        @mobile75dans ma boite meme les polytechniciens n'en demordaient pas
        C'est vraiment pas un argument ! ;-)

        A+ Blux
         "Les cons, ça ose tout.
        C'est même à ça qu'on les reconnait"
    3. chercher la fonction prédifini qui permet de convertir une date en jour de la semaine et le N° de la semaine dans une année dans access
      1. Modérateur
        Si c'est une proposition, alors elle n'appelle pas de réponse, mais si c'est une question elle appelle à plus de précision pour y répondre....