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 :

Trouver le numéro de la semaine en cours [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut Trouver le numéro de la semaine en cours
    Bonsoir à tous,

    Pour activer une valeur dans un ComboBox1 et ComboBox2, j'aimerais trouver le numero de la semaine en cours depuis un tableau de dates en se basant sur la date du jour.

    Ex : 18/06/2012 , N°=24 :: c'est le jour de mon annivesaire )


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ComboBox1.ListIndex = 23 ' Affiche le 13.06.2012
    ComboBox2.ListIndex = 23 ' Affiche le 19.06.2012

    N° Semaine Du Au
    ....

    22 30.05.2012 05.06.2012
    23 06.06.2012 12.06.2012
    24 13.06.2012 19.06.2012
    25 20.06.2012 26.06.2012
    26 27.06.2012 03.07.2012
    27 04.07.2012 10.07.2012

    ....

    Merci d'avance.


  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2009
    Messages : 322
    Points : 172
    Points
    172
    Par défaut Re
    Voilà !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
     
    Dim datetest As Date
     
     
    datetest = [LaDate] ' La cellule A1 est nommé "Ladate" dans l'exemple
    semaine = Format(datetest, "ww", vbMonday, vbFirstFourDays)
    MsgBox (semaine)
     
    End Sub
    Dlight

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut,
    APT une remarque :
    Ex : 18/06/2012 , N°=24 :: c'est le jour de mon annivesaire
    . En fait le N° de semaine est 25 et pas 24.

    A titre documentiare lire N° ISO des semaines

  4. #4
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Bonsoir dlight, kiki29,

    dlight :: Ca marche en changeant le Lundi par Mercredi. Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    semaine = Format(DateTest, "ww", vbWednesday, vbFirstFourDays)
    Citation Envoyé par kiki29 Voir le message
    Salut,
    APT une remarque : . En fait le N° de semaine est 25 et pas 24.

    A titre documentiare lire N° ISO des semaines
    N° 24, parce que le 18/06/2012 est contenu entre le 13/06/2012 et le 19/06/2012.

    Avec les fonctions IsoWeekNumberDM et IsoWeekNumber, ça donne N°=25.

    Peut-être la déférence vient que mes semaines commencent par Mercredi et non pas Lundi

  5. #5
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Bonsoir,

    Le numéro de semaine est trouvé, reste que les ComboBox (1 et 2) affichent un numéro de série au lieu de la date dans le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ComboBox1.ListIndex = Semaine - 1    'début de la semaine en cours 
        ComboBox2.ListIndex = Semaine - 1    'fin de la semaine en cours
    Les ComboBox sont remplies par des plages nommées dans RowSource.

    ComboBox1 par la plage nommée "Du" : =Feuil1!$F$2:$F$53

    ComboBox2 par la plage nommée "Au" : =Feuil1!$G$2:$G$53

    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
    Private Sub UserForm_Initialize() 
        Dim Mois As Long, i As Long, Semaine As Long 
        Dim DateTest As Date 
     
        Mois = Month(Date): DateTest = Now() 
     
        '-- Trouver le numéro de la semaine 
        Semaine = Format(DateTest, "ww", vbWednesday, vbFirstFourDays) 
     
       '-- Afficher l'élément correspondant à semaine - 1 
       '-- Mais affiche 41080 au lieu du 20/06/2012 ? 
        ComboBox1.ListIndex = Semaine - 1    'début de la semaine en cours 
        ComboBox2.ListIndex = Semaine - 1    'fin de la semaine en cours 
     
        For i = 1 To Mois 
            ComboBox3.AddItem MonthName(i) 
        Next i 
        ComboBox3.ListIndex = Mois - 1 
     
    End Sub


  6. #6
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Bonsoir,

    J'ai annulé l’alimentation des CombobBox depuis la propriété RowSource avec des plages nommées, et je l'ai remplacé par l'alimentation directe depuis la feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With Sheets("Base")
            For i = 8 To .Range("J65536").End(xlUp).Row
                ComboBox1 = .Range("J" & i)
                If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("J" & i)
                ComboBox2 = .Range("K" & i)
                If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem .Range("K" & i)
            Next i
        End With
    Et maintenant, l'affichage dans les deux ComboBox est une date et non pas un numéro de série.

    Mais j'aimerais savoir pourquoi avec la priorité RowSource ça ne marchait pas et avec un remplissage directe de la feuille marche ?

    Merci.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Points : 437
    Points
    437
    Par défaut
    Bonjour,

    Je pense aussi que la formule proposée par dlight n'est pas bonne, au moins pour l'Europe.
    Elle renvoie par exemple 53 pour le lundi 31/12/2007 alors qu'elle devrait renvoyer 1. Je parle de la norme Européenne.

    En changeant lundi par mercredi on a semaine 52 pour le 31/12/2007, ce qui est faux aussi

    Au vu du drapeau figurant sous le nom de dlight, ne serait-il pas canadien, où le calcul des semaines est peut-être différent.

    JP

  8. #8
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Bonjour JPierreM,

    Citation Envoyé par JPierreM Voir le message
    le calcul des semaines est peut-être différent.

    Oui, le calcul des semaines est défirent, car elle commencent par un "Mercredi".

    Mais reste la question :

    Mais j'aimerais savoir pourquoi avec la priorité RowSource ça ne marchait pas et avec un remplissage directe de la feuille marche ?
    Merci.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Points : 437
    Points
    437
    Par défaut
    Bonjour,

    Effectivement on obtient le n° de série, je n'ai pas d'explication

    Pour résoudre le problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ComboBox1_Change()
    ComboBox1.Value = Format(ComboBox1.Value, "dd/mm/yyyy")
    End Sub
    JP

  10. #10
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Bonsoir JPierreM,

    Ta solution est acceptable dans le OnChange de la ComboBox.

    Mais dans UserForm_Initialize, comment peut-on formater en date la valeur choisie par défaut dans cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.ListIndex = Semaine - 1
    Lire aussi les cours et tutoriels pour apprendre Excel.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Points : 437
    Points
    437
    Par défaut
    Bonjour,

    Essayez de remplir la combobox de la façon suivante en supprimant bien sûr les références dans RowSource

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Initialize()
    DateTest = Now()
     
    Semaine = Format(DateTest, "ww", vbWednesday, vbFirstFourDays)
     
    For i = 2 To 53
     ComboBox1.AddItem Format(Range("F" & i), "dd/mm/yyyy")
    Next i
     
        ComboBox1.ListIndex = Semaine - 1   
     
    End Sub

    les dates s'affichent comme souhaité

    JP

  12. #12
    apt
    apt est déconnecté
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Points : 118
    Points
    118
    Par défaut
    Salut JPierreM et merci pour ta réponse.

    Désolé d’avoir répondu si tard

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 11/10/2011, 14h04
  2. [XL-2003] Trouver le numéro de la semaine et recopier vers le bas ?
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/05/2010, 14h18
  3. Trouver le numéro de semaine d'une date
    Par sat83 dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/05/2008, 11h05
  4. [VBA-E]Trouver le Numéro de semaine
    Par ekynoxx dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/05/2007, 15h27
  5. [C++ - MFC] numéro de la semaine en cours...?
    Par Gothico dans le forum MFC
    Réponses: 10
    Dernier message: 18/11/2003, 14h31

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