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

Coches pour sélectionner plusieurs catégories

9 réponses
Avatar
John
Bonjour,

Dans mon formulaire principal j'ai une liste de catégorie, lorsque j'en
sélectionne une le sous formulaire associé s'actualise, je voudrai changer
cette méthode pour pouvoir sélectionner une ou plusieurs catégories, par
exemple dans ma liste en sélectionner 1 ou + tout en actualisant le sous forms

Ou en cochant une ou plusieurs coches correspondant à chaqune d'entre elle.

Comment faire ?
Si vous avez un exemple à me proposer cela serait parfait.
--
John.

9 réponses

Avatar
Fabien
Bonjour,

Dans mon formulaire principal j'ai une liste de catégorie, lorsque j'en
sélectionne une le sous formulaire associé s'actualise, je voudrai changer
cette méthode pour pouvoir sélectionner une ou plusieurs catégories, par
exemple dans ma liste en sélectionner 1 ou + tout en actualisant le sous forms

Ou en cochant une ou plusieurs coches correspondant à chaqune d'entre elle.

Comment faire ?
Si vous avez un exemple à me proposer cela serait parfait.
Bonjour,

Peut-être qu'en plaçant une liste Modifiable avec choix multiple et en
analysant les choix dans l'évènement afterupdate de cette liste tu
obtiendrais le résultat souhaité.
Liste0.Listecount = nombre d'élément dans la liste Liste0
Liste0.selected(I) = Vrai si element I est selectionné
Liste0.column(0,I) = Valeur de la colonne 0 de la ligne I

Voilà
@+

Avatar
Gloops
Fabien a écrit, le 27/12/2007 13:44 :
Ou en cochant une ou plusieurs coches correspondant à chaqune d'e ntre
elle.

Comment faire ?
Si vous avez un exemple à me proposer cela serait parfait.
Bonjour,

Peut-être qu'en plaçant une liste Modifiable avec choix multi ple et en
analysant les choix dans l'évènement afterupdate de cette lis te tu
obtiendrais le résultat souhaité.
Liste0.Listecount = nombre d'élément dans la liste Liste0
Liste0.selected(I) = Vrai si element I est selectionné
Liste0.column(0,I) = Valeur de la colonne 0 de la ligne I

Voilà
@+


Bonjour,

J'ai l'impression que la difficulté, c'est surtout, quoi mettre dans les
champs de synchronisation (père et fils) du sous-formulaire.

Et j'ai l'impression que tel quel ça promet d'être coton. Un
sous-formulaire se synchronise sur UNE valeur d'un champ ou d'une
combinaison de champs. Si on veut en accepter plusieurs, il faut se
débrouiller pour que la concordance s'exprime par la valeur d'un des
champs, la requête du formulaire principal peut contenir une fonctio n
InStr ou quelque chose du style, si c'est supérieur à 0 c'est q ue la
valeur est comprise dans la sélection -et la synchronisation du
sous-formulaire se fera là-dessus, mais ça c'est juste un embry on
d'idée, il reste à le mettre en œuvre et donc à dé terminer comment.

Il n'est pas impossible qu'on ait à écrire une requête dyn amique "à la
volée" dans le code AfterUpdate de la liste, et l'associer alors au
formulaire, puis rafraîchir le formulaire. A dire, fastoche :)


Avatar
John
Merci Fabien,

Tu as un exemple concrét à me donner ?

Dans ma liste la colonne 1 est cachée, elle contient les codes suivants
A
B
C
D
E etc.....

Donc si je sélectionne A - B - C dans cette liste mon sous forms doit
s'actualiser en m'envoyant les enregistrements ayant le code A - B - C.

Encore merci.
--
John.



Bonjour,

Dans mon formulaire principal j'ai une liste de catégorie, lorsque j'en
sélectionne une le sous formulaire associé s'actualise, je voudrai changer
cette méthode pour pouvoir sélectionner une ou plusieurs catégories, par
exemple dans ma liste en sélectionner 1 ou + tout en actualisant le sous forms

Ou en cochant une ou plusieurs coches correspondant à chaqune d'entre elle.

Comment faire ?
Si vous avez un exemple à me proposer cela serait parfait.
Bonjour,

Peut-être qu'en plaçant une liste Modifiable avec choix multiple et en
analysant les choix dans l'évènement afterupdate de cette liste tu
obtiendrais le résultat souhaité.
Liste0.Listecount = nombre d'élément dans la liste Liste0
Liste0.selected(I) = Vrai si element I est selectionné
Liste0.column(0,I) = Valeur de la colonne 0 de la ligne I

Voilà
@+




Avatar
John
Bonjour Gloops,

Dans mon cas, mon formulaire principal ne comporte pas de source, en effet
il affiche des contôles de liste pour pouvoir indiquer au sous formulaire ce
que l'utilisateur cherche.

Le sous formulaire est basé sur une requête, ça fonctionne trés bien avec
une seule valeur choisie dans cette liste ou dans plusieurs liste associées
au champ correspondants, je pense que cela peut ce faire avec un choix
multiple.

@+
--
John.



Fabien a écrit, le 27/12/2007 13:44 :
Ou en cochant une ou plusieurs coches correspondant à chaqune d'entre
elle.

Comment faire ?
Si vous avez un exemple à me proposer cela serait parfait.
Bonjour,

Peut-être qu'en plaçant une liste Modifiable avec choix multiple et en
analysant les choix dans l'évènement afterupdate de cette liste tu
obtiendrais le résultat souhaité.
Liste0.Listecount = nombre d'élément dans la liste Liste0
Liste0.selected(I) = Vrai si element I est selectionné
Liste0.column(0,I) = Valeur de la colonne 0 de la ligne I

Voilà
@+


Bonjour,

J'ai l'impression que la difficulté, c'est surtout, quoi mettre dans les
champs de synchronisation (père et fils) du sous-formulaire.

Et j'ai l'impression que tel quel ça promet d'être coton. Un
sous-formulaire se synchronise sur UNE valeur d'un champ ou d'une
combinaison de champs. Si on veut en accepter plusieurs, il faut se
débrouiller pour que la concordance s'exprime par la valeur d'un des
champs, la requête du formulaire principal peut contenir une fonction
InStr ou quelque chose du style, si c'est supérieur à 0 c'est que la
valeur est comprise dans la sélection -et la synchronisation du
sous-formulaire se fera là-dessus, mais ça c'est juste un embryon
d'idée, il reste à le mettre en œuvre et donc à déterminer comment.

Il n'est pas impossible qu'on ait à écrire une requête dynamique "à la
volée" dans le code AfterUpdate de la liste, et l'associer alors au
formulaire, puis rafraîchir le formulaire. A dire, fastoche :)







Avatar
Fabien
Merci Fabien,

Tu as un exemple concrét à me donner ?

Dans ma liste la colonne 1 est cachée, elle contient les codes suivants
A
B
C
D
E etc.....

Donc si je sélectionne A - B - C dans cette liste mon sous forms doit
s'actualiser en m'envoyant les enregistrements ayant le code A - B - C.

Encore merci.
Si ton sous formulaire a comme source de données une requete il suffit

de modifier dynamiquement cette requete et de faire ensuite un requery
du sous formulaire.
Dans la clause where de ta requete tu peux utiliser la commande in
ex : where [monchamp] in ('A','B','C')

Dans ton cas lors de l'analyse des valeur selectionnées tu alimente une
chaine

Dim StrIn,StrSql as String
Dim I as Integer
For I=0 to Liste0.listcount
If Liste0.selected(I) then
StrIn = StrIn & "'" & Liste0.Column(0,I) & "','
End if
Next I
StrSQl = "Select * from [Table] where [MonChamp] in ( "&
left(StrIn,Len(StrIn)-1)) & ") ;"
CurrentDb.Querydefs("La requete source de ton sous formulaire").sql = StrSQl
Me.SousFormulaire.Requery

