ComboBox en cascade VBA

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

  • test.xlsx
    51.6 KB · Affichages: 34
  • test.xlsx
    51.6 KB · Affichages: 40
  • test.xlsx
    51.6 KB · Affichages: 46

Mali

XLDnaute Nouveau
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: 50

Mali

XLDnaute Nouveau
Re : ComboBox en cascade VBA

J'étais en déplacement tout l'après-midi.

Voici mon classeur en xls.

Un tout grand merci pour votre aide.

Bonne soirée :)
 

Pièces jointes

  • test.xls
    37.5 KB · Affichages: 29
  • test.xls
    37.5 KB · Affichages: 27
  • test.xls
    37.5 KB · Affichages: 27

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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
    58.5 KB · Affichages: 35
  • Test-2.xls
    58.5 KB · Affichages: 32
  • 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:

Mali

XLDnaute Nouveau
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

  • test.xls
    62 KB · Affichages: 23
  • test.xls
    62 KB · Affichages: 27
  • test.xls
    62 KB · Affichages: 21

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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
    62 KB · Affichages: 68
  • Filtre.jpg
    Filtre.jpg
    72 KB · Affichages: 48
  • Filtre.jpg
    Filtre.jpg
    72 KB · Affichages: 46
Dernière édition:

Discussions similaires

Réponses
28
Affichages
1 K

Statistiques des forums

Discussions
312 343
Messages
2 087 442
Membres
103 546
dernier inscrit
mohamed tano