N'afficher que les valeurs "visible" dans ComboBox
(Re)Bonjour à tous,
J'ai un code - dans un UserForm - qui me permet de charger deux ComboBox en cascade sans doublon ni vide qui fonctionne très bien. Cependant, la base de données est systématiquement filtrée par les utilisateurs puisqu'elle contient beaucoup de données et qu'ils n'ont l'utilité que de certaines d'entre elles à chaque utilisation du fichier.
Je souhaiterais donc ajouter une condition au chargement de mes ComboBox :
- Afficher seulement les valeurs visibles après filtre
Je vous joins mon code (trouvé et adapté à partir du site de M. Boisgontier)
Dim dico
'Initialisation des ComboBox en cascade sans doublon ni vide
Private Sub UserForm_Initialize()
Dim f As Worksheet
Dim c As Range
Set f = Sheets("Synthese")
Set dico = CreateObject("Scripting.Dictionary")
For Each c In f.Range("b7:b" & f.[b65000].End(xlUp).Row)
dico(c.Value) = IIf(dico.exists(c.Value), _
dico(c.Value) & "*" & c.Offset(, 1), c.Offset(, 1))
Next c
Me.CB_Nom_Axe.List = dico.keys
End Sub
'Chargement de la ComboBox Nom_Axe sans doublon ni vide
Private Sub CB_Nom_Axe_Click()
Me.CB_Num_Affaire.List = Split(dico(Me.CB_Nom_Axe.Value), "*")
CB_Num_Affaire.SetFocus
End Sub
'Chargement de la ComboBox Num_Affaire en cascade selon Nom_Axe sans doublon ni vide
Private Sub CB_Num_Affaire_Change()
Dim Cel As Range
Dim Ligne As Long
With Sheets(Me.Periode.Text)
Set Cel = .Columns("C").Find(what:=Me.CB_Num_Affaire, LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
Ligne = Cel.Row
Me.TB_Commentaire_Periode = .Range("L" & Ligne)
End If
End With
TB_Commentaire_Periode.SetFocus
End SubJ'ai pensé à la condition "Visible" mais après pas mal de tests, je n'arrive pas à la formuler comme il convient (ou alors ce n'est simplement pas ce qu'il faut utiliser) Quelqu'un aurait-il une idée ?
Merci d'avance pour votre aide
EDIT : Le bout de code que j'ai précédemment posté est celui de mon UserForm, en continuent mes tests et recherches je me demande si je ne devrais pas ajouter aussi quelque chose dans le module qui paramètre mon UserForm.
Dans le doute j'essaie des choses comme :
UserForm1.CB_Nom_Axe.Value.Visible = True(En sachant que CB_Nom_Axe est le nom de mon premier ComboBox)
Cela pourrait être une piste ?
Merci d'avance pour votre aide !
Bonjour,
Essaie après avoir modifié la partie initialisation :
Private Sub UserForm_Initialize()
Dim f As Worksheet
Dim c As Range
Set f = Sheets("Synthese")
Set dico = CreateObject("Scripting.Dictionary")
For Each c In f.Range("b7:b" & f.[b65000].End(xlUp).Row)
If Rows(c.Row).Hidden = False Then
dico(c.Value) = IIf(dico.exists(c.Value), dico(c.Value) & "*" & c.Offset(, 1), c.Offset(, 1))
End If
Next c
Me.CB_Nom_Axe.List = dico.keys
End SubA+
Bonjour Frangy,
Ça fonctionne parfaitement !
Merci beaucoup