Recup valeur combo dans zone de texte

cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014 - 18 oct. 2007 à 09:36
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 18 oct. 2007 à 12:19
salut tout le monde!
J'espere que je suis dans la bonne zone ca rmon probleme concerne VBA.

Voila j'ai crée une petite appli Access avec formulaires.
sur un formulaire, j'ai deux combo un bouton et une zone de texte.
je choisis un element dans une combo et quand je clique sur le bouton je voudrais que ce que j'ai choisi s'ecrive dans ma zone de texte!
j'ai ecrit ca mais ca ne fonctionne pas!
Une petite idée svp..

Private Sub btnOk_Click()
    txtResult.Text = cboArtistes.Text
End Sub

merci de votre aide

Niko14

8 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
18 oct. 2007 à 10:10
Ca ne fonctionne pas : Rien ne se passe ou il y a un message d'erreur ?

Comment est alimenté ton ComboBox : Un RowSource, des éléments ajoutés à la main ou tu as juste utilisé l'assistant et dans ce cas, quelle table/requête est liée (nb de champs, champ lié, nb de colonnes affichées, ...) ?

En mode debug, tu passes biens dans le code, que contiennent les objets quand tu fais un debug.print ou que tu passes juste la souris sur l'objet ?

Tu peux essayer avec les propriétés .value au lieu de .text de tes objets.

Objectivement, il n'y a pas de raison que ça ne fonctionne pas (même si en VBA ACCESS, il vaut mieux à mon sens utiliser la propriété .value, enfin, ça dépend des besoins et du remplissage des objets), c'est donc que le problème se situe ailleurs.

Il faudrait un peu plus d'info, ou un message d'erreur, quelque chose.

Molenn
0
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
18 oct. 2007 à 10:15
oui quand je clique sur le bouton ca me met une fenetre avec debug ou fin!?
mesg : impossible de faire référence à une propriété ou de la définir pour un contrôle si ce dernier n'est pas activé!!
J'aliment mes cbo par l'assistant access et j'ai modifié mon code!!
Quand je veux afficher du texte pas de soucis mais la valeur de la combo comme ceci ca me pete a la tronche
lol

Private Sub Commande13_Click()
    'txtResult.Value = cboArtistes.Text
    Texte11.Value = cboArtistes.Text
End Sub

je ne comprends pas tout la!!

Niko14
0
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
18 oct. 2007 à 10:29
c'est bizarre parce quand je passe la valeur de la cbo dans une variable string avant et que je click pour afficher et ben la ca fonctionne!

Niko14
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 oct. 2007 à 11:24
Il semble que ta Combobox et ton commandButton et/opu ta Texbox  ne soient pas sur la même form (ce qui expliquerait tout).
Essaye donc de préciser ainsi : nom_conteneur.la_propriété
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
18 oct. 2007 à 11:40
si si si ils sont sur la meme form!!
je vais essayer ce que tu me dis mais je n'ai qu'un formulaire donc c'est obligatoirement le meme!!!

Niko14
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
18 oct. 2007 à 11:46
De mémoire, c'est pour ça que je n'utilise jamais la propriété .text de mes objets dans le formulaire VBA, faut les activer avant ! Ce que tu dis ton message d'erreur d'ailleurs.
Si tu repars de ton code d'origine, il te suffit de rajouter une ligne avant pour effectivement activer le contrôle :

Private Sub btnOk_Click()
    txtResult.setfocus
    txtResult.Text = cboArtistes.Text
End Sub

Ca doit suffire.

Pour ce bout de code

Private Sub Commande13_Click()
    'txtResult.Value = cboArtistes.Text
    Texte11.Value = cboArtistes.Value
End Sub
Ca devrait être bon.
Mais quand tu dis que ça te pète à la tronche .. tu as un message d'erreur ? Le même message d'erreur ou autre chose ?

Molenn
0
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
18 oct. 2007 à 11:54
oui ca me sort une exception et j'arrive sur la ligne de code surlignée en jaune!
Non je ne peux pas mettre
Private Sub Commande13_Click()
    'txtResult.Value = cboArtistes.Text
    Texte11.Value = cboArtistes.Value
End Sub
car si je mets value ca me met l'index de la base de données et l'index je m'en sers apres pour faire les enregistrements dans la BDD c'est bien le texte que je veux de la combo!!

Niko14
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
18 oct. 2007 à 12:19
2 points :
1. As-tu essayé avec le SetFocus ? Ca normalement, ça doit fonctionner. A voire tout de fois s'il ne faut pas en faire un aussi sur la ComboBox (et dans ce cas, te faudra probablement une variable intermédiaire ou alors, changer un peu le code de cette manière :
Private Sub btnOk_Click()
    cboArtistes.setfocus
    txtResult.Value= cboArtistes.Text
End Sub
ce qui doit être suffisant.

2. Comprendre le fonctionnement d'une ComboBox dans ACCESS.
C'est normal que ça te mette l'index de ta base de données, ça rejoint la toute première question que je te posais sur l'alimentation de ta combobox.

Il faut différencier les 2 propriétés de la ComboBox et en ajouter 3 autres.
Sur ton objet ComboBox, fais clic droit propriétés.
Ton objet possède une propriétés Nb de colonnes, qui correspond aux nombres de champs de la requête ou de la table que tu as attachés à la COmboBox.
Tu as la propriété Largeur des colonnes, qui te permet de définir la largeur de chaque champ, avec une taille donnée en cm. Si un champ est à 0, il est donc masqué.
Et enfin, la propriété Colonne liée, qui est la seule valeur de la combobox. En effet, même en rentrant 5 champs dans un comboBox, la combo n'a qu'une seule valeur.

La propriété .text te remonte ce qui est affiché dans la 1ère colonne de la Combo, alors que la propriété .value te remonte la valeur de la colonne liée.

Exemple pour illustrer :
Avec l'assistant, tu as mis comme contenu du combobox une table de personnes, soit 3 champs : Clé primaire, Nom, Prénom.
Par défaut, la case à cocher Clé cachée (recommandée) est cochée..
Ce qui me donne comme Propriétés :
Nb Colonnes = 3
Largeur = 0cm;2,54cm;2,54cm
Colonne liée = 1

Quand j'ouvre ma combo pour sélectionner un objet, j'ai donc en contenu :
Toto  |  Tata

Le code suivant dans un bouton illustrera les différences (Modifiable0 est le nom de la ComboBox) :

    MsgBox Modifiable0.Value
=> affiche 1 qui est le numéro de ma clé primaire

    Modifiable0.SetFocus
    MsgBox Modifiable0.Text
=> affiche Toto qui est le nom affiché dans la ComboBox

Si maintenant, je change la propriété de ma colonne liée, en la passant à 3, et que je clique à nouveau sur mon bouton, j'aurai cette fois dans l'ordre :
=> Tata puis Toto

Partant de cet exemple, tu as toutes les billes pour comprendre ton problème :
- Soit tu colles comme dis plus haut un .SetFocus avant, en utilisant la propriété .text
- Soit tu changes la colonne liée pour avoir la bonne valeur avec la propriété .value

Molenn
0
Rejoignez-nous