ComboBox en cascade VBA

  • Initiateur de la discussion Initiateur de la discussion Mali
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Mali

XLDnaute Nouveau
Bonjour à tous, je suis nouvelle sur le Forum.

Je tente actuellement de faire un fichier pour l'organisation d'une ASBL.
Mais je bloque sur un problème de ComboBox en cascade.
En effet, chaque membres achète des cartes de 10 cours au sein de l'ASBL. Donc un membre peut utiliser plusieurs cartes sur une année.
Chaque membre à un ID (de 1 jusqu'à n) et chaque carte porte un numéro (1,2,3,4,...), ce qui en les combinant me donne un ID spécifique pour chaque couple membre/carte.

Mon souci est le suivant : dans le Userform, je souhaiterais dans la ComboBox 1 : choisir l'élève (sans doublon).
et dans la ComboBox 2 : qu'en fonction de l'élève choisi, je puisse choisir dans les numéros de cartes associés.

Et ensuite faire apparaître les infos correspondantes (date de validité et nombres de cours restants).

J'ai essayé d'être la plus claire possible... Peut-être que ma gestion des données n'est pas la plus optimale !

Bref, je suis ouverte à tous conseils 🙂.

Un tout grand merci d'avance pour votre aide.

PS : ma version excel est 2011 sur Mac
 

Pièces jointes

Re : ComboBox en cascade VBA

Merci !

J'ai effectivement pu cibler le type de demande que j'essaye de créer (hormis que je démarre directement du Userform).

Mais je n'arrive pas à l'appliquer à mon cas.
J'ai essayé mais je ne pense pas être dans le bon (Run time error 429 - ActiveX component can't create object)...
 

Pièces jointes

  • Capture d’écran 2015-03-31 à 12.06.21.jpg
    Capture d’écran 2015-03-31 à 12.06.21.jpg
    41.4 KB · Affichages: 51
Re : ComboBox en cascade VBA

Bonjour,

cf PJ (compatible MAC)

Code:
Dim f, a()
Private Sub UserForm_Initialize()
  Set f = Sheets("bd")
  a = f.Range("b2:H" & f.[B65000].End(xlUp).Row).Value
  Dim collect As New Collection
  Dim Tbl(1 To 2)
  On Error Resume Next
  For i = 1 To UBound(a)
    Tbl(1) = a(i, 1)
    Tbl(2) = a(i, 2)
    collect.Add Tbl, Key:=CStr(a(i, 1))
  Next i
  On Error GoTo 0
  Dim b(): ReDim b(1 To 2, 1 To collect.Count)
  For i = 1 To collect.Count
      b(1, i) = collect(i)(1)
      b(2, i) = collect(i)(2)
  Next i
  Me.ComboBox1.List = Application.Transpose(b)
End Sub

Private Sub ComboBox1_Click()
  Me.TextBox1 = Me.ComboBox1.Column(1)
  Me.ListBox1.Clear
  j = 0
  For i = LBound(a) To UBound(a)
    If Val(Me.ComboBox1) = a(i, 1) Then
      Me.ListBox1.AddItem a(i, 4)
      On Error Resume Next
      Me.ListBox1.List(j, 1) = a(i, 5)
      Me.ListBox1.List(j, 2) = a(i, 6)
      Me.ListBox1.List(j, 3) = a(i, 7)
      On Error GoTo 0
      j = j + 1
    End If
  Next i
End Sub

Equivalent avec Dictionary au lieu de Collection

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormCascadeSansDoublons2colonnesDict.xls

Filtre.gif

JB
 

Pièces jointes

  • Test-2.xls
    Test-2.xls
    58.5 KB · Affichages: 35
  • Test-2.xls
    Test-2.xls
    58.5 KB · Affichages: 32
  • Test-2.xls
    Test-2.xls
    58.5 KB · Affichages: 49
  • Filtre.gif
    Filtre.gif
    37.7 KB · Affichages: 43
  • Filtre.gif
    Filtre.gif
    37.7 KB · Affichages: 43
Dernière édition:
Re : ComboBox en cascade VBA

Bonjour à tous,

@Dranreb : désolée effectivement, l'enregistrement avec le changement de format excel ne c'était pas bien effectué et mon userform avait disparu !

Je vous joins le bon fichier cette fois-ci, je serais ravie de voir comment vous arriver à faire des CombobBox Liées, cela me sera fort utile.


@JB : Merci pour votre code 😉 !


Bonne journée !
 

Pièces jointes

Re : ComboBox en cascade VBA

Bonjour,

cf PJ

Code:
Dim f, a()
Private Sub UserForm_Initialize()
  Set f = Sheets("bd")
  a = f.Range("b2:H" & f.[B65000].End(xlUp).Row).Value
  Dim collect As New Collection
  Dim Tbl(1 To 3)
  On Error Resume Next
  For i = 1 To UBound(a)
    Tbl(1) = a(i, 1)
    Tbl(2) = a(i, 2)
    Tbl(3) = a(i, 3)
    collect.Add Tbl, Key:=CStr(a(i, 1))
  Next i
  On Error GoTo 0
  Dim b(): ReDim b(1 To 3, 1 To collect.Count)
  For i = 1 To collect.Count
      b(1, i) = collect(i)(1)
      b(2, i) = collect(i)(2)
      b(3, i) = collect(i)(3)
  Next i
  Me.ComboBox1.List = Application.Transpose(b)
End Sub

Private Sub ComboBox1_Click()
  Me.TextBox1 = Me.ComboBox1.Column(1) & " " & Me.ComboBox1.Column(2)
  Me.ListBox1.Clear
  j = 0
  For i = LBound(a) To UBound(a)
    If Val(Me.ComboBox1) = a(i, 1) Then
      Me.ListBox1.AddItem a(i, 4)
      On Error Resume Next
      Me.ListBox1.List(j, 1) = a(i, 5)
      Me.ListBox1.List(j, 2) = a(i, 6)
      Me.ListBox1.List(j, 3) = a(i, 7)
      On Error GoTo 0
      j = j + 1
    End If
  Next i
End Sub

Private Sub ListBox1_Click()
  Me.Remarques = Me.ListBox1.Column(3)
  Me.Validité = Me.ListBox1.Column(1)
  Me.Restant = Me.ListBox1.Column(2)
End Sub
Filtre.jpg

JB
 

Pièces jointes

  • testx.xls
    testx.xls
    62 KB · Affichages: 68
  • Filtre.jpg
    Filtre.jpg
    72 KB · Affichages: 49
  • Filtre.jpg
    Filtre.jpg
    72 KB · Affichages: 47
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
1 K
Réponses
5
Affichages
900
  • Question Question
Microsoft 365 Liste cascade
Réponses
6
Affichages
1 K
Réponses
9
Affichages
839
Réponses
4
Affichages
771
Retour