Voilà, Reste a adapter et tester ;-)
@+

Avatar
Fabien
Merci Fabien,

Tu as un exemple concrét à me donner ?

Dans ma liste la colonne 1 est cachée, elle contient les codes suivants A
B
C
D
E etc.....

Donc si je sélectionne A - B - C dans cette liste mon sous forms doit
s'actualiser en m'envoyant les enregistrements ayant le code A - B - C.

Encore merci.
Si ton sous formulaire a comme source de données une requete il suffit

de modifier dynamiquement cette requete et de faire ensuite un requery
du sous formulaire.
Dans la clause where de ta requete tu peux utiliser la commande in
ex : where [monchamp] in ('A','B','C')

Dans ton cas lors de l'analyse des valeur selectionnées tu alimente une
chaine

Dim StrIn,StrSql as String
Dim I as Integer
For I=0 to Liste0.listcount
If Liste0.selected(I) then
StrIn = StrIn & "'" & Liste0.Column(0,I) & "','
Oups !

StrIn = StrIn & "'" & Liste0.Column(0,I) & "'," bien sûr ;-)


End if
Next I
StrSQl = "Select * from [Table] where [MonChamp] in ( "&
left(StrIn,Len(StrIn)-1)) & ") ;"
CurrentDb.Querydefs("La requete source de ton sous formulaire").sql =
StrSQl
Me.SousFormulaire.Requery

Voilà, Reste a adapter et tester ;-)
@+




Avatar
John
Bonjour Fabien,

Je suis revenu sur cette question car je n'y arrive pas, tu veux bien
m'aider ?

Dans la requête il faut écrire à la place d'un nouveau champ ou dans la zone
critére ?
Pour le code si j'enléve oups ! ça se met en rouge, il faut écrire ce code
dans aprés mise à jour de la liste ?

Merci d'avance.
--
John.



Merci Fabien,

Tu as un exemple concrét à me donner ?

Dans ma liste la colonne 1 est cachée, elle contient les codes suivants A
B
C
D
E etc.....

Donc si je sélectionne A - B - C dans cette liste mon sous forms doit
s'actualiser en m'envoyant les enregistrements ayant le code A - B - C.

Encore merci.
Si ton sous formulaire a comme source de données une requete il suffit

de modifier dynamiquement cette requete et de faire ensuite un requery
du sous formulaire.
Dans la clause where de ta requete tu peux utiliser la commande in
ex : where [monchamp] in ('A','B','C')

Dans ton cas lors de l'analyse des valeur selectionnées tu alimente une
chaine

Dim StrIn,StrSql as String
Dim I as Integer
For I=0 to Liste0.listcount
If Liste0.selected(I) then
StrIn = StrIn & "'" & Liste0.Column(0,I) & "','
Oups !

StrIn = StrIn & "'" & Liste0.Column(0,I) & "'," bien sûr ;-)


End if
Next I
StrSQl = "Select * from [Table] where [MonChamp] in ( "&
left(StrIn,Len(StrIn)-1)) & ") ;"
CurrentDb.Querydefs("La requete source de ton sous formulaire").sql =
StrSQl
Me.SousFormulaire.Requery

Voilà, Reste a adapter et tester ;-)
@+







Avatar
Fabien
Bonjour Fabien,

Je suis revenu sur cette question car je n'y arrive pas, tu veux bien
m'aider ?

Dans la requête il faut écrire à la place d'un nouveau champ ou dans la zone
critére ?
Pour le code si j'enléve oups ! ça se met en rouge, il faut écrire ce code
dans aprés mise à jour de la liste ?

Merci d'avance.
Bonjour et meilleurs voeux !!

