Creer une ComboBox Automatiquement

Résolu
bailong Messages postés 11 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 27 avril 2006 - 27 mars 2006 à 18:49
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 21 mai 2007 à 08:05
Salut à tous,



J'utilise le VBA d'excel et j'ai un problème pour créer des comboxbox automatiquement. Je m'explique :



En fait, j'ai une première combobox, je vais
parcourir Active Directory, et enregistrer toutes les OU (les dossiers)
dans cette 1ière combobox. Ensuite, quand on clique sur la combobox
pour choisir la valeur (le nom de l'OU ou dossier), on va parcourir
l'OU choisi pour verifier si a l'interieur il n'existe pas d'autre OU,
si c'est le cas, une deuxieme combobox se créée avec les OU trouvées.



(Je ne sais pas si j'ai été assez clair -__-" )



Bref, donc là où j'ai mon problème, c'est au moment
de créer cette 2ième ComboBox automatiquement... J'ai vu rapidement,
sur le net que l'on pouvait le faire avec controls.add ou encore load (mais avec load, il faut connaitre le nombre d'élément), mais je n'ai pas réussi.



Si quelqu'un pouvait m'aider ca serait sympas



Merci,




BailonG -

17 réponses

rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
30 mars 2006 à 13:11
Bon,

d'abord, non, je n'ai pas dit que le problème dépend de l'OS ou des versions d'Office, mais, comme je n'arrive pas à reproduire ton défaut sur quelques postes, je préfère trouver le poste le plus près de ta configuration.

Ca marche sur :
NT 4.0, Office 2000 (il me semble même avoir essayé 97)
W2k, Office 2000, 2002, 2003
XP SP1, Office 2002
j'ai pas d'XP SP2!, je suis fumeur et je n'aime pas les patchs! (ce qui ne veux pas forcément dire que cela vient d'SP2)

Question subsidiaire : Arrives-tu à situer (à poser) un ComboBox sur un UserForm, en mode Design ? En fait, je suis parti du principe que oui car tu dis "En fait, j'ai une première combobox", mais est-ce que tu l'as vraiment fait?

ne me réponds pas non!
à+

rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
3
bailong Messages postés 11 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 27 avril 2006
30 mars 2006 à 16:07
Après discution sur MSN avec RvBlog,



la synthaxe est :



Dim otest As Object



Set otest = Me.Controls.Add("Forms.ComboBox.1", "CbxOuTest")

With otest

.Left = 100

.Top = 100

.Width = 140

.Height = 18

.Visible = True

End With





Voilà...

Encore MERCI pour tout RvBlog


BailonG -
3
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
28 mars 2006 à 00:31
Salut bailong,

avec load, il ne s'agit de connaitre que l'indice du contrôle que tu ajoutes. Je m'explique brièvement :

- la ComboBox qui est sur ton Form doit avoir la propriété Index définie à 0 (pas vide, mais 0), dans la page des propriétés du composant (F4). Ce qui donne en code, par exemple, cboMaListe(0)
- quand tu veux en ajouter une, logiquement, la prochaine est celle d'indice 1. Donc tu pourrais faire :

Load Me.cboMaListe(1)

- Mais en plus, quand tes ComboBox sont "groupées" (cad, comme ci-dessus, avec un indice donc [ça revient à un tableau de ComboBox]), elles se comportent comme une collection ; Elles te permettent de connaitre le nombre d'éléments de la collection via la méthode .Count.
Si tu n'as pas encore ajouté la ComboBox de l'exemple ci-dessus, la méthode Me.cboMaListe.Count te répond 1, et ça tombe bien, c'est justement le prochain indice que tu veux utiliser!
Du coup, tu peux écrire :

Load Me.cboMaListe(Me.cboMaListe.Count)' et ça marche tout le temps

à+, n'hésite pas à demander, sans passer des heures à chercher (je dis çà parce que j'imagine que tu vas vouloir les supprimer après)


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
28 mars 2006 à 08:57
Salut,

Sauf erreur de ma part, en VBA Excel, les composants insérés dans un Userform, ne possède pas la propriété index. Donc impossible d'utiliser Load et Unload comme il serait possible de le faire en VB6.

