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 :

Code pour semaine en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Code pour semaine en VBA
    Bonjour,

    J'ai mis en place ce bout de code qui me permet lorsque le mois en cours correspond au n°, d'afficher ce mois.
    Je souhaiterai en faire autant avec le numéro de semaine correspondant à la semaine en cours.
    Comment puis-je faire ?
    "jj" pour jour, "mm" pour mois,"aaaa" pour année, mais pour semaine ????
    Merci pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mois_actuel = Format(Now(), "mm")
    If mois_actuel = 9

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Le numéro de semaine fait l'objet d'une norme. Voici un code que j'utilise
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Public Function NumeroSemaine(dateSemaine As Date) As Integer
        Dim NumJour             As Integer
        Dim NbJour              As Integer
        Dim nbpremier           As Integer
        Dim Jour                As Date
        Dim DernierJourSemaine  As Date
     
        'Correspond au 1 er janvier de l'année de la date donnée
        Jour = DateSerial(Year(dateSemaine), 1, 1)
     
        'Correspond au jour dans la semaine (1 = lundi, 2 = mardi, 3 = mercredi, 4 = jeudi, etc ...)
        NumJour = Weekday(Jour, vbMonday)
     
        'Correspond au dernier jour de la semaine du 1er janvier
        DernierJourSemaine = DateSerial(Year(dateSemaine), 1, 8 - NumJour)
     
        'Si le 1er janvier est après le vendredi, la semaine du 1 er janvier n'est pas comptabilisée dans la nouvelle année
        If NumJour > 5 Then
            NumeroSemaine = 0
        Else
        'sinon elle l'est
            NumeroSemaine = 1
        End If
     
        'Différence entre la date et le jour de la fin de semaine du 1er janvier
        NbJour = dateSemaine - DernierJourSemaine
     
        'Ensuite, on calcule le numéro de la semaine
        'Si le calcul tombe juste, on met le résultat
        If NbJour Mod 7 = 0 Then
            NumeroSemaine = (NbJour / 7) + NumeroSemaine
        Else
        'Sinon, on, rajoute un car il y a une semaine en cours
            NumeroSemaine = NumeroSemaine + Int(NbJour / 7) + 1
        End If
     
        'Si le numéro est égal à 53, on vérifie où se trouve le 1er janvier
        If NumeroSemaine = 53 Then
            nbpremier = Weekday(DateSerial(Year(dateSemaine) + 1, 1, 1), vbMonday)
            'Si le 1er tombe avant le vendredi, le numéro de la semaine est le numéro 1
            If nbpremier < 5 Then NumeroSemaine = 1
            'sinon, le numéro est le 53
        End If
     
        'Le numéro de la semaine peut être egale à 0 (01/01/2005)
        'car il ne detécte pasla semaine 53
        'On cherche alors le numéro de la semaine du 31/12 de l'année d'avant
        If NumeroSemaine = 0 Then
            'Sauf si le 01/01 est le lundi
            If nbpremier = 1 Then
                NumeroSemaine = 1
            Else
                NumeroSemaine = NumeroSemaine(DateSerial(Year(dateSemaine) - 1, 12, 31))
            End If
        End If
    End Function
    Je ne suis pas l'auteur de ce code et je m'excuse auprès de lui de ne pas savoir lui attribuer cette contribution.

    Cordialement,

    PGZ

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Juste pour info: pour récupérer le numéro du mois le plus simple reste encore de faire ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero_mois = Month(Date)

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    voilà de quoi t'éclairer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MsgBox "N° de la semaine avec convention  ""4 jours au nmoins"" ===>> " & DatePart("ww", Date, vbFirstFourDays)
      MsgBox "N° de la semaine avec convention ""commençant le dimanche"" ===>> " & DatePart("ww", Date, vbSunday)
      MsgBox "N° de la semaine avec convention ""commençant le lundi"" ===>> " & DatePart("ww", Date, vbMonday)
      MsgBox "jour de la semaine  ===>>" & WeekDay(Date) & " (" & Format(Date, "dddd") & ")"
      MsgBox "jour du mois  ===>>" & Day(Date) & " (" & Format(Date, "dddd") & ")"
      MsgBox "mois  ===>>" & Month(Date) & " (" & Format(Date, "dddd") & ")"
      MsgBox "année  ===>>" & Year(Date)
      MsgBox "N° jour dans année  ===>> " & DateDiff("d", "01/01/" & Year(Date), Date)

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Il me semblait bien qu'il y avait une fonction toute faite qui permettait d'avoir le numéro de semaine mais je ne retrouvais plus laquelle c'était: merci uc.

    Le pire, c'est que je m'en suis déjà servi et que je suis passé juste à coté dans l'explorateur d'objets...
    Pas très en forme aujourd'hui.

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Ce n'est pas si simple.

    Regardez ce que donne ces formules pour le 31/12/2008 : toutes les 3 semaine 53 au lieu de 1.

    PGZ

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Citation Envoyé par pgz Voir le message
    Ce n'est pas si simple.

    Regardez ce que donne ces formules pour le 31/12/2008 : toutes les 3 semaine 53 au lieu de 1.

    PGZ
    Ucfoutu n'a pas précisé le premier jour de la semaine dans sa première formule (qui est la bonne).

    Précise dans datepart que le premier jour de la semaine est lundi et tu verras que oh miracle ça te renverra 1 pour le 31 décembre 2008.

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Mon dernier msgbox est inexact :

    Corriger par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "N° jour dans année  ===>> " & DateDiff("d", "31/12/" & Year(Date) - 1, Date)
    que l'on peut d'ailleurs avantageusement remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "N° jour dans année  ===>> " & DatePart("y", Date)
    Je pense que tout y est maintenant ...

  9. #9
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Pour info, le numéro de semaine suivant la norme ISO 8601 expliquée par Wiki ici

    PGZ

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

Discussions similaires

  1. [VBA-E97]Code pour déprotéger une feuille de calcul
    Par blaiso dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/04/2007, 11h30
  2. Réponses: 8
    Dernier message: 08/03/2007, 16h54
  3. [VBA][SQL] code pour requete sql update en vba
    Par titocv723 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 24/10/2006, 17h45
  4. [VBA-A]Un code pour récupérer un type de donnée
    Par KEROZEN dans le forum VBA Access
    Réponses: 5
    Dernier message: 14/04/2006, 16h56
  5. [VBA -A]Code pour répondre au question des msg d'alertes
    Par soad029 dans le forum VBA Access
    Réponses: 8
    Dernier message: 23/03/2006, 12h21

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