Filtre suite à choix dans une combobox

helene51

XLDnaute Junior
Bonjour le forum,

J'avance tranquillement dans mes travaux VBA mais les embuches sont nombreuses ... je n'ai pas un niveau très élevé et c'est pour cela que je vous sollicite.

J'ai fait de nombreuses recherches sur le forum sans trouver réponse à ma question :

J'ai un tableau sur une feuille Excel de A:AE, la longueur des colonnes est variable.
A l'aide d'une combobox je choisi un élément correspondant à une donnée de la colonne A. Je souhaite ensuite charger ma combobox2 avec les données de la colonne C, le tableau filtré avec la sélection de ma première combobox1.
Je bloque sur le code, alors qu'il me semble que c'est assez simple.
Voilà ce que j'ai pour le moment :

Code:
Private Sub UserForm_Initialize()
Dim i As Byte, k As Byte
Dim temp As String
Sheets("Donnees brutes").Select
For j = 2 To Range("a65536").End(xlUp).Row
    ComboBox1 = Range("a" & j)
    If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Range("a" & j)
    With ComboBox1
    For i = 0 To .ListCount - 1
        For k = 0 To .ListCount - 1
            If .List(i) < .List(k) Then
            temp = .List(i)
            .List(i) = .List(k)
            .List(k) = temp
            End If
        Next k
    Next i
    End With
Next j

End Sub


