A voir également:
- Access récupérer valeur liste déroulante
- Access récupérer valeur zone de liste - Meilleures réponses
- Récupérer valeur liste déroulante vba access - Meilleures réponses
- {Access} récupérer valeur liste -> VBA ✓ - Forum - Access
- ACCESS = recuperer valeur de la colonne 2 ? ✓ - Forum - Access
- Récuperer la valeur de la deuxième colonne d'une liste déroulant - Forum - Access
- Récuperer la valeur d'une zone de liste déroulante - Forum - Access
- Récupérer la valeur d'une liste déroulante - Forum - VB / VBA
22 réponses
blux
- Messages postés
- 23763
- Date d'inscription
- dimanche 26 août 2001
- Statut
- Modérateur
- Dernière intervention
- 13 janvier 2020
Salut,
il faut déjà que ta liste soit paramétrée en 'sélection multiple étendue'.
Ensuite, le bout de code suivant va te permettre d'afficher ce qui est sélectionné dans la liste :
Ca devrait te permettre d'avancer.
il faut déjà que ta liste soit paramétrée en 'sélection multiple étendue'.
Ensuite, le bout de code suivant va te permettre d'afficher ce qui est sélectionné dans la liste :
Dim MonCtl As Control Dim Element As Variant Set MonCtl = Forms!nom_du_formulaire!Nom_de_la_liste For Each Element In MonCtl.ItemsSelected MsgBox MonCtl.Column(0, Element) Next
Ca devrait te permettre d'avancer.
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
merci de ta rapidité.
comment la passer en étendu (je travaille avec access 2007 et 2010), car j'ai juste ajouter la propriété autoriser plusieurs valeurs à la zone de liste déroulante??
ensuite si je comprends bien le code :
Dim MonCtl As Control //défini un controle nommé MonCtl
Dim Element As Variant
Set MonCtl = Forms!nom_du_formulaire!Nom_de_la_liste //applique le controle à la liste déroulante du formulaire
For Each Element In MonCtl.ItemsSelected //affiche l'ensemble des éléments sélectionés de la liste
MsgBox MonCtl.Column(0, Element)
Next
questions :
nom_de_formulaire c'est le formulaire qui affichera les couleurs sélectionées, ou celui où on les sélectionne? (celui ou on les sélectionne a mon avis)
plutot que de les afficher avec un msgbox je pourrais pas plutot les stocker ailleurs? (dans une requete par exemple?)
Car actuellement dans mon formulaire affectation, pour un modele, quand j'ai plusieurs valeurs de cochées dans la liste, j'ai le résultat suivant couleur : couleur1; couleur5; couleur9;
Je voudrais juste prendre ces couleurs et les passer dans une liste au formulaire NEUVE
Merci
comment la passer en étendu (je travaille avec access 2007 et 2010), car j'ai juste ajouter la propriété autoriser plusieurs valeurs à la zone de liste déroulante??
ensuite si je comprends bien le code :
Dim MonCtl As Control //défini un controle nommé MonCtl
Dim Element As Variant
Set MonCtl = Forms!nom_du_formulaire!Nom_de_la_liste //applique le controle à la liste déroulante du formulaire
For Each Element In MonCtl.ItemsSelected //affiche l'ensemble des éléments sélectionés de la liste
MsgBox MonCtl.Column(0, Element)
Next
questions :
nom_de_formulaire c'est le formulaire qui affichera les couleurs sélectionées, ou celui où on les sélectionne? (celui ou on les sélectionne a mon avis)
plutot que de les afficher avec un msgbox je pourrais pas plutot les stocker ailleurs? (dans une requete par exemple?)
Car actuellement dans mon formulaire affectation, pour un modele, quand j'ai plusieurs valeurs de cochées dans la liste, j'ai le résultat suivant couleur : couleur1; couleur5; couleur9;
Je voudrais juste prendre ces couleurs et les passer dans une liste au formulaire NEUVE
Merci
blux
- Messages postés
- 23763
- Date d'inscription
- dimanche 26 août 2001
- Statut
- Modérateur
- Dernière intervention
- 13 janvier 2020
Une liste déroulante n'autorise pas de sélection multiple (car elle fonctionne au 'clic'), une zone de liste l'autorise (et il faut paramétrer dans l'onglet 'autres', la valeur 'étendu' au champ 'sélection multiple'.
Le nom de formulaire est bien entendu celui où est la liste dont on veut récupérer les valeurs.
Ensuite, on peut concaténer une chaine pour la mettre en source d'une zone de liste, déroulante, cette fois...
Le nom de formulaire est bien entendu celui où est la liste dont on veut récupérer les valeurs.
Ensuite, on peut concaténer une chaine pour la mettre en source d'une zone de liste, déroulante, cette fois...
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
bah la table NEUVE!
j'ai fait dans la table NEUVE un élément couleur_neuve et en type de donnée je lui ai mis zone de liste déroulante. Maintenant il y a le champs contenu que l'on peut remplir manuellement pour faire une liste ac ces valeurs! et c'est ce contenu que je voudrais remplir.
Mais je ne sais pas si on peut directement agir sur la table ou seulement sur le formulaire.
j'ai fait dans la table NEUVE un élément couleur_neuve et en type de donnée je lui ai mis zone de liste déroulante. Maintenant il y a le champs contenu que l'on peut remplir manuellement pour faire une liste ac ces valeurs! et c'est ce contenu que je voudrais remplir.
Mais je ne sais pas si on peut directement agir sur la table ou seulement sur le formulaire.
blux
- Messages postés
- 23763
- Date d'inscription
- dimanche 26 août 2001
- Statut
- Modérateur
- Dernière intervention
- 13 janvier 2020
Compris.
Il faut aller dans les propriétés de la table, se positionner sur le champ voulu et voir ses propriétés pour les modifier, le cas échéant. J'ai jamais fait ça en VBA, mais c'est possible.
Il faut aller dans les propriétés de la table, se positionner sur le champ voulu et voir ses propriétés pour les modifier, le cas échéant. J'ai jamais fait ça en VBA, mais c'est possible.
blux
- Messages postés
- 23763
- Date d'inscription
- dimanche 26 août 2001
- Statut
- Modérateur
- Dernière intervention
- 13 janvier 2020
taliste.rowsourcetype = "Liste valeurs"
taliste.rowsource = "color1;color5;color8"
Tu vireras le dernier ";" de ta chaîne, ça peut gêner (des fois, ça met une ligne à blanc)...
taliste.rowsource = "color1;color5;color8"
Tu vireras le dernier ";" de ta chaîne, ça peut gêner (des fois, ça met une ligne à blanc)...
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
merci!
valeur "étendue" mise en place
Je pense savoir comment faire pour la concaténation et placer ensuite la chaine dans les valeurs de la liste (c'est déjà ça :D)
mon probleme se situe au niveau du code
il faut créer une procédure ou une fonction pr le code?
quand ce code doit-il s'exécuter et comment?
(dsl mais je vois pas trop comment fonctionne le VBa avec acces :s)
valeur "étendue" mise en place
Je pense savoir comment faire pour la concaténation et placer ensuite la chaine dans les valeurs de la liste (c'est déjà ça :D)
mon probleme se situe au niveau du code
il faut créer une procédure ou une fonction pr le code?
quand ce code doit-il s'exécuter et comment?
(dsl mais je vois pas trop comment fonctionne le VBa avec acces :s)
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
U_u j'avais créer un module comme un idiot...
Merci pour ce petit rappel ;)
j'ai donc réussi a appliquer le code (après tout ce temps c'est pas très glorieux xD) mais as Control n'est pas pris en charge :S (cela vient-il de la version?)
De plus lorsque le code s'exécute je vois apparaitre des caractères "ÿ", "?"
J'ai essayé de prendre la valeur mais ca ne marche pas non plus...
Merci pour ce petit rappel ;)
j'ai donc réussi a appliquer le code (après tout ce temps c'est pas très glorieux xD) mais as Control n'est pas pris en charge :S (cela vient-il de la version?)
De plus lorsque le code s'exécute je vois apparaitre des caractères "ÿ", "?"
J'ai essayé de prendre la valeur mais ca ne marche pas non plus...
blux
- Messages postés
- 23763
- Date d'inscription
- dimanche 26 août 2001
- Statut
- Modérateur
- Dernière intervention
- 13 janvier 2020
Quand ton code est planté, va voir dans ta fenêtre de VBA le menu Outils/références, pour voir s'il en manque une...
Sinon, tu remplaces 'control' par 'variant', c'est un type de données qui peut tout accepter.
De plus lorsque le code s'exécute je vois apparaitre des caractères "ÿ", "?"
ah ben, là, je vois pas...
Sinon, tu remplaces 'control' par 'variant', c'est un type de données qui peut tout accepter.
De plus lorsque le code s'exécute je vois apparaitre des caractères "ÿ", "?"
ah ben, là, je vois pas...
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
j'ai réussi!!
J'ai remplacé control par variant, puis
et résultat ca marche!
Merci pour le temps que tu m'as consacré! Je vais maintenant m'attaquer à les envoyer dans l'autre formulaire donc il ne devrait pas y avoir de nouveaux posts avant demain ;)
Merci
J'ai remplacé control par variant, puis
MsgBox MonCtl.Column(0, Element)par
MsgBox MonCtl.Column(2, Element)car j'en ai deduis que 0 c'était les checkbox, 1 l'id de la couleur et 2 le nom de la couleur...
et résultat ca marche!
Merci pour le temps que tu m'as consacré! Je vais maintenant m'attaquer à les envoyer dans l'autre formulaire donc il ne devrait pas y avoir de nouveaux posts avant demain ;)
Merci
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
ouai c'est ce que je me suis dis! Mais sinon c'est quoi la propriété du contenu d'une liste déroulante?
y a t'il une facon pour que je puisse mettre ma chaine concaténée "color1; color5; color8;" directement dans le contenu?
y a t'il une facon pour que je puisse mettre ma chaine concaténée "color1; color5; color8;" directement dans le contenu?
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
bon j'ai changé de méthode, je vais directement écrire la liste dans une liste déroulante dans la table!
Pour ca j'identifie l'id de la voiture auquel correspond les couleurs sélectionnées, de facon à assigner les valeurs au bon modèle par la suite
jusque là tout roule :D
Maintenant comment peut-on accéder au contenu de la table?
Tables!T_NEUVES!COULEUR_NEUVE.RowSource (je me doute que ce n'est pas ca mais c'est pour montrer mon incapacité ><).
Je pense que c'est le dernier point a résoudre :D
Pour ca j'identifie l'id de la voiture auquel correspond les couleurs sélectionnées, de facon à assigner les valeurs au bon modèle par la suite
Private Sub ID_COULEUR_Exit(Cancel As Integer) Dim ID As Variant ID = Forms!F_AFFECTATION!ID_VOITURE MsgBox ID 'vérif Dim MonCtl As Control Dim Element As Variant Dim Suite As String Set MonCtl = Forms![F_AFFECTATION]![ID_COULEUR] For Each Element In MonCtl.ItemsSelected MsgBox MonCtl.Column(2, Element) 'vérif Suite = Suite + MonCtl.Column(2, Element) + "; " Next MsgBox Suite 'vérif
jusque là tout roule :D
Maintenant comment peut-on accéder au contenu de la table?
Tables!T_NEUVES!COULEUR_NEUVE.RowSource (je me doute que ce n'est pas ca mais c'est pour montrer mon incapacité ><).
Je pense que c'est le dernier point a résoudre :D
blux
- Messages postés
- 23763
- Date d'inscription
- dimanche 26 août 2001
- Statut
- Modérateur
- Dernière intervention
- 13 janvier 2020
je vais directement écrire la liste dans une liste déroulante dans la table!
Je vois pas : une liste déroulante est un contrôle access, une tables contient des infos, pas des contrôles access...
Maintenant comment peut-on accéder au contenu de la table?
Quelle table ?
Je vois pas : une liste déroulante est un contrôle access, une tables contient des infos, pas des contrôles access...
Maintenant comment peut-on accéder au contenu de la table?
Quelle table ?
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
merci sérieux je ne sais pas comment je ferais sans toi :s heureusement qu'il y a des gens comme toi pour donner de leur temps! J'essaye de suite
bon j'ai vu qu'il fallait se pencher sur le DAO donc je m'y met ;)
bon j'ai vu qu'il fallait se pencher sur le DAO donc je m'y met ;)
blux
- Messages postés
- 23763
- Date d'inscription
- dimanche 26 août 2001
- Statut
- Modérateur
- Dernière intervention
- 13 janvier 2020
La collection table contient des fields, qui ont chacun des propriétés : name, value...
Ca devrait faire un truc comme ça :
for each matable in mabase.tabledef
for each monchamp in matable
msgbox monchamp.name & " " & monchamp.value
next
next
Mais je suis pas trop sûr de la syntaxe.
Ca devrait faire un truc comme ça :
for each matable in mabase.tabledef
for each monchamp in matable
msgbox monchamp.name & " " & monchamp.value
next
next
Mais je suis pas trop sûr de la syntaxe.
blux
- Messages postés
- 23763
- Date d'inscription
- dimanche 26 août 2001
- Statut
- Modérateur
- Dernière intervention
- 13 janvier 2020
Tiens, j'ai creusé un peu, ce code sort la liste des champs de la table 'T_couleurs' avec leurs attributs :
Ca peut faire un bon début, avec ça en complément :
http://officesystem.access.over-blog.com/article-16105316.html
<edit>
C'était avant que je trouve le truc ultime :
https://access.developpez.com/sources/?page=dev#ListerTablesChamp
Private Sub Commande0_Click() Dim T As DAO.TableDef Dim F As DAO.Field Dim P As DAO.Property Set base = CurrentDb() 'Set T = CurrentDb.TableDef("T_couleurs") For Each T In CurrentDb.TableDefs If T.Name = "T_couleurs" Then For Each F In T.Fields For Each P In F.Properties MsgBox "Champ " & F.Name & " - Attribut : " & P.Name & ", Valeur = " & LitProp(F, P.Name) Next Next End If Next End Sub Private Function LitProp(Objet As Object, Propriete As String) As String On Error GoTo err: LitProp = Objet.Properties(Propriete) err: End Function
Ca peut faire un bon début, avec ça en complément :
http://officesystem.access.over-blog.com/article-16105316.html
<edit>
C'était avant que je trouve le truc ultime :
https://access.developpez.com/sources/?page=dev#ListerTablesChamp
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
le résultat que j'obtenais étais beaucoup moins performant^^
grace au code que tu m'as fourni il ne me reste plus qu'à modifier RowSource avec du SQL donc ca devrait se faire sans problème!
Je te remercie pour ton aide
grace au code que tu m'as fourni il ne me reste plus qu'à modifier RowSource avec du SQL donc ca devrait se faire sans problème!
Je te remercie pour ton aide
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
bon j'ai choisi l'option de créer une table temporaire, ou j'enregistre ID et Suite pr ensuite les insérer dans l'autre mais j'ai un problème lors de la création :s
je comprends pas...
Dim tbl As DAO.TableDef Dim fld As DAO.Field Set tbl = CurrentDb.CreateTableDef("Temp") Set tdf = CurrentDb.TableDefs("Temp") tdf.Field.Append tdf.CreateField("id_temp", dbLong) 'erreur 3420 objet incorrect ou non défini?? tdf.Field.Append tdf.CreateField("color_temp", dbText, 200) tdf!id_temp.Properties.Append tdf.CreateProperty("RowSource", dbLong, ID) tdf!color_temp.Properties.Append tdf.CreateProperty("RowSource", dbText, Suite)
je comprends pas...
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
bon j'ai avancé mais le problème est que je n'arrive pas à enregistrer les données dans cette table temporaire...
Dim ID As Variant ID = Forms!F_AFFECTATION!ID_VOITURE MsgBox ID 'vérif Dim base As DAO.Database Set base = CurrentDb() Dim MonCtl As Control Dim MaListe As ListBox Dim Element As Variant Dim Suite As String Set MonCtl = Forms![F_AFFECTATION]![ID_COULEUR] For Each Element In MonCtl.ItemsSelected MsgBox MonCtl.Column(2, Element) 'vérif Suite = Suite + MonCtl.Column(2, Element) + "; " Next MsgBox Suite 'vérif Dim tdf As DAO.TableDef Dim fld As DAO.Field Set tdf = base.CreateTableDef("Temp") Set fld = tdf.CreateField("id_temp", dbLong) fld.OrdinalPosition = 1 fld.DefaultValue = ID 'ne marche pas tdf.Fields.Append fld Set fld = tdf.CreateField("color_temp", dbText) fld.OrdinalPosition = 2 fld.Size = 255 fld.Required = True fld.AllowZeroLength = False fld.DefaultValue = Suite 'ne marche pas tdf.Fields.Append fld MsgBox "La table " & fld.DefaultValue & " a été créée" Dim T As DAO.TableDef Dim F As DAO.Field Dim P As DAO.Property Set T = CurrentDb.TableDefs("T_NEUVES") For Each T In CurrentDb.TableDefs If T.Name = "T_NEUVES" Then For Each F In T.Fields If F.Name = "COULEUR_NEUVE" Then For Each P In F.Properties If P.Name = "RowSource" Then T!COULEUR_NEUVE.Properties.Append T.CreateProperty("RowSource", dbText, "SELECT color_temp FROM Temp WHERE id_temp = ID_NEUVE;") End If Next End If Next End If Next Set fld = Nothing Set tdf = Nothing Set T = Nothing Set F = Nothing Set P = Nothing
blux
- Messages postés
- 23763
- Date d'inscription
- dimanche 26 août 2001
- Statut
- Modérateur
- Dernière intervention
- 13 janvier 2020
Une question me tracasse : tu veux faire quoi, au juste, qui nécessite une table temporaire ?
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
^^ je me suis rabattu sur cette option car je n'arrivais pas à créer une requete SQL pour mettre la chaine suite dans le contenu de ma liste de la table T_NEUVES, car pour une requete SQL il faut choissir l'origine de la source (from) or ma variable Suite n'est dans aucune table ou requete! C'est pourquoi je voulais la placer dans une table temporaire... :s
blux
- Messages postés
- 23763
- Date d'inscription
- dimanche 26 août 2001
- Statut
- Modérateur
- Dernière intervention
- 13 janvier 2020
Je viens de reprendre depuis le début, tu cherches juste à remplir la table affectation, non ?
Donc ça ne devrait être que la création de lignes dans cette table avec un .addnew, suite au choix de l'utilisateur...
Ou j'ai rien compris...
Donc ça ne devrait être que la création de lignes dans cette table avec un .addnew, suite au choix de l'utilisateur...
Ou j'ai rien compris...
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
non c'est la table , neuve que je veux remplir!
la table affectation me permet de définir quelles couleurs seront assignées à chaque modèle. C'est cette suite de couleurs que je récupère dans Suite.
Maintenant j'aimerais l'envoyer dans T_NEUVE --> COULEUR_NEUVE qui est une liste déroulante.
j'ai essayé avec : UPDATE T_NEUVES SET COULEUR_NEUVE = Suite WHERE ID = ID_NEUVE;
mais ca ne marche pas :s
la table affectation me permet de définir quelles couleurs seront assignées à chaque modèle. C'est cette suite de couleurs que je récupère dans Suite.
Maintenant j'aimerais l'envoyer dans T_NEUVE --> COULEUR_NEUVE qui est une liste déroulante.
j'ai essayé avec : UPDATE T_NEUVES SET COULEUR_NEUVE = Suite WHERE ID = ID_NEUVE;
mais ca ne marche pas :s
juliendangers
- Messages postés
- 226
- Date d'inscription
- lundi 30 juin 2008
- Statut
- Membre
- Dernière intervention
- 28 octobre 2011
j'ai pensé a rajouter une condition pour tester si l'ID_NEUVE était égale à ID comme ca :
j'ai un pb au niveau du text de la condition de l'ID...
For Each T In CurrentDb.TableDefs If T.Name = "T_NEUVES" Then For Each F In T.Fields If F.Name = "ID_NEUVE" Then If F.Value = ID Then //FAUX If F.Name = "COULEUR_NEUVE" Then For Each P In F.Properties If P.Name = "RowSource" Then T!COULEUR_NEUVE.Properties.Append T.CreateProperty("RowSource", dbText, Suite) End If Next End If End If End If Next End If Next
j'ai un pb au niveau du text de la condition de l'ID...