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 Sub

J'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 Sub

A+

Bonjour Frangy,

Ça fonctionne parfaitement !

Merci beaucoup

Rechercher des sujets similaires à "afficher que valeurs visible combobox"