Combo trié sans doublon et suppression item dans listbox

Bonjour

Dans le fichier joint, en sélectionnant dans le combo une valeur, en découle les lignes correspondantes issues de la feuille BD

Une fois une ligne sélectionnée, je peux la supprimer (Bouton)

Je ne parviens pas :

* A lister dans le combo les valeurs de la colonne B de la feuille BD (triée et sans doublon)

* Supprimer une ligne via le bouton en faisant également aussitôt disparaitre de la listbox l'item (puisque la donnée source n'existe plus), sans pour autant réinitialiser le combo (je voudrai que l'on reste sur la valeur du combo que l'on était en train de traiter avant la suppression) ... Une sorte de réinitialisation de la listbox mais pas du combo

Je reste à votre disposition si je n'ai pas été suffisamment claire

Merci

bonsoir,

cf pj

Dim f
Private Sub UserForm_Initialize()
  Set f = Sheets("BD")
  Set mondico = CreateObject("Scripting.Dictionary")
  a = f.Range("B2:B" & f.[A65000].End(xlUp).Row)   ' tableau a(n,1) pour rapidité
  For i = LBound(a) To UBound(a)
    If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
  Next i
  '--avec tri
  temp = mondico.keys
  Call Tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox1.List = temp
End Sub

Sub Tri(a, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  Do
     Do While a(g) < ref: g = g + 1: Loop
     Do While ref < a(d): d = d - 1: Loop
     If g <= d Then
        temp = a(g): a(g) = a(d): a(d) = temp
        g = g + 1: d = d - 1
     End If
   Loop While g <= d
   If g < droi Then Call Tri(a, g, droi)
   If gauc < d Then Call Tri(a, gauc, d)
End Sub

Un RemoveItem dans la Listbox n'est pas suffisant. Si c'est le seul élément, il doit également être supprimé du ComboxBox.

Ceuzin

bonsoir,

Il faut évidemment extraire ta liste d'éléments uniques et la trier pour la mettre dans ta Combo.

Une suggestion :

Sub Test()
    Dim n%
    With Worksheets("BD")
        .Range("M1:M1000").ClearContents
        .Range("B1:B1000").AdvancedFilter xlFilterCopy, , .Range("M1"), True
        n = .Range("M1").End(xlDown).Row
        .Range("M2:M" & n).Sort key1:=.Range("M2"), order1:=xlAscending, Header:=xlNo
        UserForm1.ComboBox1.List = .Range("M2:M" & n).Value
    End With
    UserForm1.Show
End Sub

Voilà qui t'affecte une liste triée d'éléments. Si tu veux qu'elle reste volatile, il suffira d'effacer la colonne M à la fin.

Pour test j'ai couplé l'affectation suivie de l'ouverture du Userform.

Mais tu peux la glisser dans ton Initialize (là la proc. Test la remplace) en en supprimant le Show final...

Pour ta 2e question, tu peux supprimer l'élément ListBox sans problème avec RemoveItem, c'est sans incidence sur le reste.

Cordialement.

Bonsoir

Merci à vous deux, c'est parfait.

Et en plus j'ai le choix entre 2 solutions différentes.

Bravo, vous êtes des chefs.

Merci encore

Rechercher des sujets similaires à "combo trie doublon suppression item listbox"