IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E]DatePart ? Quelle est la règle ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut [VBA-E]DatePart ? Quelle est la règle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox DatePart("ww", "02/08/05", 1)
    donne 32, en désaccord avec mon calendrier.
    Ayant vérifié ce dernier, j'ai constaté qu'il faisait commencer la première semaine de l'année un samedi, et bien sûr, si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MsgBox DatePart("ww", "02/08/05", 7)
    'ou
    MsgBox DatePart("ww", "02/08/05", 1, vbFirstFourDays)
    'ou
    MsgBox DatePart("ww", "02/08/05", 1, vbFirstFullWeek)
    le calendrier est de nouveau en accord avec VBA.
    La question :
    Quelle règle régit la numérotation de la semaine 1 en France ?

    Question subsidiaire :
    En Europe, la règle diffère-t-elle selon le pays ?

    Merci de vos nombreuses réponses

  2. #2
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Salut Ousk !
    De mémoire, ça dépend de la position du premier jeudi de l'année. Un post a donné la règle exacte, il-y-a un bon moment.
    Je regarde si je te le retrouve.

    Regarde ça:
    '******************************************************************
    ' Calcul des dates d'une année par numéro de semaine
    '
    ' Recommandations de l'Organisation Internationale de Standardisation
    ' Norme ISO 8601

    ' - Le lundi est considéré comme le premier jour de la semaine.
    ' - Les semaines d'une même année sont numérotées de 01 à 52
    ' (parfois 53).
    ' - La semaine qui porte le numéro 01 est celle qui contient le
    ' premier jeudi de janvier.
    ' - Il peut exister une semaine n°53 (années communes finissant
    ' un jeudi, bissextiles finissant un jeudi ou un vendredi).
    '******************************************************************

  3. #3
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Merci Megaxel
    la syntaxe correcte pour la France semble donc être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox DatePart("ww", "02/08/05", vbMonday, vbFirstFourDays)

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Merci Megaxel.
    J'ai un peu tardé à te répondre mais j'ai fait des tests (un tas)
    Seul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox DatePart("ww", "01/11/06", 2, vbFirstFourDays)
    testé sur les années 2002, 04, 05, 06 et 07 paraît donner un résultat cohérent.

    A+

    Edit
    J'ai relu les règles et effectivement, c'est la seule syntaxe valide, comme tu le dis, Thierry. J'ai donc effacé le code qui ne marche pas pour ne pas embrouiller les ceusses que ça intéresse. Et j'en profite pour répondre à "celui" qui cherche encore le mois en fonction du jour et du numéro de semaine...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    jour = "lundi"
    NoSemaine = 31
    JrSemaine = Array("", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche")
        For i = 1 To 7
            If JrSemaine(i) = LCase(jour) Then Exit For
        Next
        LaDate = CDate("01/01") + i   'en ignorant l'année, est valide pour l'année en cours
        For i = 1 To 52
            If DatePart("ww", CDate(LaDate), 2, vbFirstFourDays) = NoSemaine Then Exit For
            LaDate = CDate(LaDate) + 7
        Next
        MsgBox Format(CDate(LaDate), "mmmm")
    Merci Megaxel

    A+

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2008
    Messages : 161

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 184
    Dernier message: 23/10/2013, 00h57
  2. [VBA] Savoir quelle est la clé primaire inséré
    Par kissmytoe dans le forum Access
    Réponses: 1
    Dernier message: 07/03/2006, 08h48
  3. execute/perform quelle est la différence?
    Par stago dans le forum Struts 1
    Réponses: 2
    Dernier message: 30/06/2004, 10h51
  4. Quelle est la fiabilité du protocole SSL ?
    Par Anonymous dans le forum Développement
    Réponses: 5
    Dernier message: 05/09/2002, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo