Débutant Référencer un Combo box

Débutant Référencer un Combo box - VB/VBA/VBS - Programmation

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,...) ?

Reply

Marsh Posté le 09-12-2004 à 14:17:52   

Reply

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 !?

Reply

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é).
 
 
 

Reply

Marsh Posté le 09-12-2004 à 17:35:43    

avant mais un MyCombo = new ComboBox  


---------------
Le programme et toujours piratable, quelqu'en soit l'auteur, un autre homme le contournera...
Reply

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.
 

Reply

Marsh Posté le 09-12-2004 à 19:00:09    

MyCombo = new ComboBox >> j'aurais bien aimé que ce soit aussi simple :)

Reply

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"


Message édité par Profil supprimé le 09-12-2004 à 23:11:55
Reply

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 ?

Reply

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 :)"


Message édité par Profil supprimé le 10-12-2004 à 01:46:53
Reply

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
 
:)


Message édité par Profil supprimé le 10-12-2004 à 01:55:33
Reply

Marsh Posté le 10-12-2004 à 01:49:45   

Reply

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 :) ).

Reply

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 :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed