Bonjour à tous,
Il n'existe pas de propriété ou méthode native pour faire cela Mais vous pouvez utiliser la propriété Selected de la zone de liste 1 pour y arriver.
Dans un formulaire mettez :
- Une zone de liste ListBox1 sa propriété MultiSelect doit-être sur Multi ou Extended.
- Une zone de liste ListBox2
- Une case à cocher CheckBox1
- Un bouton de commande CommandButton1
Coller ce code dans le module du formulaire, et faites un test.
Option Explicit
Private Sub CommandButton1_Click()
SelectIfPresent IIf(Me.CheckBox1.value = True, vbTextCompare, vbBinaryCompare)
End Sub
Private Sub UserForm_Activate()
ListBox1.List = Application.GetCustomListContents(4)
ListBox2.List = VBA.Array("Janvier", "Novembre")
End Sub
Sub SelectIfPresent(Optional ByVal TypeDeComparaison As VbCompareMethod = vbTextCompare)
If ListBox1.MultiSelect = 0 Then
MsgBox "ListBox1 doit avoir sa propriété MultiSelect définie à 1 ou 2 pour pouvoir sélectionner plusieurs éléments.", vbExclamation
Exit Sub
End If
' // Désélectionner tous les éléments dans ListBox1 avant de commencer
Dim indexItem As Long
For indexItem = 0 To ListBox1.ListCount - 1
ListBox1.Selected(indexItem) = False
Next indexItem
' // Parcourir tous les éléments de ListBox2
For indexItem = 0 To ListBox2.ListCount - 1
Dim itemList As String
itemList = ListBox2.List(indexItem)
' // Parcourir tous les éléments de ListBox1 pour la comparaison
Dim indexItemToBeSelected As Long
For indexItemToBeSelected = 0 To ListBox1.ListCount - 1
' // Effectuer la comparaison
If StrComp(itemList, ListBox1.List(indexItemToBeSelected), TypeDeComparaison) = 0 Then
' // Si les chaînes sont identiques, sélectionner l'élément dans ListBox1
ListBox1.Selected(indexItemToBeSelected) = True
' // Sortir de la boucle ListBox1 pour passer à l'élément suivant de ListBox2
Exit For
End If
Next indexItemToBeSelected
Next indexItem
End Sub
Voilà à tester et j'attends le retour...