Alimenter Combobox avec une condition

g.mir87

XLDnaute Nouveau
Bonjour à tous,

J'aurais besoin de vos lumières pour une alimentation de combobox avec condition.
Pour faire simple je dispose dans une feuille de 2 listes (colonnes A & B).
J'aimerais que ma liste à intégrer dans la combobox soit les valeurs de la colonne qui répondent à un critère donné en colonne B (les critères sont "OUI" & "NON").
Concrètement, si en B1 la valeur est "OUI", alors A1 est à ajouter dans la combobox. Par contre si la valeur est "NON", A2 n'est pas ajouter.
J'ai réussi à faire ce tri, mais le problème est qu'à chaque fois que je clique sur ma combobox, la liste double.

Peut-être faut-il revoir le code initial d'alimentation ou faire un refresh au lancement.
J'ai essayé toutes les possibilités (que je connais), je n'ai pas réussi à m'en sortir.

Vous voyez comment solutionner cela?

Merci d'avance

Bonne journée

Guillaume
 

Pièces jointes

  • Test.xlsm
    22.9 KB · Affichages: 122
  • Test.xlsm
    22.9 KB · Affichages: 120
  • Test.xlsm
    22.9 KB · Affichages: 149

john

XLDnaute Impliqué
Re : Alimenter Combobox avec une condition

Bonjour,

Tu dois mettre un .clear avant de refaire un .additem !!

Private Sub ComboBox1_DropButtonClick()

Dim Plage As Range

With Sheets("Feuil1")
Set Plage = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
End With
ComboBox1.Clear 'ici le .clear
For Each cell In Plage
If cell = "OUI" Then
ComboBox1.AddItem cell.Offset(, -1)
End If
Next

End Sub

Bonne journée.

John
 

g.mir87

XLDnaute Nouveau
Re : Alimenter Combobox avec une condition

Merci à tous les 2 pour vos réponses.
Le problème c'est qu'avec cette solution je ne peux pas garder le choix de ma combobox.
Si je clique sur l'une des valeurs dans la combobox, elle disparait immédiatement.
Savez-vous comment laisser afficher la valeur. Il faudrait faire un clear uniquement au clique sur la combobox non?
 

john

XLDnaute Impliqué
Re : Alimenter Combobox avec une condition

Tu peux aussi faire que si il y a un changement sur la feuille en faisant comme ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range

With Sheets("Feuil1")
Set Plage = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
End With
ComboBox1.Clear
For Each cell In Plage
If cell = "OUI" Then
ComboBox1.AddItem cell.Offset(, -1)
End If
Next
End Sub

Et non sur le clic sur la combobox !!!
 

Lone-wolf

XLDnaute Barbatruc
Bonjour john, vieillebiere


Tu peux aussi faire que si il y a un changement sur la feuille en faisant comme ceci :
Private Sub Worksheet_Change(ByVal Target As Range)

@john: non, surtout pas. Est-ce que tu as déjà essaié? Fait un test pour voir ce que ça donne et tu me redis. Suite au conseil de DRANREB, afin de
décharger la combo, je crois; il faut créer une private sub avec le code montré, et ensuite

Private Sub ComboBox1_Change()
If Combobox1 <> "" Then Call le nom de la macro.
End Sub

Et ce n'est pas Range("B65536"), mais Range("b" & Rows.Count).End(xlup).Row.
Mettre combobox1 = "" dans Userform_Activate et à la fin de la macro du bouton(Valider par ex.) si il y en a un.

VB:
Private Sub Charger()
Dim Plage As Range,  cel As Range, derlig&

With Sheets("Feuil1")
derlig = .Range("b & Rows.Count").End(xlUp).Row
Set Plage = .Range("b1:b" & derlig)
End With

For Each cel In Plage
If cel = "OUI" Then
ComboBox1.AddItem cel
End If
Next cel
End Sub



Private Sub ComboBox1_Change()
If Combobox1 <> "" Then Call Charger
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

@Lone-wolf
Bonjour john, vieillebiere
@john: non, surtout pas. Est-ce que tu as déjà essaié?
Fait un test pour voir ce que ça donne et tu me redis.
Suite au conseil de DRANREB, afin de décharger la combo, je crois,
il faut créer une private sub avec le code montré...

La dernière fois que @john est passé dans ce fil c'était en 2012...;)
Quand à son dernier passage sur XLD
"john a été vu(e) dernièrement : 25 Novembre 2017"

@vieilleribiere
La coutume c'est de créer sa propre discussion pour créér sa propre question
Pas de la poster dans un fil qui dormait sous la poussière depuis 6 ans ;)
 

Lone-wolf

XLDnaute Barbatruc
Bonjour à tous :)

Je n'avais pas vu le fichier et que la combo était sur la feuille; de plus je ne sais pas si vieilleribière fait encore de la mousse :D (pas de nouvelles).

VB:
Private Sub ComboBox1_DropButtonClick()
Call affiche
End Sub

Private Sub affiche()
Dim derlig As Long, i As Long

    derlig = Cells(Rows.Count, 1).End(xlUp).Row
    ComboBox1.Clear
    For i = 1 To derlig
        If Cells(i, 2) = "OUI" Then _
            ComboBox1.AddItem Format(Cells(i, 1), "0.0000")
    Next

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 166
Messages
2 085 899
Membres
103 025
dernier inscrit
sr86