Le code tout d'abord
Private sub Liste0_afterupdate()
Dim StrIn,StrSql as String
Dim I as Integer
For I=0 to Liste0.listcount
If Liste0.selected(I) then
StrIn = StrIn & "'" & Liste0.Column(0,I) & "',"
End if
Next I
StrSQl = "Select * from [Table] where [MonChamp] in ( "&
Left(StrIn,Len(StrIn)-1)) & ") ;"
CurrentDb.Querydefs("La requete source de ton sous formulaire").sql =
StrSQl
Me.SousFormulaire.Requery
End sub
Pour ce qui est de ta requete.
Telle qu'elle est actuellement tu l'ouvre en mode modification.
Ensuite tu passes en mode SQL (Icône a gauche de la barre d'outil, tu
déroule et tu clic sur SQL).Un slectionner tout et copier te permet de
recuperer le code de ta requete.
Tu revient dans le code vba ci dessus et tu colles le texte à la place
de "Select ...."
Tu remplaces la clause where par where [lechampquisertdefiltre] in ( " &
Left(StrIn,Len(StrIn)-1)) & ") ;"
et voilou !
Si tu n'y arrive pas , fais passer un extrait de ta base par cjoint.com;
Je te metrais ça au clair ;-)

Avatar
Fabien
Bonjour Fabien,

Je suis revenu sur cette question car je n'y arrive pas, tu veux bien
m'aider ?

Dans la requête il faut écrire à la place d'un nouveau champ ou dans
la zone critére ?
Pour le code si j'enléve oups ! ça se met en rouge, il faut écrire ce
code dans aprés mise à jour de la liste ?

Merci d'avance.
Bonjour et meilleurs voeux !!

Le code tout d'abord
Private sub Liste0_afterupdate()
Dim StrIn,StrSql as String
Dim I as Integer
For I=0 to Liste0.listcount
If Liste0.selected(I) then
StrIn = StrIn & "'" & Liste0.Column(0,I) & "',"
End if
Next I
StrSQl = "Select * from [Table] where [MonChamp] in ( "&
Left(StrIn,Len(StrIn)-1)) & ") ;"
CurrentDb.Querydefs("La requete source de ton sous formulaire").sql =
StrSQl
Me.SousFormulaire.Requery
End sub
Pour ce qui est de ta requete.
Telle qu'elle est actuellement tu l'ouvre en mode modification.
Ensuite tu passes en mode SQL (Icône a gauche de la barre d'outil, tu
déroule et tu clic sur SQL).Un slectionner tout et copier te permet de
recuperer le code de ta requete.
Tu revient dans le code vba ci dessus et tu colles le texte à la place
de "Select ...."
Tu remplaces la clause where par where [lechampquisertdefiltre] in ( " &
Left(StrIn,Len(StrIn)-1)) & ") ;"
et voilou !
Si tu n'y arrive pas , fais passer un extrait de ta base par cjoint.com;
Je te metrais ça au clair ;-)
Re,

Avec un exemple c'est mieux
Private Sub Liste0_AfterUpdate()
Dim StrIn, StrSql As String
Dim I As Integer
For I = 0 To Liste0.ListCount
If Liste0.Selected(I) Then
StrIn = StrIn & "'" & Liste0.Column(0, I) & "',"
End If
Next I
StrSql = "Select * from [Table] "
'Si l'option Toutes n'est pas selectionnée on applique le filtre
If InStr(1, StrIn, "*") = 0 Then
If Len(StrIn) > 0 Then
StrSql = StrSql & "where [Code] in ( " & Left(StrIn,
Len(StrIn) - 1) & ")"
End If
Else ' sinon pas de filtre et on réinitialise la liste sur "Toutes"
For I = 1 To Liste0.ListCount
Liste0.Selected(I) = False
Next I
End If

StrSql = StrSql & ";"
Me![SousForm].Form.RecordSource = StrSql
End Sub


@+