Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Selection multpile par VBA

2 réponses
Avatar
Fabrice N.
Bonjour à tous,

C'est un sujet qui a été traité plusieurs fois, je sais... :oÞ
D'ailleurs, ça m'a beaucoup aidé à démarrer.

Par contre, sauf erreur de ma part, je ne trouve pas pour le dernier
point qui me coince.

Le principe est courant, j'ai une liste à choix multi dont les choix
proviennent d'une table.
Je veux que tous les choix sélectionnés soit rassemblés dans un champ
texte d'une table, séparés par des points virgules.
Pour cette partie, j'ai trouvé tout ce qu'il me faut, voici le code :

Private Sub ListeCrit_AfterUpdate()

Dim Crit As String

For Each i In ListeCrit.ItemsSelected
Crit = ListeCrit.ItemData(i) & ";" & Crit
Next i

If Not IsNull(Crit) And Crit <> "" Then Criteres = Left(Crit,
Len(Crit) - 1) Else Criteres = ""

End Sub


Mon soucis est que le but est que quand je réouvre mon formulaire sur
un enregistrement donné, les éléments déjà stockés dans le champ texte
soit automatiquement séléectionnés dans la liste...

Je pourrais passer en revu tous les items pour trouver les bons, mais
ça fait un traitement assez long surtout si la liste de choix augmente.
Existe-t-il par exemple une insctruction pour récupérer l'index d'un
item en fonction de son libellé ? En gros quel est l'index de l'item
dont le libellé est "Choix 1" par exemple.
Ou alors peut-on demander la selection d'un item avec sont libellé
plutôt que son index ?

Si vous avez une idée ou une piste, ça m'aiderai beaucoup...

Merci d'avance.

A+

2 réponses

Avatar
Fabien
Fabrice N. a écrit :
Bonjour à tous,

C'est un sujet qui a été traité plusieurs fois, je sais... :oÞ
D'ailleurs, ça m'a beaucoup aidé à démarrer.

Par contre, sauf erreur de ma part, je ne trouve pas pour le dernier
point qui me coince.

Le principe est courant, j'ai une liste à choix multi dont les choix
proviennent d'une table.
Je veux que tous les choix sélectionnés soit rassemblés dans un champ
texte d'une table, séparés par des points virgules.
Pour cette partie, j'ai trouvé tout ce qu'il me faut, voici le code :

Private Sub ListeCrit_AfterUpdate()

Dim Crit As String

For Each i In ListeCrit.ItemsSelected
Crit = ListeCrit.ItemData(i) & ";" & Crit
Next i

If Not IsNull(Crit) And Crit <> "" Then Criteres = Left(Crit,
Len(Crit) - 1) Else Criteres = ""

End Sub


Mon soucis est que le but est que quand je réouvre mon formulaire sur un
enregistrement donné, les éléments déjà stockés dans le champ texte soit
automatiquement séléectionnés dans la liste...

Je pourrais passer en revu tous les items pour trouver les bons, mais ça
fait un traitement assez long surtout si la liste de choix augmente.
Existe-t-il par exemple une insctruction pour récupérer l'index d'un
item en fonction de son libellé ? En gros quel est l'index de l'item
dont le libellé est "Choix 1" par exemple.
Ou alors peut-on demander la selection d'un item avec sont libellé
plutôt que son index ?

Si vous avez une idée ou une piste, ça m'aiderai beaucoup...

Merci d'avance.

A+





Salut,
le soucis c'est que ta liste peux changer en fonction du tri, des ajouts
dans la liste et des suppressions. Et donc l'ordre des éléments peut
être modifiés d'une fois sur l'autre.
A part un
Dim Mon_Tableau as Variant
Mon_Tableau=Split(me.leschoixprécedent,";")
For J=0 to ubound(Mon_tableau)-1
For I = 1 To Me.Liste0.ListCount - 1
If Not Liste0.Selected(I) Then
Liste0.Selected(I) = (Me.Liste0.Column(0, I) =
Mon_tableau(J))


End If
Next I
Next J
Je vois pas ..
@+
Avatar
Fabrice N.
Bonjour Fabien,

Salut,
le soucis c'est que ta liste peux changer en fonction du tri, des ajouts dans
la liste et des suppressions. Et donc l'ordre des éléments peut être modifiés
d'une fois sur l'autre.



Je sais bien, c'est pour ça que je stock les libellé et non les index
dans mon champ...

A part un
Dim Mon_Tableau as Variant
Mon_Tableau=Split(me.leschoixprécedent,";")
For J=0 to ubound(Mon_tableau)-1
For I = 1 To Me.Liste0.ListCount - 1
If Not Liste0.Selected(I) Then
Liste0.Selected(I) = (Me.Liste0.Column(0, I) =
Mon_tableau(J))


End If
Next I
Next J



C'est a ça que je pensais, mais ça multiplie les testes inutiles en
passant en revu systhématiquement toutes les valeurs. J'espère éviter
ça pour optimiser un peu.
Dans une liste de 20 choix dont 19 sont sélectionnés, ça fait 380
boucles, c'est domage...

Je vois pas ..


Tant pis, je vais rester sur mon idée de départ, qui correspond à ton
code...

@+


En tout cas, merci d'avoir pris le temps de répondre...

A+