Accueil
Récupération d'une sélection multiple
ListBox dans le tableur
Choix multiples dans ListBox
Transfert multi-sélection d'une ListBox dans une
autre ListBox
Choix multiples dans une ListBox
Choix multiple en cascade dans ListBox & Extraction
ListBox Multi-sélection 2 niveaux
ListBox multi-sélection 3 niveaux
Filtre de plusieurs régions
Choix successifs dans un comboBox
Transfert listbox multi-sélection & multi-colonnes
dans une autre listbox
Affiche/Cache les feuilles du classeur sélectionnées
Groupe options multiples
Formulaire saisie avec ListBox Multi-sélection
La propriété MultiSelect = fmMultiSelectMulti
permet les choix multiples. MultiSelect = fmMultiSelectSingle
n'autorise que la sélection simple
Selection
Multiple
Selection Multiple
Limité
Selection Multiple
Minimum

Private Sub UserForm_Initialize()
Me.Listbox1.List = Range("a1:a" & [a65000].End(xlUp).Row).Value
Me.Listbox1.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub CommandButton1_Click()
For i = 0 To Me.Listbox1.ListCount - 1
If Me.Listbox1.Selected(i) = True Then temp =
temp & Me.Listbox1.List(i) & " "
Next i
MsgBox temp
End Sub
Récupération d'une
sélection multiple d'une ListBox dans le tableur
Recup
Multi Sélection
Suppression Multi
Sélection

Private Sub UserForm_Initialize()
Set f = Sheets("bd")
Set plg = f.Range("a2:b" & f.[a65000].End(xlUp).Row)
Me.ListBox1.List = plg.Value
Me.ListBox1.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub CommandButton1_Click()
Sheets("recup").[A2:B1000].ClearContents
ligne = 2
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then
Sheets("recup").Cells(ligne,
1) = Me.ListBox1.List(i)
Sheets("recup").Cells(ligne,
2) = Me.ListBox1.List(i, 1)
ligne = ligne + 1
End If
Next i
End Sub
Filtre sur une ListBox longue
Filtre
sur Sélection Listbox longue

Option Compare Text
Dim d
Private Sub UserForm_Initialize()
Set d = CreateObject("scripting.dictionary")
For Each c In [villes]
d(c.Value) = False
Next c
Me.ListBox1.MultiSelect = fmMultiSelectMulti
Me.ListBox1.List = [villes].Value
End Sub
Private Sub listbox1_change()
n = 0
For i = 0 To Me.ListBox1.ListCount - 1
clé = Me.ListBox1.List(i)
v = Me.ListBox1.Selected(i)
d(clé) = v
Next i
For Each c In d.keys
If d(c) Then n = n + 1
Next c
Me.TextBox1 = n
End Sub
Private Sub TextBox3_Change()
Me.ListBox1.Clear
If Me.TextBox3 <> "" Then
n = 0
For Each c In d.keys
If Left(c, 1) = Me.TextBox3 Then
Me.ListBox1.AddItem c
Me.ListBox1.Selected(n)
= d(c)
n = n + 1
End If
Next c
Else
n = 0
For Each c In d.keys
Me.ListBox1.AddItem c
Me.ListBox1.Selected(n) = d(c)
n = n + 1
Next c
End If
End Sub
Private Sub b_tout_Click()
Me.TextBox3 = ""
End Sub
Sélections multiples et sauvegarde
On sauvegarde les sélections.
Multi
Sélection sauvegarde

Option Compare Text
Dim f, Tous(), d
Private Sub UserForm_Initialize()
Set f = Sheets("villes")
Me.Source2.MultiSelect = fmMultiSelectMulti
If f.[f2] = "" Then
Me.Source2.List = [villes].Value
Else
Set Rng = f.Range("e2:e"
& f.[e65000].End(xlUp).Row)
Rng.Sort key1:=f.[e2], Order1:=xlAscending,
Header:=xlNo
[Source2].List = f.Range("e2:e"
& f.[e65000].End(xlUp).Row).Value
Set Rng = f.Range("f2:f"
& f.[f65000].End(xlUp).Row)
Rng.Sort key1:=f.[f2], Order1:=xlAscending,
Header:=xlNo
[Dest].List = f.Range("f2:f"
& f.[f65000].End(xlUp).Row).Value
End If
Set d = CreateObject("scripting.dictionary")
For i = 0 To Me.Source2.ListCount - 1
d(Me.Source2.List(i)) = False
Next i
Me.TextBox1 = Me.Dest.ListCount
End Sub
Private Sub b_prend2_Click()
b_tout_Click
If Me.Source2.ListIndex <> -1 And Me.Source2.ListCount
> 0 Then
For i = 0 To Me.Source2.ListCount - 1
If Me.Source2.Selected(i) = True Then
Me.Dest.AddItem Me.Source2.List(i)
clé = Me.Source2.List(i)
d.Remove clé
End If
Next i
For i = Me.Source2.ListCount - 1 To 0 Step -1
If Me.Source2.Selected(i) = True Then
Me.Source2.RemoveItem
i
End If
Next i
End If
Me.TextBox1 = Me.Dest.ListCount
End Sub
Private Sub B_enlève_Click()
If Me.Dest.ListCount > 0 And Me.Dest.ListIndex <>
-1 Then
Me.Source2.AddItem Me.Dest
Me.Dest.RemoveItem Me.Dest.ListIndex
clé = Dest
d(clé) = False
End If
Me.TextBox1 = Me.Dest.ListCount
End Sub
Private Sub Dest_Change()
For i = 0 To Me.Source2.ListCount - 1
clé = Me.Source2.List(i)
v = Me.Source2.Selected(i)
d(clé) = v
Next i
End Sub
Private Sub Source2_change()
For i = 0 To Me.Source2.ListCount - 1
clé = Me.Source2.List(i)
v = Me.Source2.Selected(i)
d(clé) = v
Next i
End Sub
Sélections multiples dans
une ListBox
FormSelectMultiples

Dim f
Private Sub UserForm_Initialize()
Set f = Sheets("stype")
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range(f.[A2], f.[A65000].End(xlUp))
If c.Value <> "" Then MonDico.Item(c.Value)
= c.Value
Next c
Me.ListBoxType.List = MonDico.items
End Sub
Private Sub ListBoxType_Change()
Me.ListBoxSType.Clear
For i = 0 To Me.ListBoxType.ListCount - 1
If Me.ListBoxType.Selected(i) = True Then
For Each c In Range(f.[A2], f.[A65000].End(xlUp))
If c = Me.ListBoxType.List(i)
Then Me.ListBoxSType.AddItem c.Offset(, 1)
Next c
End If
Next i
End Sub
Form
Select Multiples Activités Risques
Form Select Multiples
Activités Risques 2

Choix multiples dans une
ListBox
DVChoixRégions
DVChoixRégionOption
DV
Choix Multiples Form

Private Sub UserForm_Initialize()
ListBox1.MultiSelect = fmMultiSelectMulti
ListBox1.List = Sheets("BD").Range("A2:A28").Value
a = Split(ActiveCell, " ")
If UBound(a) >= 0 Then
For i = 0 To Me.ListBox1.ListCount - 1
If Not IsError(Application.Match(Me.ListBox1.List(i),
a, 0)) Then Me.ListBox1.Selected(i) = True
Next i
End If
End Sub
Private Sub Ok_Click()
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then temp
= temp & Me.ListBox1.List(i) & " "
Next i
ActiveCell = Trim(temp)
Unload Me
End Sub
Avec des cases à cocher
DV
Choix Remarques ListBox Options

Filtre régions dans
une ListBox
On filtre pour une ou plusieurs régions choisies
dans un ListBox.
FiltreRégions
FiltreRégionsFiltreElaboré

Private Sub Filtrer_Click()
Set d = CreateObject("scripting.dictionary")
Set f = Sheets("national")
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then d(Me.ListBox1.List(i))
= ""
Next i
If d.Count > 0 Then
For Each c In f.Range("F9 :F" &
f.[F65000].End(xlUp).Row)
c.EntireRow.Hidden = IsError(Application.Match(c,
d.keys, 0))
Next c
End If
Unload Me
End Sub
Private Sub UserForm_Initialize()
ListBox1.MultiSelect = fmMultiSelectMulti
ListBox1.List = Sheets("Régions").Range("F2:F28").Value
End Sub
Pour limiter le choix à 4 régions
Private Sub ListBox1_Change()
temp = Me.ListBox1.ListIndex
n = 0
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then n = n +
1
Next i
If n > 4 Then Me.ListBox1.Selected(temp) = False
End Sub
Choix multiples dans une ListeBox
Récupération dans un tableau
FormSelectMultiples

