Comment utiliser plusieurs valeurs dans une liste de choix ?
11 réponses
Brunonix
Bonjour à tous !
Je suis encore novice dans les macros, alrs les codes , n'en parlons pas
tout de suite.
J'ai un problème que je ne sais pas résoudre. Je veux créer i=un formulaire
avec une liste de choix basée sur une table. Je peux autoriser le choix
multiple dans les propriétés. Jusque là, c'est ok. Mais comment faire pour
les retrouver et les utiliser dans un sous formulaire contenat des
informations liées à cette première table?
Exemple : table "Matières" contenant un numéro automatique, et les matières
(français, allemand, etc... le sous formulaire affiche les livres utilisés
par cette matière. Tout fonctionne bien si je ne suis pas en choix multiple
(cas je suppose très classique des formulaires). Je ne sais pas utiliser et
gérer le choix multiples, pourtant capital dans mon cas.
Je vous remercie d'avance, et si vous avez un code, svp, soyez clair de me
dirte ce que je dosi en faire :-).
Une solution consisterait à mettre un bouton de commande sur ton formulaire. Sur l'évènement click de ce bouton tu mets le code suivant :
(l'état doit contenir exactement les même champs que le formulaire)
Private Sub Commande7_Click() Dim e As Report DoCmd.OpenReport "eLivre", acViewDesign Set e = Reports("eLivre") e.RecordSource = txtSQL DoCmd.Close acReport, "eLivre", acSaveYes DoCmd.OpenReport "eLivre", acViewPreview ' ou acNormal pour imprimer End Sub
*MAIS* il faut que tu déplaces la déclaration de txtSQL dans la partie déclarative de ton module de formulaire
Il faut mettre : Dim txtSQL as String
et tu supprimes, dans l'instruction Dim txtSQL as String, i, restriction as string de la procédure Private Sub Liste0_AfterUpdate(), la déclaration txtSQL as String pour n'avoir que :
Private Sub Liste0_AfterUpdate() Dim i, restriction As String ... End Sub
(Ici, exemple plus complet : http://cjoint.com/?dmrIBCbHGY car je teste le cas ou l'on veut imprimer à l'ouverture du formulaire puisque celui ci affiche tous les livres initialement)
Voila, ca devrait te permettre d'obtenir le résultat souhaité.
A+ Eric
Dis moi Eric, dans ton fichier exemple, n'y a-t-il pas un moyen simple pour qu'un état construit de façon identique au formulaire prennent strictement les mêmes valeurs que le formulaire? Une sourte d'instruction du type Me.Report.état.source=Me.Formulaire.source ?
Bonjour Bruno,
Une solution consisterait à mettre un bouton de commande sur ton
formulaire. Sur l'évènement click de ce bouton tu mets le code suivant :
(l'état doit contenir exactement les même champs que le formulaire)
Private Sub Commande7_Click()
Dim e As Report
DoCmd.OpenReport "eLivre", acViewDesign
Set e = Reports("eLivre")
e.RecordSource = txtSQL
DoCmd.Close acReport, "eLivre", acSaveYes
DoCmd.OpenReport "eLivre", acViewPreview ' ou acNormal pour imprimer
End Sub
*MAIS* il faut que tu déplaces la déclaration de txtSQL dans la partie
déclarative de ton module de formulaire
Il faut mettre : Dim txtSQL as String
et tu supprimes, dans l'instruction Dim txtSQL as String, i, restriction
as string de la procédure Private Sub Liste0_AfterUpdate(), la
déclaration txtSQL as String pour n'avoir que :
Private Sub Liste0_AfterUpdate()
Dim i, restriction As String
...
End Sub
(Ici, exemple plus complet : http://cjoint.com/?dmrIBCbHGY car je teste
le cas ou l'on veut imprimer à l'ouverture du formulaire puisque celui
ci affiche tous les livres initialement)
Voila, ca devrait te permettre d'obtenir le résultat souhaité.
A+
Eric
Dis moi Eric, dans ton fichier exemple, n'y a-t-il pas un moyen simple pour
qu'un état construit de façon identique au formulaire prennent strictement
les mêmes valeurs que le formulaire? Une sourte d'instruction du type
Me.Report.état.source=Me.Formulaire.source ?
Une solution consisterait à mettre un bouton de commande sur ton formulaire. Sur l'évènement click de ce bouton tu mets le code suivant :
(l'état doit contenir exactement les même champs que le formulaire)
Private Sub Commande7_Click() Dim e As Report DoCmd.OpenReport "eLivre", acViewDesign Set e = Reports("eLivre") e.RecordSource = txtSQL DoCmd.Close acReport, "eLivre", acSaveYes DoCmd.OpenReport "eLivre", acViewPreview ' ou acNormal pour imprimer End Sub
*MAIS* il faut que tu déplaces la déclaration de txtSQL dans la partie déclarative de ton module de formulaire
Il faut mettre : Dim txtSQL as String
et tu supprimes, dans l'instruction Dim txtSQL as String, i, restriction as string de la procédure Private Sub Liste0_AfterUpdate(), la déclaration txtSQL as String pour n'avoir que :
Private Sub Liste0_AfterUpdate() Dim i, restriction As String ... End Sub
(Ici, exemple plus complet : http://cjoint.com/?dmrIBCbHGY car je teste le cas ou l'on veut imprimer à l'ouverture du formulaire puisque celui ci affiche tous les livres initialement)
Voila, ca devrait te permettre d'obtenir le résultat souhaité.
A+ Eric
Dis moi Eric, dans ton fichier exemple, n'y a-t-il pas un moyen simple pour qu'un état construit de façon identique au formulaire prennent strictement les mêmes valeurs que le formulaire? Une sourte d'instruction du type Me.Report.état.source=Me.Formulaire.source ?