Rechercher : dans
Par :

[VBA] Fonctionnement ComboBox

Dernière réponse le 19 mar 2009 à 10:25:50 Al1, le 11 aoû 2005 à 22:45:53 
 Signaler ce message aux modérateurs

Salut à tous !

Ce que je vais vous demander n'est pas compliquer : je ne sais pas comment mettre plusieurs "noms" dans ma ComboBox.
Comment faire ?
Merci !

Meilleures réponses pour « [VBA] Fonctionnement ComboBox » dans :
VBA et les collections d'objets. VoirVBA et les collections d'objets Quand plusieurs (beaucoup de) contrôles sont mis sur une feuille ou un Userform il est parfois fastidieux d'écrire du code dans chaque évènement des contrôles. Ce Tuto vous permet de traiter vos contrôles comme...
VBA Un timer une seconde tout simple VoirEn VBA, il n'y a pas (du moins à ma connaissance) de composant Timer. On peut en créer un très facilement. Dans un module de feuille Activer/ dés activer le timer : Placer un bouton sur Feuil1 et mettre le code... Private Sub...
[VBA] Ecrire/lire une série de TextBox en une seule Sub VoirEn VBA, les TextBox ne disposent pas d'un index et dans la plupart des cas, pour entrer du texte, on procède par.. TextBox1.Text = Cells(2,1).value TextBox2.Text = Cells(2,2).value TextBox3.Text = Cells(2,3).value Et l'inverse pour lire les...

1

Soldiertt, le 11 aoû 2005 à 22:49:29
  • +16

Me.Combobox1.AddItem "Lundi"
Me.Combobox1.AddItem "Mardi"

Répondre à Soldiertt

2

Al1, le 13 aoû 2005 à 10:43:05
  • +4

OK ! C'est impec, ca marche ! Merci beaucoup !

Maintenant j'ai 3 autres questions :
1. A quoi sert le Me en premier ? j'ai essayé sans et ca fonctionnait aussi.
2. J'ai une barre de défilement horizontale qui s'affiche alors que mes items rentrent largement dans la combobox. Comment on fait pour l'enlever ?
3. Quand je voudrais savoir ce qui a été sélectionné, le code sera :
If Me.ComboBox1.Item = "Lundi" then... ?

Merci pour tout !

Répondre à Al1

3

vince75, le 16 aoû 2005 à 16:05:15
  • +3

1. "Me" est l'objet "parent" de la combobox1, qui peut-être par exemple un feuille excel (=onglet) ou un formulaire.

Exemple : si ta combobox s'appelle ma_boite (tu peux la renommer dans le champ "name" des propriétés), et qu'elle est sur l'onglet "feuil1", il faudra la désigner comme feuil1.ma_boite
Tu peux donc avoir des combobox qui portent le même nom sur différents onglets (elles n'auront pas le même parent). Si tu appelles directement ma_boite, le VB ne saura pas qui appeler s'il y a ambiguité (sinon ça marche tu l'as vu, VB "devine" avec le contexte)

2. celà vient du fait que la propriété Columnwidths doit avoir une valeur supérieure à "Width". Tu peux laisser Columnwidths vide (sinon, si tu as plusieurs colonnes, il faut indiquer les différentes largeurs en points séparées par des points-virgules)

3. non, il faudra utiliser soit me.combobox.value, qui renvoit la valeur de la ligne sélectionné, et de la colonne indiquée par la propriété boundcolumn (par défaut 1 = première colonne)

Répondre à vince75

4

Al1, le 18 aoû 2005 à 22:02:42

Merci !

Maintenant je pense que c'est ma toute derniére question :
dans la premiére réponse que j'ai reçu j'ai eu pour ligne de commande "ComboBox.AddItem..."
Le probléme est qu'à chaque fois que j'utilise la combobox, j'ai ça :
_ 1ére utilisation : 2 choix (normal)
_ je resélectionne, 2 éme utilisation : 4 choix qui sont 2 fois les mêmes etc...

Quel est la bonne ligne de commande pour éviter ça ?

Répondre à Al1

7

WhiteFang, le 5 sep 2005 à 16:19:50

;-)

Houlà houlà, Vince75 !

Dans l'exemple que tu donnes : L'objet Me ne pourra jamais être une feuille !! L'objet Me, c'est la UserForm en cours !! Ca, c'est du vieil Excel où la définition de ta boîte de dialogue était dans la feuille !! Une boîte de dialogue, maintenant, n'est plus sur une feuille, c'est un objet à part... Et bon, cela m'étonnerais qu'il tourne sous Excel 7 ou 95...

Je dis juste ça car le post "date" un peu, mais le reste n'est pas tout à fait vrai non plus... Sorry...

;-) Wild and Free

Répondre à WhiteFang

5

Lupin.Arsene, le 18 aoû 2005 à 22:14:45
  • +4

Salut,

avant de recharger, vider la combo avec l'instruction :

Me.Combobox1.Clear

Lupin
~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~

Répondre à Lupin.Arsene

6

NJ, le 5 sep 2005 à 14:56:14
  • +3

Il y a deux façons pour mettre du contenu dans l'objet combobox
dans Microsoft Excel
les deux sont faciles à réaliser.
la première méthode consiste à utiliser la propriété du contrôle combobox nomée ROWSOURCE (voir les propriétés du cont^rôle lorsque vous cliquez sur celui-ci)
la seconde consiste à tapez du code en utilisant la propriété ADDITEM du contrôle Combobox
ce qui suit des exemples pour chaque methode.
(utilisation de données de la feuille Excel):
Exemple Première methode:
- dans les cellules A1 à A3 de la feuille Excel, entrez les textes Produit1, ProduitB, ProduitC.
-poser un label sur votre Userform.
- poser une zone de liste modifiable sur votre Userform
- recherchez la propriété RowSource de la ComboBox1 et entrez les références à la feuille Excel comme ceci: Feuil1!A1:A3 ( Il s'agit tout simplement de la source des données affichées dans la ComboBox)
- recherchez la propriété Value et donnez lui comme valeur: Choisir
- poser un bouton de commande et entrez le code suivant:
Private Sub CommandButton1_Click()
Label1.caption = ComboBox1.Value
End Sub
- exécuter le programme
Exemple Deuxième mèthode :
- sélectionnez la combobox1 vérifiez que la propriété ROWSOURCE est Vide.
- double-cliquez sur le userform pour accèder au code
- entrez le code suivant
Private Sub UserForm_Initialize()
ComboBox1.AddItem "New york"
ComboBox1.AddItem "Paris"
ComboBox1.AddItem "Oslo"
End Sub
- exécuter le programme
A chaque clic sur le bouton, l'intitulé affiche la valeur sélectionnée. l'utilisateur peut ajouter des entrées dans la combobox sans probléme.
Bon courage

Répondre à NJ

48

etudiantesendetresse, le 19 mai 2008 à 16:39:30
  • +2

Bonjour, je viens d'essayer votre 1ère méthode et lorsque je clique sur le bouton de commande, il s'affiche :"erreur d'execution '424'" et "Label1.Caption = ComboBox1.Value" est surligné en jaune... Pouvez vous m'aider s'il vous plait ?
Merci

Répondre à etudiantesendetresse

8

david_nounours, le 1 fév 2006 à 16:23:09
  • +2

Bonjour à tous,

J'ai également un petit problème avec une ComboBox de mon Userform qui fait appel (par le commande Rowsource) à une liste (nommée Date) qui contient des dates..

Le format de ces dates est défini comme ceci JJ/MM/AAAA dans excel.

Mon Problème : Lorsque que je déroule la liste dans la ComboBox et que je sélectionne une date, la valeur qui s'affiche n'est plus une date. J'en conclu que le format n'est pas conservé mais je ne sais pas comment faire.

Ce serait hyper sympa de m'aider...

Merci beaucoup

David

Répondre à david_nounours

9

idanjulian@hotmail.com, le 22 oct 2007 à 19:18:51

Bonjour David,

As tu trouve un jour la reponse a ta question... Merci d'avance pour le tuyau car j ai le meme probleme.

Julien.

Répondre à idanjulian@hotmail.com

10

DargGenius, le 17 déc 2007 à 16:46:26
  • +2

Pour mettre en forme une box ( combo ou text) il suffit d'ecrire ceci dans un sub change.

'pour une combobox(liste déroulante):

Private Sub ComboBox1_Change()
ComboBox1.Value = Format(ComboBox1.Value, "dd/mm/yyyy")

End Sub

'pour une zaone de texte:
TextBox1.Value = Format(TextBox1.Value, "dd/mm/yyyy")

Répondre à DargGenius

11

Pépette, le 9 jan 2008 à 10:02:50

Bonjour,
Je cherche à récupérer la valeur sélectionnée par l'utilisateur dans la liste et à en faire quelque chose du genre:
If ComboBox1.ValueSélectionnée = Paris Then X=1
J'ai du mal à trouver le code pour la valeur sélectionnée.
Merci de votre aide

Répondre à Pépette

12

DaRk, le 29 jan 2008 à 10:05:01

Bonjour,
j'ai le même cas d'utilisation que pépette
avec des thèmes à selectionner dans la combobox
j'ai compris qu'on peut les ajouter
Mais je veux que l'utilisateur puisse selectionner un des thème, déjà présent dans la liste
comment puis-je realiser ceci?
merci de votre aide

Répondre à DaRk

13

Polux31, le 29 jan 2008 à 11:04:22
  • +5

Bonjour,

Il y a plusieurs possibilités d'exploiter la selection d'un utilisateur dans une combobox.
On peut exploiter directement le choix sur l'évènement change de la ComboBox, c'est à dire que dès que l'utilisateur séléctionne une valeur dans la liste de la ComboBox, il se passe quelque chose immédiatement :
Par exemple :

Private Sub Combo1_Change()
     Call AfficheSelect(Combo1.Text)
End Sub

Private Sub AfficheSelect(Byval str As Variant)
     MsgBox "Vous avez sélectionné : " & str & ".",,"Message"
End Sub


On peut également faire la même chose sur le click d'un bouton de confirmation par exemple.

Private Sub boutonOk_Click()
     Call AfficheSelect(Combo1.Text)
End Sub


...

C'est, je pense, les 2 façons les plus simples.
J'espère avoir répondu.
Bon courage

;o)

Polux

Répondre à Polux31

46

zerg, le 4 mai 2008 à 15:57:23
  • +1

Bonjour,
Je lisais les post et cherchais quelqu'un de bien calé en VBA pour poser ma question.
Je génère une user form avec des checkbox et des optionbutton de façon paramétrable (en fait, je balaie un dossier et liste les sous-dossier et les fichiers qui sont dedans : pour chaque fichier ou dossiers repéré, il y a création d'une checkbox dont le nom est cb_nomdudossier.
Dans la suite de mon code, l'utilisateur choisi dans l'user form des dossiers sur lesquels faire une action et clique un bouton valider.
J'aimerai ecrire un code qui me permette de tester si une checkbox a été validée, mais voila mon problème:
Lorsque j'écris mon code, l'userform est vierge. Donc, quand je veux écrire le code de mon test, je l'écris sur un objet dont je ne connait pas le nom et qui n'est pas encore créé.
Y a t-il un moyen d'écrire
if UserForme1.CheckBox(nom_de_la_checkBox*).value=true then
*nom_de_la_checkBox sera celui d'un dossier ou fichier recensé dans la première partie du code.
Merci de votre retour,
ZERG

Répondre à zerg

47

Polux31, le 5 mai 2008 à 08:31:16
  • +2

Bonjour,

Je te conseille d'ouvrir un autre topic pour ton problème, celui ci n'est pas en rapport avec ton sujet.

D'autre part, je ne comprends pas bien ce que tu écris : l'userform est vierge, cela veut dire qu'il n'y a aucun contrôle ? ou bien les contrôles (checkbox!!!) se créaient dynamiquement (par le code) ?

;o)

polux

Répondre à Polux31

14

simo, le 25 mar 2008 à 14:53:28

Slt
comment mettre deux combobox en relation par truc mettre-esclave

merci

Répondre à simo

15

o-sixty-o, le 25 mar 2008 à 15:16:00
  • +2

Bonjour,
J’ai une list box et j’utilise actuellement additem pour avoir ma liste. Seulement , je veus maintenant mettre ma liste sur une feuille excel à part (feuil1 par ex) . J’aimerai dès le démarrage de ma list box que celle ci prenne les valeurs qui seront stockées ds cette feuil1 mais je n’y arrive pas !
J’essai avec : Listbox.RowSource = (« A1 :A10 ») ms cela ne marche pas !
Help !

Répondre à o-sixty-o

16

Polux31, le 25 mar 2008 à 17:04:48
  • +2

Salut,

Fais plutôt ça : Listbox.RowSource = ("A1 :A10")

bonne continuation

;o)

polux

Répondre à Polux31

17

o-sixty-o, le 26 mar 2008 à 09:23:04
  • +1

Enfaite le problème est plus complexe… la feuille (qui est une feuille index) contient des éléments de A7 à A19 (la liste qui sera affichée ds la listbox) et donc dans mon code j’ai mis ListBox1.RowSource = "Feuil1!A7:A19"
Seulement il y a un nombre différent de jours pour chaque valeurs de A7 à A20 et il faut que lorsque les valeurs de la liste st sélectionnés ds l’index par la listbOx les nombres de jours s’affichent en face de leurs valeurs sur une nouvelle feuill excel !
Je ne sais pas comment faire mon index enfaite qui serait un tableau ? Car je dois mettre le nombre de jour par activités ds lindex du coup ! et si je sélectionne la valeur ds la listbox qui est située en A12 ds lindex je voudrais que cette valeur s’affiche ds une nouvelle feuille excel en B11 avc son nombre de jour correspondant C11 !!
Et le problème ( c’est le majeur) c’est que si quelqu’un est amené à faire une modification sur l’index, je n’arrive pas à faire en sorte que le code s’actualise ! Donc si une valeur est ajoutée avec un nombre de jour ds lindex comment faire pr qu’elle soit prise en compte ? car ma sélection ne va qu’à A19.. sachant qu’il ya d’autre valeurs après donc je npeu pas pas faire : « A7 : »

Voilà !! Enfaite en gros, il faut pouvoir ajouter, supprimer des valeurs sur une feuille index sans avoir à modifier le code !!! (sachant que pour chaque valeur est attribuée un nombre de jour différents ) ..oui je sais jme répète ms c pr être sur dme faire comprendre lol :s

En espérant que quelqu’un ait compris quelquechose….

Répondre à o-sixty-o

18

Polux31, le 26 mar 2008 à 12:10:50
  • +1

Bonjour,

Pour connaitre le nombre de cellules indexées dans ta colonne A de la feuille 1, il suffit de les compter avant de remplir ta listbox. Je sais qu'il existe une méthode Excel mais je ne l'ai pas en tête. Néanmoins tu peux faire comme ça :

Dim i As Long
i = 7
While Worksheets("Feuil1").Range("A" & i).Value <> ""
   i = i + 1
Wend
ListBox1.RowSource = "Feuil1!A7:A" & i


bon courage

;o)

Polux

Répondre à Polux31

19

simo 007, le 26 mar 2008 à 13:39:05
  • +1

Bonjour tout le monde,
y a qq'un à m'aider à faire le truc suivant:
je crée deux combobox, le 1er il affiche une liste des elements contenus ds la colonne A (par exemple)
mais a cet instant, je veux que si je selectionne un element contenu ds la colonne A,le deuxieme combobox affiche uniquement les elements de la colonne B mais leurs Ai sont les memes!!
j espere que vs avez compris qqchose
je serai tres tres reconnaissant a celui qui me repondra

votre cher ami simo

Répondre à simo 007

20

Polux31, le 26 mar 2008 à 13:49:08
  • +2

Bonjour,

Ben non pas trop compris là .... juste que tu veux que la 2ème combo se remplisse en fonction du choix de la 1ère combo ... mais je ne comprends pas ça : "uniquement les elements de la colonne B mais leurs Ai sont les memes!!"

Quel est le lien entre la colonne A et la colonne B ?

Répondre à Polux31

21

mhi.mmo, le 26 mar 2008 à 14:07:47
  • +1

Merci
mais je m'explique:
par exemple: je mets ds les cellules : A1 = "france", A2 = "maroc", A3 ="france", A4 ="maroc", A5="france"
et je mets ds les cellules : B1 ="Paris", B2="Agadir", B3 ="Mayenne", B4="Tanger", B5="lile"
le 1er combobox contient les elements de la colonne A
le 2eme combobox contient les elements de la colonne B