Dim f, a(1 To 20, 1 To 2)
Sub UserForm_Initialize()
Set f = Sheets("bd")
Me.ListBox1.List = Range(f.[A2], f.[b65000].End(xlUp)).Value
Me.ListBox1.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub ListBox1_Change()
ligne = 0
For k = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(k) = True Then
ligne = ligne + 1
a(ligne, 1) = Me.ListBox1.List(k,
0)
a(ligne, 2) = Me.ListBox1.List(k,
1)
End If
Next k
End Sub
Private Sub cmdValider_Click()
f.Cells(2, "e").Resize(20, 2).ClearContents
f.Cells(2, "e").Resize(UBound(a), 2) = a
Unload Me
End Sub
On récupère le résultat des choix
d'une ListBox dans une cellule.
FormSelectMult

Dim f, mondico
Sub UserForm_Initialize()
Set f = Sheets("bd")
Set mondico = CreateObject("Scripting.Dictionary")
Me.choix.List = Range(f.[A2], f.[b65000].End(xlUp)).Value
Me.choix.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub Choix_Change()
mondico.RemoveAll
Me.RésultatListBox1.Clear
For k = 0 To Me.choix.ListCount - 1
If Me.choix.Selected(k) = True Then
temp = Me.choix.List(k, 0) &
" " & Me.choix.List(k, 1)
mondico(temp) = temp
End If
Next k
Me.RésultatListBox1.List = mondico.items
End Sub
Private Sub cmdValider_Click()
[E1] = Join(mondico.items, Chr(10))
Unload Me
End Sub
Choix de plusieurs fichiers dans une ListBox

Private Sub UserForm_Initialize()
ChDir ActiveWorkbook.Path
Répertoire = CurDir() ' nom du répertoire
courant
masque = Répertoire + "\*.xls"
nf = Dir(masque) ' 1er classeur du répertoire
Do While nf <> ""
Me.Choix.AddItem nf
nf = Dir() ' classeur suivant
Loop
End Sub
Private Sub B_multiple_Click()
Me.Choix.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub B_simple_Click()
Me.Choix.MultiSelect = fmMultiSelectSingle
End Sub
Private Sub B_imprime_Click()
For i = 0 To Me.Choix.ListCount - 1
If Me.Choix.Selected(i) = True Then
nf = Me.Choix.List(i)
Application.DisplayAlerts = False
Workbooks.Open FileName:=nf
ActiveSheet.PrintPreview
ActiveWorkbook.Close
End If
Next
End Sub
Choix en cascade
ListBox multi-sélection 2 niveaux
ListBox
Cascade 2 niveaux
ListBox
Cascade 2 niveaux mémorisation

Choix en cascade ListBox multi-sélection
3 niveaux
La version mémorisation
permet de rappeler une interrogation précédente et de la
modifier.
ListBox
Cascade 3 niveaux
ListBox Cascade
3 niveaux mémorisation
ListBox
Cascade 3 niveaux mémorisation 2

Dim f, dchoisis1
Private Sub UserForm_Initialize()
Set f = Sheets("BD")
Set d = CreateObject("Scripting.Dictionary")
For Each c In Range(f.[A2], f.[A65000].End(xlUp))
d(c.Value) = ""
Next c
Me.ListBox1.List = d.keys
Me.ListBox1.MultiSelect = fmMultiSelectMulti
Me.ListBox2.MultiSelect = fmMultiSelectMulti
Me.ListBox3.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub ListBox1_Change()
Me.ListBox3.Clear
Set dchoisis1 = CreateObject("Scripting.Dictionary")
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) Then dchoisis1(Me.ListBox1.List(i,
0)) = ""
Next i
Set d = CreateObject("Scripting.Dictionary")
For Each c In Range(f.[A2], f.[A65000].End(xlUp))
If dchoisis1.exists(c.Value) Then d(c.Offset(,
1).Value) = ""
Next c
If d.Count > 0 Then Me.ListBox2.List = d.keys Else Me.ListBox2.Clear
End Sub
Private Sub ListBox2_Change()
Set dchoisis2 = CreateObject("Scripting.Dictionary")
For i = 0 To Me.ListBox2.ListCount - 1
If Me.ListBox2.Selected(i) Then dchoisis2(Me.ListBox2.List(i,
0)) = ""
Next i
Set d = CreateObject("Scripting.Dictionary")
For Each c In Range(f.[A2], f.[A65000].End(xlUp))
If dchoisis1.exists(c.Value) And dchoisis2.exists(c.Offset(,
1).Value) Then d(c.Offset(, 2).Value) = ""
Next c
If d.Count > 0 Then Me.ListBox3.List = d.keys Else Me.ListBox3.Clear
End Sub
Recherche multiple continents/pays/villes
Recherche
multiple continents Pays villes
Sélection multiple ListBox
en cascade & extraction
Extrait d'une BD les lignes qui correspondent à
la sélection multiple 3 niveaux.
Recherche
Choix Multiple

