Probleme VBA - Deux listes Combobox

Probleme VBA - Deux listes Combobox - VB/VBA/VBS - Programmation

Marsh Posté le 20-02-2008 à 20:46:26    

Bonjour a tous !
 
Je viens vers vous pour un petit coup de main. En effet, j'aimerais savoir comment concevoir un formulaire composé de deux zones de liste modifiables, la première permettant de filtrer les données affichées dans la seconde. :pt1cable:  
 
 
Exemple :
 
   -  J'ai deux catégories : Cac40 et SP100      (Vive la finance  :whistle: ). Ces dernières à mettre dans une zone de liste modifiable (Combobox)
 
   - Pour chacune de ces catégories , j'ai plusieurs éléments (par exemple les actions de chaucun de ces indices boursiers), eux aussi à insérer dans une zone de liste modifiable.
 
 
Voili voilou, pouvez vous donc m'aider ??? Merci d'avance


Message édité par fixxup le 20-02-2008 à 20:46:51
Reply

Marsh Posté le 20-02-2008 à 20:46:26   

Reply

Marsh Posté le 21-02-2008 à 08:28:44    

un p'tit up please

Reply

Marsh Posté le 21-02-2008 à 11:16:41    

Bonjour,
Voilà une proposition ... ne sachant pas d'ou viennent les données des 2 listes :
 
2 combo : combo1 et Combo2.
Tu choisis dans Combo1 et Combo2 se met à jour.
 
Private Sub Combo1_Change()
    Call AfficheElement(Combo1.Text)
End Sub
Private Sub UserForm_Initialize()
    Combo1.AddItem "Cac40"
    Combo1.AddItem "SP100"
     
    Combo1.Text = Combo1.List(0)
End Sub
 
Private Sub AfficheElement(ElListe1 As String)
    Combo2.Clear
    Select Case ElListe1
        Case "Cac40":
            Combo2.AddItem "Cac40 --- 1"
            Combo2.AddItem "Cac40 --- 2"
            Combo2.AddItem "Cac40 --- 3"
            Combo2.AddItem "Cac40 --- 4"
        Case "SP100":
            Combo2.AddItem "SP100 --- 1"
            Combo2.AddItem "SP100 --- 2"
            Combo2.AddItem "SP100 --- 3"
            Combo2.AddItem "SP100 --- 4"
    End Select
    Combo2.Text = Combo2.List(0)
End Sub


Message édité par Paul Hood le 21-02-2008 à 11:17:23
Reply

Marsh Posté le 21-02-2008 à 14:58:18    

Merci pour ta réponse mais en fait les eléments sont a prendre dans une seconde colonne (et y en a 700 :d)
 
En gros sous excel ca donne ca :
 
 
 
colonneA     Colonne B
 
CAC40         Axa
CAC40         BNP
CAC40         Sociétégénérale
SP100         Microsoft
SP100         Intel
 
 
Donc le but est de faire apparaitre dans une premiere combobox les deux indices (Pas trop dur avec Rowsource), et faire apparaitre dans une deuxième les éléments relatifs au choix de l'indice de la première Combobox  (Donc pour le CAC 40 : Axa, BNP,...)
 
merci merci
 
 

Reply

Marsh Posté le 21-02-2008 à 18:02:52    

Alors voilà une proposition qui fonctionne...peut-etre pas la plus nickel !
les données sont colA et colB de ligne 1 a 5
Private Sub Combo1_Change()
    Combo2.Clear
    Call AfficheElement(Combo1.Text)
End Sub
 
 
Private Sub UserForm_Initialize()
    Dim MonTableau As Range
    Dim TabRes As Collection
 
    Set MonTableau = Range("A1:A5" )
     
    Set TabRes = CollTrieeSansDoublons(MonTableau)
 
    For Each el In TabRes
        Combo1.AddItem el
    Next
End Sub
   
Function CollTrieeSansDoublons(Plage) As Collection
    Dim AllCells As Range, cell As Range
    Dim NoDupes As New Collection
    Dim i As Integer, j As Integer
    Dim Swap1, Swap2, Item
     
  Set AllCells = Plage
   
  On Error Resume Next
  For Each cell In AllCells
    NoDupes.Add cell.Value, CStr(cell.Value)
  Next cell
  On Error GoTo 0
     
'   Sort the collection
  For i = 1 To NoDupes.Count - 1
    For j = i + 1 To NoDupes.Count
      If NoDupes(i) > NoDupes(j) Then
        Swap1 = NoDupes(i)
        Swap2 = NoDupes(j)
        NoDupes.Add Swap1, before:=j
        NoDupes.Add Swap2, before:=i
        NoDupes.Remove i + 1
        NoDupes.Remove j + 1
      End If
    Next j
  Next i
 
  Set CollTrieeSansDoublons = NoDupes
 
End Function
 
Sub AfficheElement(MaSelection As String)
    Dim MonTab As Range
     
    Set MonTab = Range("A1:B5" )
     
    i = 1
    For Each cel In MonTab
        If cel = MaSelection Then
            Combo2.AddItem MonTab(i + 1)
        End If
        i = i + 1
    Next
End Sub
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed