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 :

Listes déroulantes pour choisir une date en vba


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut Listes déroulantes pour choisir une date en vba
    bonjour,

    j'aimerais pouvoir créer dans un user form 3 listbox (jour ,moi ,année) afin de pouvoir sélectionner une date.
    Est il possible de passer par la propriété rowsource des listbox,sans toutefois devoir créer des liste dans une feuille?
    ex:1 colonne de 1 à 31 pour les jours ,une colonne de janvier à décembre pour les mois ,une colonne de 19xx à 20xx?

    merci d'avance à ceux qui vont répondre

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Crée un Userform avec 3 listbox dont tu adapteras les dimensions après essais et copie ce code qui initialisera les 3 Box.

    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
     
     
    Private Sub UserForm_Initialize()
        With ListBox1
            .ColumnCount = 1
            .ColumnWidths = 1
            For x = 1 To 31
                .AddItem x
            Next
            .TextColumn = 1
        End With
        With ListBox2
            .ColumnCount = 1
            .ColumnWidths = 1
            For x = 1 To 12
                .AddItem Format(CDate("1 / " & x & " / 2011"), "mmmm")
            Next
            .TextColumn = 1
        End With
        With ListBox3
            .ColumnCount = 1
            .ColumnWidths = 1
            For x = Year(Now) To Year(Now) - 100 Step -1
                .AddItem x
            Next
            .TextColumn = 1
        End With
    End Sub
    Cordialement.
    Jean-Claude

  3. #3
    Expert confirmé
    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
    Par défaut
    Bonjour,

    Est il possible de passer par la propriété rowsource des listbox,sans toutefois devoir créer des liste dans une feuille?
    A ma connaissance non car justement, "RowSource" sert à charger une ListBox ou ComboBox depuis une plage sur une feuille.
    Le soucis avec trois ListBox, c'est que tu risque d'avoir des erreurs de date du genre 29/02/2014 ou 31/11/2014. Tu peux soit gérer les listes en fonction des choix dans les autres comme par exemple, 2012 aura permettra pour le mois de février d'avoir 29 jours ou encore, si tu choisi le 31 comme jour, de n'avoir que les mois correspondants.
    Une piste à peaufiner et à adapter :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    Private Sub UserForm_Initialize()
     
        'code de jcDSoft
        Dim x As Integer
     
        With ListBox1
     
            For x = 1 To 31
                .AddItem x
            Next
     
        End With
     
        With ListBox2
     
            For x = 1 To 12
                .AddItem MonthName(x)
            Next
     
            .ListIndex = 0
     
        End With
     
        With ListBox3
     
            For x = Year(Now) To Year(Now) - 100 Step -1
                .AddItem x
            Next
     
            .ListIndex = 0
     
        End With
     
    End Sub
     
    Private Sub ListBox1_Click()
     
        Dim Mois As Integer
        Dim I As Integer
     
        With ListBox2
     
            .Clear
     
            For I = 1 To 12
     
                On Error Resume Next
                Mois = Day(CDate(Format(ListBox1.List(ListBox1.ListIndex), "00") & "/" & _
                           Format(I, "00") & "/" & ListBox3.List(ListBox3.ListIndex)))
     
                If Err.Number = 0 Then ListBox2.AddItem MonthName(I)
     
            Next I
     
        End With
     
     
    End Sub
     
    Private Sub ListBox2_Click()
     
        Dim Jour As Integer
        Dim I As Integer
     
        With ListBox1
     
            .Clear
     
            For I = 1 To 31
     
                On Error Resume Next
                Jour = Month(CDate(Format(I, "00") & "/" & Format(ListBox2.List(ListBox2.ListIndex), "00") _
                             & "/" & ListBox3.List(ListBox3.ListIndex)))
     
                If Err.Number = 0 Then ListBox1.AddItem I
     
            Next I
     
        End With
     
    End Sub
     
     
    Private Sub ListBox3_Click()
     
        ListBox2_Click
     
    End Sub
    Hervé.

Discussions similaires

  1. une liste déroulante pour choisir une couleur ?
    Par Ekimasu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 26/02/2009, 12h44
  2. Réponses: 16
    Dernier message: 04/10/2007, 13h06
  3. Combinaison de liste déroulante pour créer une requete
    Par jeje22 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/09/2006, 16h23
  4. Réponses: 2
    Dernier message: 01/09/2006, 00h02

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