Autre exemple
ListBox
Cascade 3 niveaux

Filtre intersection d'ensembles
Filtre
intersection d'ensembles

Choix multiples dans un
combobox
FormChoixSuccessifsCombo
Dim choix
Dim témoin As Boolean
Private Sub ComboBox1_Click()
p = InStr(choix, Me.ComboBox1)
If p = 0 Then '-- ajout
If choix = "" Then choix = Me.ComboBox1
Else choix = choix & ":" & Me.ComboBox1
Me.ComboBox1 = choix
Else ' suppression s'il est déjà choisi
If Not témoin Then
a = Split(choix, ":")
témoin = (UBound(a) - LBound(a)
= 1)
choix = Left(choix, p - 1) & Mid(choix,
p + Len(Me.ComboBox1) + 1)
If Right(choix, 1) = ":"
Then choix = Left(choix, Len(choix) - 1)
Me.ComboBox1 = choix
Else
témoin = False
End If
End If
End Sub
Transfert listbox multi-colonnes
& multi-sélection dans une autre listebox
Transfert
multi colonnes et multisélection

Dim f
Private Sub UserForm_Initialize()
Set f = Sheets("feuil1")
Me.Source.List = f.Range("A2:B" & f.[A65000].End(xlUp).Row).Value
Me.Source.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub b_prend_Click()
If Me.Source.ListIndex <> -1 And Me.Source.ListCount
> 0 Then
For i = 0 To Me.Source.ListCount - 1
If Me.Source.Selected(i) = True
Then
Me.Dest.AddItem
Me.Source.List(i)
pos = Me.Dest.ListCount
- 1
Me.Dest.List(pos,
1) = Me.Source.List(i, 1)
End If
Next i
End Sub
Transfert Multi-sélection et Multi-colonnes
dans ListBox
Transfert
multi colonnes et multisélection

Dim f
Private Sub UserForm_Initialize()
Set f = Sheets("feuil1")
Me.Source.List = f.Range("A2:B" & f.[A65000].End(xlUp).Row).Value
Me.Source.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub b_prend_Click()
If Me.Source.ListIndex <> -1 And Me.Source.ListCount
> 0 Then
For i = 0 To Me.Source.ListCount - 1
If Me.Source.Selected(i) = True
Then
Me.Dest.AddItem
Me.Source.List(i)
pos = Me.Dest.ListCount
- 1
Me.Dest.List(pos,
1) = Me.Source.List(i, 1)
End If
Next i
For i = Me.Source.ListCount - 1 To 0 Step
-1
If Me.Source.Selected(i)
= True Then Me.Source.RemoveItem i
Next i
End If
End Sub
Private Sub B_enlève_Click()
If Me.Dest.ListCount > 0 And Me.Dest.ListIndex <>
-1 Then
Me.Source.AddItem Me.Dest
pos = Me.Source.ListCount - 1
Me.Source.List(pos, 1) = Me.Dest.Column(1)
Me.Dest.RemoveItem Me.Dest.ListIndex
End If
End Sub
Autre exemple
Sur cet exemple:
-On peut ajouter des items
-Déplacer un item
Transfert
multi colonnes et multisélection
Transfert
multi colonnes et multisélection 2
Transfert multi colonnes
et multisélection 6 colonnes