Private Sub ComboBox1_Change()
Dim i As Byte, k As Byte
Dim temp As String
'Filtrer mon tableau
Sheets("Donnees brutes").Range("A1:AE1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=ComboBox1.Value
'Charger mon combobox2
Sheets("Donnees brutes").Select
For j = 2 To Range("c65536").End(xlUp).Row
    ComboBox2 = Range("c" & j)
    If ComboBox2.ListIndex = -1 Then ComboBox1.AddItem Range("c" & j)
    With ComboBox2
    For i = 0 To .ListCount - 1
        For k = 0 To .ListCount - 1
            If .List(i) < .List(k) Then
            temp = .List(i)
            .List(i) = .List(k)
            .List(k) = temp
            End If
        Next k
    Next i
    End With
Next j
End Sub

Avec ce code, le filtre ne se réalise même pas. Qu'est-ce qui cloche ?
Y a-t-il d'autres fils sur ce sujet ?

Merci.
 

Davidc57

XLDnaute Occasionnel
Re : Filtre suite à choix dans une combobox

Bonsoir helene,

Je comprend pas le rapport entre ton code et la description de ton besoin.
En tout cas si j'ai bien compris ton problème, je pense que le fichier joint devrait t'aider. TU pourras peut-être t'en inspirer pour faire autre chose.
 

Pièces jointes

  • combo1.xls
    27 KB · Affichages: 256
  • combo1.xls
    27 KB · Affichages: 236
  • combo1.xls
    27 KB · Affichages: 251

helene51

XLDnaute Junior
Re : Filtre suite à choix dans une combobox

Bonjour le forum, Said, Davidc57,

Ma demande concerne bien un filtre suite à une combo.
En fait je souhaite, suite au choix fait dans ma premiere combobox, filtrer mon tableau par rapport à cela et ensuite, afficher le contenu de la colonne C comme choix de ma combobox2.

Est-ce plus clair ?

Merci pour votre aide.
 

helene51

XLDnaute Junior
Re : Filtre suite à choix dans une combobox

Re,

J'ai trouvé une autre solution pour effectuer mon tri grâce à ce code :
Code:
Private Sub CommandButton3_Click()
Dim i As Byte, k As Byte
Dim temp As String
Dim cel As Range

Range("A2:A" & ActiveSheet.UsedRange.Rows.Count).EntireRow.Hidden = False
If ComboBox1.Value = "" Then
    Range("A2:A" & ActiveSheet.UsedRange.Rows.Count).EntireRow.Hidden = False
Else
    For Each cel In Range("A2:A" & ActiveSheet.UsedRange.Rows.Count)
        If cel.Value <> ComboBox1.Value Then cel.EntireRow.Hidden = True
    Next cel
End If

'Charger mon combobox2
Sheets("Donnees brutes").Select
For j = 2 To Range("c65536").End(xlUp).Row
    ComboBox2 = Range("c" & j)
    If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Range("c" & j)
    With ComboBox2
    For i = 0 To .ListCount - 1
        For k = 0 To .ListCount - 1
            If .List(i) < .List(k) Then
            temp = .List(i)
            .List(i) = .List(k)
            .List(k) = temp
            End If
        Next k
    Next i
    End With
Next j
End Sub

Cela fonctionne, mais le seul problème c'est que, après avoir affiché toutes les lignes correspondants à mon choix, le combobox2 ne se charge pas qu'avec les seules infos de ces lignes mais de celles de tout le tableau.
C'est comme si je n'avais rien fait ....

Y a-t-il une autre solution qui fonctionnerai ?
 

MuscatMimi

XLDnaute Accro
Re : Filtre suite à choix dans une combobox

Bonjour a tous

Essai avec ce fichier que j'ai crée avec l'aide de ce Forum
si ça peut te convenir
a toi de l'adapter a tes besoins
Cordialement
 

Pièces jointes

  • Nouveau Dossier compressé.zip
    30.4 KB · Affichages: 164
  • Nouveau Dossier compressé.zip
    30.4 KB · Affichages: 147
  • Nouveau Dossier compressé.zip
    30.4 KB · Affichages: 151

helene51

XLDnaute Junior
Re : Filtre suite à choix dans une combobox

Bonjour vaucluse immo,

Merci pour ton fichier, ça m'a donné de nouvelles idées pour la suite mais pour mon problème actuel ça ne colle pas forcement.

Ma demande ne doit pas être très clair et pour remédier à ce problème je joint un fichier pour exemple.
Ma première combobox fonctionne : elle affiche les lignes sans doublons.
Ma deuxième combobox pose problème : elle devrait afficher les possibilités données par le tri effectué grace à la combobox1. Or, ici, elle affiche toutes les possibilités du tableau (pas uniquement les cellules affichées, elle affiche même les masquées).

Si quelqu'un a une piste, je prends !
 

Pièces jointes

  • Analyse control.zip
    27.5 KB · Affichages: 122

woodfoot

XLDnaute Nouveau
Re : Filtre suite à choix dans une combobox

bonjour Vaucluse immo
bonjour le forum

ce fichier m'aiderait bien moi, mais quand je clique sur une ligne du tableau du formulaire, ca me renvoit cette erreur :
Range("A" & ListView1.SelectedItem.Index + 1).Hyperlinks(1).Follow

que faire ?

Je suppose que quand tu cliques sur le lignes, tu peux modifier les infos des textbox en bas, non ?

merci d'avance
 

woodfoot

XLDnaute Nouveau
Re : Filtre suite à choix dans une combobox

bon, je sais pas a quoi ca servait, mais je l'ai surprimé et ca marche...

par contre, pas possible de faire une double selection dans les combobox ?
Je choissi qq chose dans la combo box 1, puis dans la 2 et j'ai mon resultat...

Bon, désolé de squatter ce post.... mais je suis desespéré aussi !!
 

MuscatMimi

XLDnaute Accro
Re : Filtre suite à choix dans une combobox

Salut woodfoot

ben ,oui, pas trop top de squater
Tu aurait du créer un fil
pour ton erreur,va dans le code et met une " ' "devant la ligne

'Range("A" & ListView1.SelectedItem.Index + 1).Hyperlinks(1).Follow

dans le code de Usf

Ciaoooooo
 

bqtr

XLDnaute Accro
Re : Filtre suite à choix dans une combobox

Bonsoir,

Que veux tu avoir exactement dans ta combobox2 ?
Actuellement avec ton fichier mis en PJ à 14h29 tu as bien la liste des éléments de la colonne C en fonction du choix de la combobox1 et uniquement ceux visibles pas ceux masqués.

Es tu obligée de masquer et/ou afficher les lignes ? tu peux arriver au même résultat (l'alimentation des comboboxs) en laissant la feuille tel quelle.

Tu veux la combobox2 sans doublon ?

Pour Woodfoot, la ligne : Range("A" & ListView1.SelectedItem.Index + 1).Hyperlinks(1).Follow
indique que dans la colonne A de la feuille concernée il doit y avoir des liens hypertextes. Cette ligne de code lance le lien comme si tu clickais dessus.

A+
 
Dernière édition:

helene51

XLDnaute Junior
Re : Filtre suite à choix dans une combobox

Re,

Ca fonctionne parfaitement ! Merci beaucoup !

Une autre petite question : peut-on trier par ordre alphabetique les noms qui s'affichent dans la combobox2 ? Que faut-il ajouter dans le code suivant :
Code:
Private Sub ComboBox1_Change()
  If Fait = False Then Exit Sub 'pour éviter le passage lors de l'initialisation
  With Sheets("Donnees brutes")
    Application.ScreenUpdating = False
    .Range("A2:A" & Derligne).EntireRow.Hidden = False
    If ComboBox1.Value = "" Then
      .Range("A2:A" & ActiveSheet.UsedRange.Rows.Count).EntireRow.Hidden = False
    Else
      For Each Cel In .Range("A2:A" & Derligne)
        If Cel.Value <> ComboBox1.Value Then Cel.EntireRow.Hidden = True
      Next Cel
    End If
  'Charger mon combobox2
     Set Mondico = CreateObject("Scripting.Dictionary")
     For Each Cel In Range("C2:C" & Derligne)
    If Cel.Offset(0, -2) Like ComboBox1.Value Then
      If Not Mondico.Exists(Cel.Value) Then Mondico.Add Cel.Value, Cel.Value
    End If
  Next
  ComboBox2.List = Mondico.items
  ComboBox2.ListIndex = 0
  a = Mondico.RemoveAll
  End With
  Fait = True
  Application.ScreenUpdating = True
End Sub

Pour trier mon 1er combobox, j'ai le code suivant :
Code:
    With ComboBox1
      For i = 0 To .ListCount - 1
        For k = 0 To .ListCount - 1
          If .List(i) < .List(k) Then
            Temp = .List(i)
            .List(i) = .List(k)
            .List(k) = Temp
          End If
        Next k
      Next i
    End With
Je peux l'adapter pour trier mon combobox2 ?
 

Discussions similaires

Réponses
11
Affichages
304
Réponses
4
Affichages
218

Statistiques des forums

Discussions
312 338
Messages
2 087 403
Membres
103 536
dernier inscrit
komivi