En revanche il y à déjà eu pas mal de post sur le forum quant à la création d'objet dynamiquement sous Excel.
Un petit tou avec le moteur de recherche devrait pouvoir te donner pas mal d'infos.

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0

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

Posez votre question
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
28 mars 2006 à 09:04
Salut,

je suis impardonnable, "mais c'était écrit tout petit", j'plaisante, jrivet a raison,
et toutes mes excuses bailong, si je t'ai fait perdre du temps.

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
bailong Messages postés 11 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 27 avril 2006
29 mars 2006 à 10:52
Mdr, ouai quelqu'un m'avais pour le load que ça ne marchait qu'en vb6... Tampis.



Effecitvement, j'avais cherché sur google, mais j'avais pas chercher ici lol, mais j'avais trouvé à peu près le même code, celui que je viens de trouver ici (http://www.vbfrance.com/codes/OBJET-DYNAMIQUE_31167.aspx) :


Private
Sub
createLabel(ByRef obj As Object, _

ByVal
name
As
String
, ByVal top As Integer, _

ByVal
left
As Integer, ByVal text As
String
, _

ByVal height As Integer, ByVal
width
As Integer)

Set
obj = Form1.Controls.
Add
(<var>"vb.label"</var>,
name
, Form1)

With
obj

.Visible = True

.top = top

.
left
=
left


.Caption = text

.height = height

.
width
=
width

End
With




Mon Code :



Set test Me.Controls.Add("Vb.ComboBox", "CbxOutest", Frm_Main) ' Me Frm_Main

With test

.Left = 135

.Top = 70.25

.Width = 142.55

.Height = 18

.Visible = True

End With



Mais j'ai une erreur : Chaîne de class incorrecte



BailonG -
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
29 mars 2006 à 11:15
Salut bailong,
je vais essayer d'être plus efficace qu'hier, l'erreur, c'est parce que tu référence une classe de VB ("vb.label", "Vb.ComboBox") et que tu n'as pas VB. Il te faut référencer des classes d'Office par exemple, les composants Microsoft Forms 2.0 Object Library :

Nom de classe Description
MSForms.ListBox Liste
MSForms.ComboBox Liste combinée déroulante

mais aussi :

MSForms.Frame cadre
MSForms.MultiPage boite d'onglets
MSForms.Image Image
MSForms.SpinButton bouton haut/bas
MSForms.Label Etiquette
MSForms.TextBox Champ de saisie
MSForms.ToggleButton bouton poussoir
MSForms.OptionButton bouton d'option
MSForms.CheckBox bouton case à cocher


alors, qu'en penses-tu?
à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
bailong Messages postés 11 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 27 avril 2006
29 mars 2006 à 11:45
Ouai c'est pas mal ton idée... je pense qu'on tient le bon bout !



Set test = Controls.Add("MSForms.ComboBox", "CbxOutest")

With test

.Left = 135

.Top = 70.25

.Width = 142.55

.Height = 18

.Visible = True

End With



Mais j'ai toujours le meme problème.. dsl et encore merci de m'aider

BailonG -
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
29 mars 2006 à 12:01
Au temps pour moi,

essaies "Forms.ComboBox.1"


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
bailong Messages postés 11 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 27 avril 2006
29 mars 2006 à 12:11
Non j'ai toujours le même Problème



Mais juste comme ça... le ".1" il sert à quoi ?


BailonG -
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
29 mars 2006 à 12:33
c'est un n° de version interne, t'inquiètes.
au fait, juste pour information, quelle est ta version d'Excel, et ta version d'OS.

Allez, une petite manipulation ne te fera pas de mal :