Dim f
Private Sub UserForm_Initialize()
Set f = Sheets("feuil1")
Me.Source.List = f.Range("A2:B" & f.[A65000].End(xlUp).Row).Value
Me.Source.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub b_prend_Click()
If Me.Source.ListIndex <> -1 And Me.Source.ListCount
> 0 Then
For i = 0 To Me.Source.ListCount - 1
If Me.Source.Selected(i) = True Then
Me.Dest.AddItem
Me.Source.List(i)
pos = Me.Dest.ListCount
- 1
Me.Dest.List(pos,
1) = Me.Source.List(i, 1)
End If
Next i
For i = Me.Source.ListCount - 1 To 0 Step -1
If Me.Source.Selected(i) = True
Then Me.Source.RemoveItem i
Next i
End If
End Sub
Private Sub B_enlève_Click()
If Me.Dest.ListCount > 0 And Me.Dest.ListIndex <>
-1 Then
Me.Source.AddItem Me.Dest
pos = Me.Source.ListCount - 1
Me.Source.List(pos, 1) = Me.Dest.Column(1)
Me.Dest.RemoveItem Me.Dest.ListIndex
End If
End Sub
Private Sub B_ajout_Click()
Me.Dest.AddItem
pos = Me.Dest.ListCount - 1
Me.Dest.List(pos, 0) = Me.TextBox1
Me.Dest.List(pos, 1) = Me.TextBox2
End Sub
Private Sub B_monte_Click()
If Me.Dest.ListIndex <> -1 And Me.Dest.ListIndex >
0 Then
element = Me.Dest.List(Dest.ListIndex, 0)
element2 = Me.Dest.List(Dest.ListIndex,
1)
p = Me.Dest.ListIndex
Me.Dest.AddItem element, p - 1
Me.Dest.List(p - 1, 1) = element2
Me.Dest.RemoveItem Me.Dest.ListIndex
Me.Dest.ListIndex = p - 1
End If
End Sub
Private Sub B_descend_Click()
If Me.Dest.ListIndex <> -1 And Me.Dest.ListIndex
< Me.Dest.ListCount - 1 Then
element = Me.Dest.List(Dest.ListIndex,
0)
element2 = Me.Dest.List(Dest.ListIndex,
1)
p = Me.Dest.ListIndex
Me.Dest.AddItem element, p + 2
Me.Dest.List(p + 2, 1) = element2
Me.Dest.RemoveItem Me.Dest.ListIndex
Me.Dest.ListIndex = p + 1
End If
End Sub
Private Sub B_transfert_Click()
Sheets("feuil2").[A2].Resize(Me.Dest.ListCount,
2) = Me.Dest.List
End Sub
Autre exemple
Lors d'un ajout de titre, l'opérateur choisit successivement
dans un ComboBox les différents acteurs d'une liste.
Il peut ajouter dynamiquement un nouvel acteur en frappant ,XXXXXX. Celui
ci est ajouté à la liste des acteurs.
AjoutDynamiqueActeur
Form Films Saisie
Dim f, choix, témoin As Boolean
Private Sub UserForm_Initialize()
Set f = Sheets("bd")
Me.ComboBox1.List = Range("acteurs").Value
Me.ListBox2.List = Range("nature").Value
Me.Listbox3.List = Range("nationalité").Value
End Sub
Private Sub ComboBox1_Click()
p = InStr(choix, Me.ComboBox1)
If p = 0 Then '-- ajout
If choix = "" Then choix = Me.ComboBox1
Else choix = choix & "," & Me.ComboBox1
Me.ComboBox1 = choix
Else ' suppression s'il est déjà
choisi
If Not témoin Then
a = Split(choix,
":")
témoin =
(UBound(a) - LBound(a) = 1)
choix = Left(choix,
p - 1) & Mid(choix, p + Len(Me.ComboBox1) + 1)
If Right(choix,
1) = "," Then choix = Left(choix, Len(choix) - 1)
Me.ComboBox1 = choix
Else
témoin = False
End If
End If
End Sub
Private Sub B_valid_Click()
If Me.TextBox1 = "" Then
MsgBox "saisir un titre!"
Me.TextBox1.SetFocus
Exit Sub
End If
ligneEnreg = f.[A65000].End(xlUp).Row + 1
For i = 0 To Me.ListBox2.ListCount - 1
If Me.ListBox2.Selected(i) = True Then temp1
= temp1 & Me.ListBox2.List(i) & ","
Next i
If Len(temp1) > 1 Then temp1 = Left(temp1, Len(temp1) -
1)
For i = 0 To Me.Listbox3.ListCount - 1
If Me.Listbox3.Selected(i) = True Then temp2
= temp2 & Me.Listbox3.List(i) & ","
Next i
If Len(temp2) > 1 Then temp2 = Left(temp2, Len(temp2) -
1)
'-- transfert bd
Cells(ligneEnreg, "a") = Me.TextBox1
Cells(ligneEnreg, "b") = Me.ComboBox1
a = Split(Me.ComboBox1, ",")
For Each c In a
p = Application.Match(c, [acteurs], 0)
If IsError(p) Then
[acteurs].End(xlDown).Offset(1) =
c
Sheets("données").[acteurs].Sort
key1:=Sheets("données").Range("acteurs")
End If
Next c
Cells(ligneEnreg, "c") = temp1
Cells(ligneEnreg, "d") = temp2
Cells(ligneEnreg, "e") = Me.TextBox2
f.[A2].Sort key1:=Range("a2"), Order1:=xlAscending,
Header:=xlYes
Unload Me
End Sub
Affiche/Cache feuille
Affiche/Cache
feuille ListBox
Affiche/Cache
feuille ComboBox