mais, je veux si je selectionne "france" ds le 1er combobox je vx que le deuxieme combobox m'affiche uniquement les villes de la france contenues ds la colonne B (sans afficher touuuuuuuuuutes les villes meme celles du maroc)

est ce que c'est compris

je vs serai tres tres reconnaissant si vs m aidez svp
j ai passé deux jours pour trouver la solution...hhh...

Répondre à mhi.mmo

22

Polux31, le 26 mar 2008 à 14:19:44
  • +1

Ok je comprends mieux ... mais je ne vois pas l'utilité de 2 combobox ... à la limite je comprends pour la deuxième qui affiche les villes par pane comprends pas la première. Tel que tu décris ton besoin, dans la première combo va s'afficher 3 fois "France" et 2 fois "Maroc" ??? ... je vais quand même essayer de voir comment règler ça.

Peux tu me dire où se trouve tes combo ? sur une feuille Excel ou sur un UserForm ?

;o)

polux

Répondre à Polux31

23

Polux31, le 26 mar 2008 à 16:04:47
  • +1

Re,

Voilà un code à coller dans le module d'un userform. Il faut que tu colles 2 combo sur un userform. Tu renommes le premier (propriété name) cboPays et le deuxième cboVilles. Tu ne dois pas avoir de lignes vides dans la colonne A de ta feuille 1, sinon il faut changer la valeur de "i" dans UserForm_Initialize. Il faut mettre le numéro de la ligne contenant le premier pays.

Voilà le lien pour recup le code : http://cjoint.com/?dAqeutEC8w

bon courage

;o)

polux

Répondre à Polux31

51

michie, le 11 jun 2008 à 04:23:01
  • +1

Bonjour Polux33,


J'aimerai avoir le code que tu as mis sous le lien : http://cjoint.com/?dAqeutEC8w , mais celui ci ne fonctionne pas et cela fait plusieurs jours que je cherche la réponse a mon problème qui est exactement ce que tu écris dans ton dernier message.
Peux tu me faire parvenir ce code que je puisse l'étudier et l'utiliser pour m'aider dans la réalisation de mon projet personnel.


merci d'avance de ta compréhension.

Répondre à michie

52

Polux31, le 11 jun 2008 à 08:20:52

Bonjour,

Je n'ai plus le fichier mais si tu m'explique ce que tu veux faire, je veux bien t'aider.

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots p­our le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

57

michie, le 13 jun 2008 à 09:50:22

Bonjour,

Je te remercie pour cette réponse rapide
Je vais donc essayer d’expliquer clairement ce que je souhaite faire.

Dans un classeur Excel j’ai une feuille dans la quel j’ai quatre colonnes


A____________B___________C_____________ D
RefProd_____outi_________Ref_fr_________Nom_fr
1___________clé__________ 1__________ leroy
2_________ marteau________1__________leroy
3_________ scie ___________ 2__________casto
4________ colle___________ 1___________leroy
5_________tournevis________3___________ brico
6__________ marteau_______2___________casto
7____________ clé_________ 2__________casto
8__________vis ____________1__________leroy
9___________clé___________ 3__________ brico


J’ai une userform avec deux combobox (combobox_outil et combobox_Ref_fr) et une textbox (textbox_Nom_fr)

Dans la combobox_outil je récupère les différents outils (colonne B) et en fonction du choix la combobox_Ref_fr se rempli avec les différents numéros Ref_fr (colonne C)correspondant.
Avec le choix fais dans le combobox_Ref_fr ceci rempli la textbox_Nom_fr (colonne D) qui correspond.


Je n’ai aucun problème pour que la combobox_outil se remplisse, mais lorsque je fais un choix d’outil dans cette combobox_outil il ne me donne qu’un seul choix dans la combobox_Ref_fr même s’il y a plusieurs fois le même outil avec différent Ref_fr.
J’ai procédé avec une while, mais peut être que je dois utilise une autre fonction.


Exemple de ce que j’ai écrit.
I étant le numéro de ligne ( i déclare bien sur)

i = 2
While Feuil1.Cells(i, 1) <> ""
If Feuil1.Cells(i, 2) = combobox_outil_ Then

Exit Sub
End If
i = i + 1
Wend

Répondre à michie