- Menu Démarrer, choisis Exécuter, et dans Ouvrir, écris "regedit"
- Dans l'Editeur du registre, choisis le menu Edition>>Rechercher.
- dans le champ Rechercher, écris ComboBox, et cliques le bouton Suivant.
- s'il te trouve un n° de GUID (chaine de caractères incompréhensible qui représente le n° identifiant un composant COM), ouvre le dossier (en double-cliquant l'icone dossier), et regarde ce qui est écris dans le dossier ProgID (c'est la valeur qu'il faut que tu utilises)
- s'il n'a rien trouvé pour ComboBox (ce qui m'étonnerait pas mal, mais tout est possible), cherches Forms, ou MSForms, ou VB, et dis-moi ce que tu trouves.

Attention, quand on recherche, il ne trouve pas forcément ce que l'on cherche du 1er coup, auquel cas, il faut appuyer sur la touche [F3].

Comment sait-on s'il a trouvé ce qu'il faut ou pas, ben, ce qu'on cherche c'est le ProgID du ComboBox.

allez, au boulot,
à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
bailong Messages postés 11 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 27 avril 2006
30 mars 2006 à 10:45
Merci pour le petit cour sur regedit, LOL !



J'ai rouvé plusieur dossier ProgID, avec les valeurs suivantes, avec la rechercher Combobox :

- NeroCBUI.SpeedCombobox.1

- Forms.ComboBox.1

- MSComctlLib.ImageComboCtl.2

- NeroCBUI.RecorderCombobox.1

- Microsoft Forms 2.0 ComboBox

- MSComctlLib.ImageComboCtl.2



avec MSforms ça n'a rien donné et avec Vb et forms, il y a trop d'infos, concernant trop de programmes.



Pour la version de mon OS, c'est WinXp et d'office c'est le XP (2002) aussi.



BailonG -
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
30 mars 2006 à 11:39
Bon,

vu que tu as de l'élan, 2ème manipulation :

- Retournes dans l'Editeur du Registre, à la clé ProgID où tu as trouvé "Forms.ComboBox.1".
- Sélectionnes, dans l'arborescence de gauche, la clé parente de l'élément ProgID (ça doit être quelque chose comme {88D21D30-EC42-11CE-9E0D-00AA006002F3}), de manière à ce que la clé (parente donc) soit surlignée.
- Dans le menu Registre, choisis Exporter un fichier du Registre. Donnes-lui un chemin (que tu sauras retrouver), et un nom de fichier (genre MSFCombox.txt).
- Ouvre ce fichier avec le Bloc-Notes, et postes le contenu ici.

(s'il te plait)
à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
bailong Messages postés 11 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 27 avril 2006
30 mars 2006 à 12:02
Windows Registry Editor Version 5.00



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}]

@="Microsoft Forms 2.0 ComboBox"



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\Control]

@=""



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\DefaultIcon]

@="C:\\WINDOWS\\system32\\FM20.DLL,0"



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\Implemented Categories]

@=""



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}]

@=""



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}]

@=""



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\InprocServer32]

@="C:\\WINDOWS\\system32\\FM20.DLL"

"ThreadingModel"="Apartment"



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\MiscStatus]

@="2752913"



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\ProgID]

@="Forms.ComboBox.1"



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\ToolboxBitmap32]

@="C:\\WINDOWS\\system32\\FM20.DLL, 175"



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\TypeLib]

@="{0D452EE1-E08F-101A-852E-02608C4D0BB4}"



[HKEY_CLASSES_ROOT\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\Version]

@="2.0"



Voila pour le fichier d'export ^^.



Mais est ce qu'après, avoir résolu le problème, le programme marchera
sur differents postes (version de l'OS et version d'excel differente),
puisqu'apparement ce problème à l'air de déprendre des versions de l'os
et d'office ?


BailonG -
0
bailong Messages postés 11 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 27 avril 2006
30 mars 2006 à 14:06
oui oui, t'inquiete pas je me débrouille quand même
^^, je suis pas 100% noob. Mais disons que des fois, il y a des
fonctions que l'on a jamais rencontré... et on galère dessus.



Mais le mieux ca ne serait pas que je te passe l'appli que j'essai de faire?

Tu n'as pas msn ou google talk ?


BailonG -



PS: MDR pour le patch !
0
ayara1983 Messages postés 1 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 17 mai 2007
17 mai 2007 à 19:16
bonjour , mon probleme que j'ai un combo box remplis par des information , et je dois faire le lien avec uen table de la base de donné ca ve dire quand je choisis un champs dans le combo box il faut l'enregister dans la table correspendante .

j'ai aucune idée comment le faire      est ce que vous pouvez m'aidez !!!!!!!

Merci
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mai 2007 à 08:05
Salut,
> [auteurdetail.aspx?ID=1050451 ayara1983], repose une question dans le forum plutot que de continuer ce post qui est résolu (principe de base d'un forum).

@+: Ju£i?n
Pensez: Réponse acceptée
0
Rejoignez-nous