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 :

Obtenir une date en fonction du numéro de semaine [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 36
    Points : 35
    Points
    35
    Par défaut Obtenir une date en fonction du numéro de semaine
    Bonjour à tous (et toutes),

    J'ai un petit problème à vous soumettre et je n'ai pas trouvé de solutions viable sans code complexe .
    Tout (ou presque) est dans le titre:
    Comment récupérer la date du 1er jour de la semaine en fonction du numéro de semaine (et bien sur de l'année concernée).
    Il faut faire attention a la 1ere semaine. Dans mon cas je considéré que la 1ere semaine est celle qui contient au moins 4 jours.
    Pour cette première semaine il me faut le 1er jour de cette semaine (qui peut donc être un lundi - mardi-mercredi ou Jeudi) pour les semaine suivantes il me faudrait la date du lundi correspondant!

    Avez vous des suggestions?

    Merci par avance

  2. #2
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Points : 658
    Points
    658
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       'fonction qui recupere la fin de mois
    Public Function finDeMoisdernier(ByVal d)
        d = DateSerial(Year(d), Month(d), 1)
        finDeMoisdernier = theDayBefore(d)
    End Function
    Il est tard mais eventuellement demain je peux t'aider, si tu cherche le dernier jour du 12 eme mois date-1 et celui de date , tu recupere la premiere semaine puis tu boucle avec un pas de 7 par exemple avec une boucle while tant que year(date) different de year(date)+1

    Qu'est ce que tu en pense?

  3. #3
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Teste cette fonction soit depuis le VBE soit dans Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Function DateNumSemaine(Annee As Integer, NumSem As Integer) As Date
     
        DateNumSemaine = DateSerial(Annee, 1, 1) - Weekday(DateSerial(Annee, 1, 1)) - 5 + 7 * NumSem
     
    End Function
    Dans le VBE de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub Test()
     
        MsgBox DateNumSemaine(2015, 20)
     
    End Sub
    Dans Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =DateNumSemaine(A1;A2)
    Hervé.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Merci à vous deux pour votre aide qui m'a été très précieuse.

    Theze je suis parti de ta solution, mais sur certaines dates cela me posait problème (par exemple la 1ere semaine de 2016 me remontait le 28/12/2015). J'ai donc fais quelques adaptations et voici le résultat :

    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
     
     Public Function DateNumSemaine(Annee As Integer, NumSem As Integer) As Date
     
     'cas particulier de la 1ere semaine de l année qui ne commence pas le 01/01 (semaine de moins de 4 jours)
     If Format("01/01" & Annee, "ww", vbMonday, vbFirstFourDays) = 0 Then
        DateNumSemaine = DateSerial(Annee, 1, 1) - Weekday(DateSerial(Annee, 1, 1)) - 5 + 7 * (NumSem + 1)
     Else
        'Cas particulier de la 1ere semaine qui commence le 1er janvier si la semaine 1 fait plus de 4 jours.
        If NumSem = 1 Then
            DateNumSemaine = DateSerial(Annee, 1, 1)
        Else
            DateNumSemaine = DateSerial(Annee, 1, 1) - Weekday(DateSerial(Annee, 1, 1)) - 5 + 7 * NumSem
        End If
     End If
     
    End Function
    Merci encore

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2003
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 304
    Points : 130
    Points
    130
    Par défaut
    Bonjour
    Attention, cela ne fonctionne pas pour 2021. on se retrouve avec une semaine de retard...

  6. #6
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 468
    Points : 2 240
    Points
    2 240
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function N°SemaineDate(As Integer, Année As Integer) As Date
    Dim d As Date
    d = DateSerial(Année, 1, 1)
    j = 2 - Weekday(d)
    d = DateSerial(Année, 1, 1 + j)
    N°SemaineDate = DateSerial(Year(d), Month(d), Day(d) + ((N° - 1) * 7))
    End Function
    Sub test()
    Debug.Print N°SemaineDate(1, 2021)
    End Sub

  7. #7
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    perso je proposerai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function DateNumSemaine(MonAnnee As Integer, NumSem As Byte) As Date
     
     'Récuperation de la date en fonction du numéro de semaine:
     
     
            If Weekday(DateSerial(MonAnnee, 1, 1)) = 1 Or Weekday(DateSerial(MonAnnee, 1, 1)) = 2 Then
                DateNumSemaine = DateSerial(MonAnnee, 1, 1) - Weekday(DateSerial(MonAnnee, 1, 1)) - 5 + 7 * NumSem
            Else
                DateNumSemaine = DateSerial(MonAnnee, 1, 1) - Weekday(DateSerial(MonAnnee, 1, 1)) - 5 + 7 * (NumSem + 1)
            End If
     
     
    End Function
    J'ai testé avec plusieurs années au hasard, et ça a marché à chaque coup

    chance du débutant ou code correct ? je ne saurai dire

  8. #8
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 732
    Points : 189
    Points
    189
    Par défaut
    C'est parfait. Fonctionne à merveille. Mille merci

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

Discussions similaires

  1. [2008R2] Récupérer une date à partir d'un numéro de semaine et d'une année.
    Par ff.martin dans le forum Développement
    Réponses: 5
    Dernier message: 24/07/2014, 15h20
  2. [VB.Net] Obtenir une date à partir d'un numero de semaine
    Par tonysky dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/01/2007, 08h57
  3. Réponses: 6
    Dernier message: 25/09/2006, 14h51
  4. [SQL] Une date en fonction du num de semaine
    Par frederic_s dans le forum Oracle
    Réponses: 1
    Dernier message: 07/03/2006, 11h52
  5. Réponses: 10
    Dernier message: 09/01/2006, 18h39

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