Masque/Affiche les feuilles choisies.
Dim témoin
Private Sub UserForm_Initialize()
Me.ListBox1.Clear
For i = 2 To ActiveWorkbook.Sheets.Count
Me.ListBox1.AddItem Sheets(i).Name
Me.ListBox1.Selected(i - 2) = Sheets(i).Visible
Next i
témoin = True
End Sub
Private Sub ListBox1_change()
If témoin Then
For i = 0 To Me.ListBox1.ListCount - 1
f = ListBox1.List(i)
Sheets(f).Visible = Me.ListBox1.Selected(i)
Next i
End If
End Sub
Autre version
Sommaire
Onglets Affiche/Cache

Dim témoin
Private Sub Worksheet_Activate()
témoin = True
ListBox1.Clear
For s = 2 To Sheets.Count
ListBox1.AddItem Sheets(s).Name
ListBox1.Selected(s - 2) = Sheets(s).Visible
Next s
témoin = False
End Sub
Private Sub ListBox1_change()
If Not témoin Then
For i = 0 To Me.ListBox1.ListCount - 1
temp = ListBox1.List(i)
Sheets(temp).Visible = Me.ListBox1.Selected(i)
Next i
End If
End Sub
Groupe options multiples
dynamiques avec ListBox
Permet de choisir une ou plusieurs options.
Groupe
Options Multiples
Groupe Options
Multiples 2

Option Compare Text
Dim TblBD()
Private Sub UserForm_Initialize()
TblBD = [client].Value ' pour rapidité
TriMultiCol TblBD, 1, UBound(TblBD), 3
Set d = CreateObject("scripting.dictionary")
For i = 1 To [client].Rows.Count
tmp = TblBD(i, 3): d(tmp) = ""
Next i
Me.OptionsGroupe.MultiSelect = fmMultiSelectMulti
Me.OptionsGroupe.ListStyle = 1 'frmliststyleoption
Tbl = d.keys
Tri Tbl, LBound(Tbl), UBound(Tbl)
Me.OptionsGroupe.List = Tbl
Me.ListBox1.ColumnCount = [client].Columns.Count + 1
Me.ListBox1.ColumnWidths = "60;50;30;50;100;70;70;50"
Me.ListBox1.List = TblBD
End Sub
Private Sub OptionsGroupe_change()
Set dchoisis1 = CreateObject("Scripting.Dictionary")
For i = 0 To Me.OptionsGroupe.ListCount - 1
If Me.OptionsGroupe.Selected(i) Then dchoisis1(Me.OptionsGroupe.List(i,
0)) = ""
Next i
Dim Tbl2(): n = 0: Ncol = UBound(TblBD, 2)
For i = 1 To UBound(TblBD)
tmp = TblBD(i, 3)
If dchoisis1.exists(tmp) Then
n = n + 1: ReDim Preserve Tbl2(1 To
Ncol, 1 To n)
For k = 1 To Ncol: Tbl2(k, n) = TblBD(i,
k): Next k
End If
Next i
If n > 0 Then Me.ListBox1.Column = Tbl2 Else Me.ListBox1.Clear
End Sub
Groupe
Options Multiples 3
Sur cette version, il y a 2 à 3 colonnes de recherche
paramétrées.
Groupe
Options Multiples 4 critères
Groupe
Options Multiples 4 critères bis
Groupe
Options Multiples 5 critères

Formulaire de saisie avec ListBox
multi-sélection
Form
Consultation Modification Ajout Trié

Enregistrement
'-- loisirs
temp = ""
For i = 0 To Me.Loisirs.ListCount - 1
If Me.Loisirs.Selected(i) = True Then temp = temp
& Me.Loisirs.List(i) & ";"
Next i
f.Cells(ligneEnreg, 8) = temp
Restitution
'--- loisirs
temp = f.Cells(ligneEnreg, 8)
a = Split(temp, ";")
For j = 0 To Me.Loisirs.ListCount - 1: Me.Loisirs.Selected(j)
= False: Next j
If UBound(a) >= 0 Then
For j = 0 To Me.Loisirs.ListCount - 1
If Not IsError(Application.Match(Me.Loisirs.List(j),
a, 0)) Then
Me.Loisirs.Selected(j)
= True
Else
Me.Loisirs.Selected(j)
= False
End If
Next j
End If
|