Débutant Référencer un Combo box - VB/VBA/VBS - Programmation
Marsh Posté le 09-12-2004 à 15:29:21
Si tu fais 1 truc comme ça :
Dim MyCombo as ComboBox
MyCombo.Name = "NomDeLaCombo"
MyCombo.Height = "Position"
etc...
Non !?
Marsh Posté le 09-12-2004 à 16:48:48
Non, ce que je souhaite faire, c'est récupérer une référence (ou une adresse) sur un combo que je créé sous VBA.
Ou bien un identifiant de combo qui me permettrait d'y accéder.
Ce code :
Dim MyCombo as ComboBox
MyCombo.Name = "NomDeLaCombo"
MyCombo.Height = "Position"
suppose que MyCombo soit défini, non ?
=> à l'éxécution il me dit variable not set (vérifié).
Marsh Posté le 09-12-2004 à 17:35:43
avant mais un MyCombo = new ComboBox
Marsh Posté le 09-12-2004 à 18:03:39
Apparemment, cette syntaxe n'est pas possible.
Faudrait faire ça avec
Dim MyCombo as new Combobox
mais c'est pas possible non plus.
Marsh Posté le 09-12-2004 à 19:00:09
MyCombo = new ComboBox >> j'aurais bien aimé que ce soit aussi simple
Marsh Posté le 09-12-2004 à 23:06:54
pour créer un combo dynamiquement
Private WithEvents Combobox1 As MSForms.ComboBox
Private Sub UserForm_Click()
Set Combobox1 = UserForm1.Controls.Add("Forms.Combobox.1", "CB1", True)
End Sub
Pour traiter les evenements tu devras utiliser le nom "Combobox1"
Marsh Posté le 10-12-2004 à 00:16:29
gargamail>> Je n'arrive pas à compiler le code. Mais en fait je veux insérer des combo box dans une feuille excel, donc j'utilise OLEObject à la place de Controls
Est que ça change quelque chose que j'essai de faire ça sur des feuilles excel ?
Marsh Posté le 10-12-2004 à 01:26:20
la méthode est similaire pour une feuille :
ActiveSheet.OLEObjects.Add ClassType:="Forms.ComboBox.1", Link:=False,DisplayAsIcon:=False, Left:=80, Top:=80, Width:=150, Height:=30
Pour ajouter un item dans le combo crée :
ActiveSheet.OLEObjects("Combobox1" ).Object.AddItem "bonne nuit "
Marsh Posté le 10-12-2004 à 01:49:45
on peut meme mettre ca directement sans avoir de nom d'objet :
ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=80, Top:=80, Width:=150, Height:=30).Select
NOM = Selection.Name
ActiveSheet.OLEObjects(NOM).Object.AddItem "coucou"
ca permet de le mettre dans une boucle sans avoir a se soucier du nom du controle crée ( et sans etre obligé de crée des references objets du style "dim truc as OLEObject" )
PS: du coup tu peut garder les references de tes combo dans un tableau ( style NOM(100) ) puis faire appel au proprietes de ton combo n° 72 par ex :
ActiveSheet.OLEObjects(NOM(72)).Object.Clear
Marsh Posté le 10-12-2004 à 14:16:55
Merci gargamail
J'avais pas essayé avec la propriété object. D'ailleurs je comprends pourkoi il faut mettre un object avant le addItem.
VB est langage un peu tordu, je trouve ...
Mais bon ça marche donc merci encore.
Sinon en fait y a meme pas besoin de faire ça par le nom :
on récupère la référence sur l'object :
Dim monobjet as OLEObject
set monobjet=ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", ...)
monobjet.Objet.addItem "item1"
Ca permet de stocker uniquement des petites références et pas les noms entiers (si je me trompe pas ).
Marsh Posté le 10-12-2004 à 14:26:26
oui c'est clair, l'eventuel inconvenient est si tu as plusieurs dizaines de controles identiques a gerer dans le restant de ton code, voire meme si tu veux faire des appels a un control bien precis par la suite.
Mais tout depend evidemment de l'objectif
Marsh Posté le 09-12-2004 à 14:17:52
Bonjour,
Je souhaite réaliser de facon générique une petite application, à partir de VBA et excel.
Pour cela, je souhaite :
- construire des combo box (à partir de VBA)
- garder dans des variables globales des références sur ces combo box
- pouvoir accéder aux propriétés et méthodes (additem,...) des combos box à partir de ces variables
Jusque là, je n'ai pas trouvé d'autre moyen de procéder que ce qui suit :
' variables globales
Dim mycombo As OLEObject
' ma macro sub
Set mycombo = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1" )
Avec la variable mycombo (OLEObject), je peux bien accéder au nom du combo créé. Mais je n'ai aucun moyen de lui appliquer la méthode addItem.
Il faudrait donc que je trouve un moyen de le référencer comme un ComboBox (Dim mycombo as ComboBox), mais dans ce cas, l'execution du code suivant ne fonctionne pas (car OLEObject.Add retourne un OLEObject et pas un ComboBox)
Set mycombo = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1" )
---> error : type mismatch
D'ou ma question de débutant, comment pourrais je faire un truc comme ça :
Dim mycombo as ComboBox
set mycombo=CreateCombo ( parametres ... )
Ou y a t il un moyen alternantif pour référencer des OLEObject et utiliser les méthodes spécifiques (additem,...) ?