[VBA] Propriété ComboBox

Résolu
Palteza Messages postés 82 Statut Membre -  
Palteza Messages postés 82 Statut Membre -
Bonjour à tous,

Je cherche désepsérément une propriété d'une ComboBox (qui peut-être n'existe pas d'ailleurs).

J'ai dans une Combo, une permière liste déroulante de 3 choix. Chacun de ces choix implique une nouvelle liste déroulante qui va se charger.
Je voudrais que, quand on clique sur un des 3 choix de la 1ère liste, la 2ème liste se déroule automatiquement devant les yeux de l'utilisateur (et pas qu'il ait à cliquer une nouvelle fois pour voir la 2ème liste apparaître).

Est-ce qu'une telle propriété existe dans une Combo?

Merci d'avance

11 réponses

  1. Palteza Messages postés 82 Statut Membre 3
     
    Je remonte
    0
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Non, ce n'est pas possible naturellement, mais tu peu
    Voir cette astuce pour l'obtenir.
    A+
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  3. Palteza Messages postés 82 Statut Membre 3
     
    Bonjour lermitte et merci pour la réponse,

    En fait, en me passant cette astuce, tu as du comprendre que ça se passait sur 2 Combos, mais c'est sur qu'une (quand je choisis un des 3 découpages, alors cette même combo se charge de nouvelles valeurs). Je te colle le code, tu comprendras surement mieux. Et donc je suppose qu'il suffit de mettre la fonction DropDown à un endroit dans la macro, mais je ne trouve pas où :

    Option Explicit
    
    Private Sub ComboBox1_Change()
    
    Dim Plage As Range
    Dim choix As String
    
    Set xlBook = Workbooks("10CQ_MERIGNAC_INSEE_2006.xls")
    
    Select Case ComboBox1.Value
    
        Case Is = "Découpages INSEE"
            ComboBox1.Clear
                With xlBook.Sheets("Données")
                    Set Plage = .Range("B1:B29")
                End With
            ComboBox1.List = Plage.Value
            
        Case Is = "Découpages Conseil de Quartier"
            ComboBox1.Clear
                With xlBook.Sheets("Données")
                    Set Plage = .Range("B31:B42")
                End With
            ComboBox1.List = Plage.Value
            
        Case Is = "Découpages Mérignac/CUB/Gironde"
            ComboBox1.Clear
                With xlBook.Sheets("Données")
                    Set Plage = .Range("B44:B48")
                End With
            ComboBox1.List = Plage.Value
    
        Case Is = "Retour"
            ComboBox1.Clear
                With xlBook.Sheets("Données")
                    Set Plage = .Range("A1:A3")
                End With
            ComboBox1.List = Plage.Value
            
    End Select
    
    choixcombo1 = ComboBox1.Value
    
    End Sub
    0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Re,
    en premier lieu tu met beaucoups trop de ligne de code pour faire ce que tu veux..
    Select Case ComboBox1.Value  
    
        Case Is = "Découpages INSEE"  
            ComboBox1.Clear  
                With xlBook.Sheets("Données")  
                    Set Plage = .Range("B1:B29")  
                End With  
            ComboBox1.List = Plage.Value  
              
        Case Is .....


    serait avantageusement remplacer par...

      With xlBook.Sheets("Données")  
        Select Case ComboBox1.Value 
        Case Is = "Découpages INSEE"  
            ComboBox1.RowSource = .Range("B1:B29")  
        Case Is .....


    Et effectivement, le code indiquer devvait se trouver juste avant le End Sub

    J'ai pas testé, si prob, tu dis je verais plus loin.
    Remarque: Quand tu reçois une modif dans le Combo1 c'est le Combo1 que tu modifie... C'est juste ??
    A+
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Palteza Messages postés 82 Statut Membre 3
     
    * Oui c'est exactement ça : "Quand tu reçois une modif dans le Combo1 c'est le Combo1 que tu modifie"

    * En remplaçant mon code par RowSource (qui allègerait bien en effet), il me laisse une "incompatibilité de type" sur la ligne
    ComboBox1.RowSource = .Range("B1:B29")

    * Ensuite ComboBox1.DropDown ne fonctionne pas non plus juste avant le End Sub
    0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Tu peu mettre le code que tu as dans l'événement du combo ?
    0
  8. Palteza Messages postés 82 Statut Membre 3
     
    Option Explicit
    
    Private Sub ComboBox1_Change()
    
    Dim Plage As Range
    Dim choix As String
    
    Set xlBook = Workbooks("10CQ_MERIGNAC_INSEE_" & Annee & ".xls")
    
     With xlBook.Sheets("Données")
    
        Select Case ComboBox1.Value
            Case Is = "Découpages INSEE"
                ComboBox1.RowSource = .Range("B1:B29")
            Case Is = "Découpages Conseil de Quartier"
                ComboBox1.RowSource = .Range("B31:B42")
            Case Is = "Découpages Mérignac/CUB/Gironde"
                ComboBox1.RowSource = .Range("B44:B48")
            Case Is = "Retour"
                ComboBox1.RowSource = .Range("A1:A3")
        End Select
        
     End With
    
    choixcombo1 = ComboBox1.Value
    ComboBox1.DropDown
    
    End Sub


    Private Sub UserForm_Initialize()
    
    Dim Plage As Range
    Set xlBook = Workbooks("10CQ_MERIGNAC_INSEE_" & Annee & ".xls")
    
    With xlBook.Sheets("Données")
        Set Plage = .Range("A1:A3")
    End With
    
    ComboBox1.List = Plage.Value
    ComboBox2.List = Plage.Value
    
    End Sub
    0
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Je me suis trompé dans le raccourcissement...
     With xlBook.Sheets("Données")  
        Select Case ComboBox1.Value 
        Case Is = "Découpages INSEE"  
            ComboBox1.List= .Range("B1:B29").value  
        Case Is .....


    En ce qui concerne l'ouverture du combo ça ne marche pas si tu veux réouvrir le même combo.
    Ca me paraît quand même bizarre que c'est celui là que tu réinitialise.
    Et dans ta sélection des "Case Is" tu en met 4 alors que tu n'a que 3 données
    Autre remarque : tu met les mêmes données dans Combo1 et 2 ?
    A+
    0
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Contrairement a ce que je dis dans mon poste précédant, ça fonctionne normalement même si ont réouvre le même Combo, tu m'a induit en erreur avec ta question Où je met le code alors que c'est tout a fait clair dans le tuto.
    Ca ne m'empèche pas de penser que tu programme drôledemment.
    A+
    0
  11. Palteza Messages postés 82 Statut Membre 3
     
    C'est surtout que je programme quasi en autodidacte, donc les structures doivent être lourdes oui!

    En effet, mes combos 1 et 2 sont identiques (car l'utilisateur doit effectuer 2 choix), c'est ce pourquoi les changements effectués sur chaque combo entraînent des changements sur la même.

    Pour l'hisoire du Case Is 4 (Case Is Retour), c'est que dans chaque 2nd série de données (après avoir fait un des 3 choix), il y en fin de liste un "Retour", pour pouvoir revenir au choix initial des 3.

    Dans cette histoire, tu n'as pas d'idées ou placer ce DropDown (bien qu'affiché dans mon code plus haut, il n'opère pas)? Car le tuto n'est pas adaptable à mon cas non?
    0
  12. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Non d'une pipe, c'est quand même expliquer !!!
    Bon je vais quand même développer..
    Ajoute le code suivant a la fin de TON code
        Private Sub ComboBox1_Change()
         ....
         ....
        choixcombo1 = ComboBox1.Value
        ComboBox1.SetFocus 
        SendKeys "^(F4)" 
    End Sub

    Ensuite en dessous du End Sub tu ajoute...
    Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
        If KeyCode = 16 Then 
            ComboBox1.DropDown 
        End If 
    End Sub

    J'espère que cette fois-çi se sera plus clair. :D
    A+
    0
    1. Palteza Messages postés 82 Statut Membre 3
       
      Oui j'avoue que là j'ai un peu abusé de ta bonté ^^' ... j'avais oublié d'incorporer SetFocus et SendKeys dans le Change ...

      Merci pour tout lermite :)
      0