Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2010, 00h26   #1
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 105
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 105
Points : 36
Points : 36
Par défaut Récupérer par vba les éléments d'un champ multivalué dans un formulaire

Bonsoir tous!

Je me permet de faire resurgir ce sujet
http://www.developpez.net/forums/d94...s/#post5598424
puisque:
1 - il n'a pas été résolu;
2 - il ne date pas de trop longtp non plus;
3 - ben c'est qui m'intéresse fortement ce sujet: j'ai exactement le même problème que jollyjohn, à savoir:

Comment récupérer dans une liste déroulante à choix multiples (source/contenu codé par vba) les éléments d'une autre liste déroulante à choix multiples (qui elle, est modifiable par l'utilisateur)?

Merci d'avance à tous pour les idées!
Cinesra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 03h04   #2
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Le principe des listes dépendantes est le suivant :
la sélection d'un item dans la liste provoque l'ouverture de la liste dépendante dont la source est restreinte aux valeurs égales à celle de la sélection dans la première liste.

Pour ma part, je suis un adepte du sql pour ce qui est des sources de requêtes, listes....

Dans le cas d'une liste à choix multiple (zone de liste) la difficulté vient du fait que la construction de la source SQL de la seconde liste va devoir inclure le choix de toutes les valeurs choisies . Il faut falloir donc travailler un peu la chaine SQL avant de la passer comme source.

Voici comment je vois les choses.


Sur click d'un choix dans la liste
Pour chaque item sélectionné dans la liste
récupérer la valeur du choix
créer la chaine SQL source de la seconde liste en concaténant son contenu avec " OR monchamp= valeurchoisie"

une fois tous les item sélectionnés traités, supprimer le premier "OR" de la chaine sql

Finir la chaine en ajoutant devant les informations de sélection, et derrière les informations de tri éventuels.

A vous de jouer !
NE pas hésiter à regarder dans la FAQ sur les listes, il y a une mine d'information.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 13h17   #3
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 105
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 105
Points : 36
Points : 36
Bien le bonjour pier.antoine,

A vrai dire, j'avais déjà l'idée, je cherchais plutôt le code.
Voici le mien pour l'instant:
Code :
1
2
3
Me.Liste1.RowSource = "SELECT DISTINCT (Illustrations.[Domaine(s)].Value) AS Expr1 FROM Illustrations ORDER BY (Illustrations.[Domaine(s)].Value);"
Me.Liste1.Requery
Me.Liste1.MultiSelect = True
Le problème vient de la dernière ligne en fait: j'aimerais que cette liste soit à choix multiple mais Access n'a pas l'air de vouloir me laisser faire

A quoi cela est il du?

Merci
Cinesra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 14h16   #4
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 105
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 105
Points : 36
Points : 36
Les progrès sont en cours:

Code :
1
2
3
4
5
6
7
8
Me.Liste1.RowSource = "SELECT DISTINCT (Illustrations.[Domaine(s)].Value) AS Expr1 FROM Illustrations ORDER BY (Illustrations.[Domaine(s)].Value);"
Me.Liste1.Requery
 
ListLine = ""   'initialisation de la boucle
For j = 1 To Liste1.ListCount  'boucle
ListLine = ListLine & ";" & Liste1.ItemData(j)  'concaténation
Next j
MsgBox ListLine 'reste plus qu'à mettre ça en tant que contenu "Valeur" de la Liste1
EDIT: bon en fait je n'ai pas l'impression qu'il soit nécessaire de passer par la boucle et le chgmt de type de données accepté dans la liste pour se servir de la fonction MultiSelect(?)
Quelqu'un sait il pourquoi
Code :
Me.Liste1.MultiSelect = 1
ne fonctionne pas?

EDIT 2: en fait j'ai fini par comprendre que ma liste Liste1 n'était pas une listbox mais une combobox (je vois pas encore trop la différence mais bon). La propriété MultiSelect ne s'applique tout simplement pas aux combobox mais seulement aux listbox (c'était la réponse de l'article cité tout en haut!!!).

Du coup, maintenant je cherche à transformer ma combobox en liste déroulante à choix multiple, comme celles que l'on défini dès la création d'une table (vous savez, avec les cases à cocher).

Merci d'avance!
Cinesra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 04h37   #5
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Plusieurs choses.

Je ne connais pas Access 2007, mais en version 2003, ni les zones de listes, ni les listes déroulantes ne comportent de case à cocher. Il est possible, je crois de faire ça avec des sous formulaire, mais je n'ai jamais essayé (il y a un tutoriel là dessus).

Dans Access 2003, pour modifier la nature d'un contrôle faire ceci :
-en mode création
- sélectionner la liste déroulante
- click droit
- choisir "Remplacer par zone de liste".

La différence entre les deux c'est que la combobox (ou liste modifiable) accepte que l'on tape du texte. Elle ressemble à une zone de texte d'ailleurs. Vous pouvez afficher la liste des items proposés, mais vous pouvez aussi saisir les premières lettres. Vous pouvez aussi gérer le cas où l'on saisit un item qui n'appartient pas à la liste, et donner la possibilité d'ajouter de nouvelles valeurs à cette liste.

Par contre, dans une zone de liste, pas de tout ça.
Vous devez choisir un des items proposés, point.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 10h04   #6
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 105
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 105
Points : 36
Points : 36
Salut,

En fait ici, je parle de ceci: http://office.microsoft.com/global/i...ZA101555031033
j'ai exactement le même problème que dans ce fil là: http://www.access-programmers.co.uk/...d.php?t=184095

Apparemment, c'est que ma ListBox est en champ multivalué d'où la possibilité de choisir plusieurs valeurs dans la liste (nouveauté Access 2007).
Donc pour revenir à mon problème:
comment remplacer ce code:
Code :
Me.Liste1.MultiSelect = 1
pour qu'il puisse s'appliquer à un champ multivalué de ListBox (spécificité Access 2007)???


Merci d'avance
Cinesra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 18h27   #7
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Désolé,

je ne maîtrise pas du tout Access 2007.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h25.


 
 
 
 
Partenaires

Hébergement Web