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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 .. @+
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))
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 .. @+
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+
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...
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...