Creer une ComboBox Automatiquement [Résolu]

bailong 11 Messages postés lundi 18 août 2003Date d'inscription 27 avril 2006 Dernière intervention - 27 mars 2006 à 18:49 - Dernière réponse : jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention
- 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 -
Afficher la suite 

17 réponses

rvblog 794 Messages postés vendredi 4 mars 2005Date d'inscription 12 juin 2012 Dernière intervention - 30 mars 2006 à 13:11
+3
Utile
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>
Cette réponse vous a-t-elle aidé ?  
bailong 11 Messages postés lundi 18 août 2003Date d'inscription 27 avril 2006 Dernière intervention - 30 mars 2006 à 16:07
+3
Utile
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 -
Cette réponse vous a-t-elle aidé ?  
rvblog 794 Messages postés vendredi 4 mars 2005Date d'inscription 12 juin 2012 Dernière intervention - 28 mars 2006 à 00:31
0
Utile
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>
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 28 mars 2006 à 08:57
0
Utile
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
rvblog 794 Messages postés vendredi 4 mars 2005Date d'inscription 12 juin 2012 Dernière intervention - 28 mars 2006 à 09:04
0
Utile
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>
bailong 11 Messages postés lundi 18 août 2003Date d'inscription 27 avril 2006 Dernière intervention - 29 mars 2006 à 10:52
0
Utile
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 -
rvblog 794 Messages postés vendredi 4 mars 2005Date d'inscription 12 juin 2012 Dernière intervention - 29 mars 2006 à 11:15
0
Utile
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>
bailong 11 Messages postés lundi 18 août 2003Date d'inscription 27 avril 2006 Dernière intervention - 29 mars 2006 à 11:45
0
Utile
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 -
rvblog 794 Messages postés vendredi 4 mars 2005Date d'inscription 12 juin 2012 Dernière intervention - 29 mars 2006 à 12:01
0
Utile
Au temps pour moi,

essaies "Forms.ComboBox.1"


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



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


BailonG -
rvblog 794 Messages postés vendredi 4 mars 2005Date d'inscription 12 juin 2012 Dernière intervention - 29 mars 2006 à 12:33
0
Utile
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>
bailong 11 Messages postés lundi 18 août 2003Date d'inscription 27 avril 2006 Dernière intervention - 30 mars 2006 à 10:45
0
Utile
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 -
rvblog 794 Messages postés vendredi 4 mars 2005Date d'inscription 12 juin 2012 Dernière intervention - 30 mars 2006 à 11:39
0
Utile
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>
bailong 11 Messages postés lundi 18 août 2003Date d'inscription 27 avril 2006 Dernière intervention - 30 mars 2006 à 12:02
0
Utile
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 -
bailong 11 Messages postés lundi 18 août 2003Date d'inscription 27 avril 2006 Dernière intervention - 30 mars 2006 à 14:06
0
Utile
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 !
ayara1983 1 Messages postés mardi 1 mai 2007Date d'inscription 17 mai 2007 Dernière intervention - 17 mai 2007 à 19:16
0
Utile
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
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 21 mai 2007 à 08:05
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.