XL 2016 Savoir si une valeur précise est dans une listbox

Mél90

XLDnaute Nouveau
Bonjour Le Forum,


Voilà je possède un UserForm contenant deux listbox multiselect d'une seule colonne chacune, une combobox, et un bouton.
Ma premier listbox contient des valeurs. Quand je sélectionne des items, et que je clique sur mon bouton, ces items se basculent dans la deuxième listbox.
Selon le choix dans la combobox, des items déjà dans la deuxième listbox peuvent réapparaître dans la première.
Du coup, j'aimerais avoir un code bloquant : quand je clique sur mon bouton, si l'élément ou les éléments sélectionnés dans la première listbox figurent déjà dans la seconde, alors msgbox : l'élément ou les élements suivant(s) "son nom ou les noms" sont déjà présent dans la deuxième liste.
Mais il faut bien que le code bascule les autres éléments sélectionnés qui ne sont pas dans la 2ème listbox.

OU

Si la première solution parait compliquée, comment faire en sorte que les items déjà présent dans la 2ème listbox ne réapparaissent pas dans la première quand je change mon choix dans ma combobox ?

Ma première listbox s'alimente comme ceci :

Code:
Dim Tab1() As Variant


With Sheets("TablesDéfinitives")
    Tab1 = .Range("C2:C" & .Range("C65536").End(xlUp).Row).Value
End With

Listbox1.List = Tab1


Merci d'avance pour votre aide !! :)
 

Theze

XLDnaute Occasionnel
Bonjour,

Une piste à adapter :
Code:
Private Sub UserForm_Initialize()
    Dim Tab1()
   
    With Worksheets("TablesDéfinitives"): Tab1 = .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp)).Value: End With
    ListBox1.List = Tab1
   
    With Worksheets("TablesDéfinitives"): Tab1 = .Range(.Cells(2, 4), .Cells(.Rows.Count, 4).End(xlUp)).Value: End With
    ListBox2.List = Tab1

End Sub

Private Sub CommandButton1_Click()

    Dim Plage As Range
    Dim Cel As Range
    Dim I As Integer
    Dim LstChaine As String

    With Worksheets("TablesDéfinitives"): Set Plage = .Range(.Cells(2, 4), .Cells(.Rows.Count, 4).End(xlUp)): End With
   
    With ListBox1
   
        For I = 0 To .ListCount - 1
       
            If .Selected(I) = True Then
           
                Set Cel = Plage.Find(.List(I), , xlValues, xlWhole)
               
                If Not Cel Is Nothing Then LstChaine = LstChaine & .List(I) & vbCrLf Else ListBox2.AddItem .List(I)
               
            End If
           
        Next I
       
    End With
   
    If LstChaine = "" Then Exit Sub
   
    MsgBox "Les éléments suivants n'ont pas été transférés car déjà présents dans la liste !" & vbCrLf & vbCrLf & LstChaine
   
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 134
Messages
2 116 608
Membres
112 804
dernier inscrit
padu