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

VBA Access Discussion :

Comment trouver la date du premier jour de la première semaine d'une année


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Coordinateur méthode
    Inscrit en
    Décembre 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Coordinateur méthode

    Informations forums :
    Inscription : Décembre 2016
    Messages : 38
    Points : 29
    Points
    29
    Par défaut Comment trouver la date du premier jour de la première semaine d'une année
    Bonsoir à tous,

    Je réalise un planning par semaine sous access qui commence par la semaine 1

    Dans ce planning, je souhaite que, sous le numéro de la semaine apparaisse, au chargement du formulaire, la date du lundi (et du vendredi) de cette semaine.

    Nom : 2021-08-04_22-47-46.png
Affichages : 127
Taille : 69,2 Ko

    Mes étiquettes semaine s'appellent s1,s2,s3,s4,etc et mes étiquettes dates s'appellent d1,d2,d3,d4,etc

    Mon code est pour l'instant le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    i = 1
    Do While i < 53
        Me.Controls("s" & i).Caption = "S" & i 'Change le contenu de l'étiquette semaine
        datedebut = Format(7 * i + DateSerial(2021, 1, 1) - Weekday(DateSerial(2021, 1, 1)) - 5, "dd.mm") 'Formatage de la date du lundi en jour.mois
     
        'datefin = datedebut + 7
        'Me.Controls("d" & i).Caption = datedebut & "/" & datefin
        Me.Controls("d" & i).Caption = datedebut ' Change le contenu de l'étiquette date
     
    i = i + 1
    Loop

    Mon soucis est que j'ai beau essayé tous les codes que je trouve sur internet, il y a tout le temps une ou l'autre année pour lesquelles ça ne fonctionne pas.

    Dans le cas du code que je trouve le plus fréquemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    7 * i + DateSerial(2021, 1, 1) - Weekday(DateSerial(2021, 1, 1)) - 5
    je me retrouve avec la date du 28.12.2020 comme première date (année 2020 avec 53 semaines)

    Je me doute que je ne dois pas être le premier à poser la question mais je suppose que je ne fais pas ma recherche correctement pour ne pas arriver à trouver de réponse....

    En vous remerciant pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,

    Ton calcul dépend de la définition de la semaine 1.
    Soit la semaine 1 est la semaine comprenant le premier jour de l'année ou la semaine 1 est la semaine comprenant le premier lundi de l'année.
    Dans le premier cas, la semaine 1 peut débuter le dernier lundi de l'année précédente et dans le second cas la semaine 1 peut débuter après le premier jour de l'année.
    Pour cette année, il s'agît soit du lundi 28/12/2020 (dernier lundi de l'année 2020) ou du lundi 04/01/2021 (premier lundi de l'année).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Coordinateur méthode
    Inscrit en
    Décembre 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Coordinateur méthode

    Informations forums :
    Inscription : Décembre 2016
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Bonsoir,

    C'est bien là tout le problème.
    Pour 2021, ton résonnement fonctionne mais pour la prochaine année avec 53 semaines soit en 2026 ça ne fonctionne pas car la semaine 1 débute le 29.12 et le premier lundi sera le 05 en semaine 2.

    Apparemment d'après la norme ISO, la semaine 1 est la semaine qui contient le premier jeudi.

    Donc du coup, je suis un peu perdu pour adapter une formule...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Coordinateur méthode
    Inscrit en
    Décembre 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Coordinateur méthode

    Informations forums :
    Inscription : Décembre 2016
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Après avoir encore un peu tourné ça dans ma tête, je suis arrivé à une solution que voici et qui semble fonctionner pour toutes les années.

    Pour info selon la norme ISO :
    Si le 1er tombe un lundi, mardi, mercredi ou jeudi, la semaine contenant le 1er janvier sera la semaine 1
    Si le 1er janvier tombe un vendredi, samedi ou dimanche, la semaine 1 débutera le lundi suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Dim var_annee As Integer
    Dim pos_1erjanvier As Integer
    Dim date_1erlundi As Date
    Dim date_1erjanvier As Date
     
     
    var_annee = 2021
     
    date_1erjanvier = DateSerial(var_annee, 1, 1) '1er janvier de l'année var_annee
     
    pos_1erjanvier = Weekday(DateSerial(var_annee, 1, 1), vbMonday) 'Position du 1 janvier dans la semaine de l'année var_annee (Lundi = 1, Mardi = 2, etc)
     
    Select Case no_1erjanvier 'Donne la date du premier lundi de la semaine 1
        Case 1 To 4 'Si le 1er janvier tombe un lundi, mardi, mercredi ou jeudi
            date_1erlundi = date_1erjanvier - pos_1erjanvier + 1 'Le lundi de la première semaine sera le 1er janvier - la position du 1er janvier dans la semaine + 1
        Case 5 To 7 'Si le 1er janvier tombe un vendredi, samedi ou dimanche
            date_1erlundi = date_1erjanvier + 7 - pos_1erjanvier + 1 'Le lundi de la première semaine sera le 1er janvier + une semaine - la position du 1er janvier dans la semaine + 1
    End Select
    Etant programmeur amateur, je laisse le soin aux experts de me corriger si je me trompe

    Merci de votre aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/01/2009, 13h31
  2. Réponses: 1
    Dernier message: 01/09/2008, 15h45
  3. [Dates] date du premier jour du mois
    Par amel95140 dans le forum Langage
    Réponses: 3
    Dernier message: 11/04/2007, 14h48
  4. [Dates] calendrier : premier jour de chaque mois
    Par vodasan dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2007, 07h26
  5. Réponses: 7
    Dernier message: 31/07/2006, 13h50

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