cs_Beginner37
Messages postés35Date d'inscriptionvendredi 26 janvier 2007StatutMembreDernière intervention28 février 2011
-
3 oct. 2007 à 17:38
cs_Beginner37
Messages postés35Date d'inscriptionvendredi 26 janvier 2007StatutMembreDernière intervention28 février 2011
-
4 oct. 2007 à 10:32
Bonjour,
Il est possible que je sois sur VB.net car je ne peux pas sélectionner seulement VBA (j'ai sélectionné "VB.NET etVB 2005/Divers/Débutants".
Suite à la réponse de MPi sur le remplissage de plusieurs combobox existants à l'aide d'une Fonction, j'ai un autre soucis où les Combobox ne sont pas à l'origine créés dans l'userform.
Le séquentiel est le suivant :
1) création de combobox les uns à la suite des autres dans un Userform.
programme principal :
nbcombo= 1
Call CreationCombo
puis remplissage des combobox
Call RempliCombo Userform1.combobox1, valeurs 'correct que si la combobox existe
(voir http://www.vbfrance.com/forum.v2.aspx?ID=1017423 )
2) sub CreationCombo () 'insertion de la combobox dans l'userform
set Obj = Userform1.Controls.Add("forms.Combobox.1")
With Obj
.name="Combox" & nbCombo 'chaque Combobox est nommé
.Widht=120
.Top =10 'ajouter à chaque passage un décalage
.Height = 15
end with
nbCombo=nbCombo+1 'je peux créer autant de combobox vides que je souhaite en rebouclant
end sub
3) sub RempliCombo (Cbo as combobox, valeurs)
Dim I As Integer
For I = 0 To UBound(Valeurs)
Cbo.AddItem Valeurs(I)
Next If Cbo.ListCount >0 Then Cbo.ListIndex 0
End Sub
Au démarrage du programme, comme à l'origine le combobox n'est pas créé, la ligne Call RempliCombo Userform1.combox1, valeurs renvoie une erreur car Userform.combox1 n'existe pas. De plus, j'avais essayé de faire différentes variantes du style Userform1.Combobox & nbCombo (un mélange d'Objet et de string) sans succès évidemment.
Je suis bloqué dans cette instruction : "RempliCombo Userform1. ...."
J'ai pensé à changer la façon de faire en créant dès le départ un nombre de combobox dans l'userform en forçant .Visible=False et de les replacer à ma convenance dans l'userform avec .Visible=true et les remplir. C'est moins élégant.
Je fais appel à vos idées à la question suivante :
Est-il possible de trouver un artifice pour remplacer l'Objet Userform.comboboxn par un autre code en VBA 5 (prenant en compte la valeurn allant de 1 à 10 par exemple).
For n=1 to 10
Call RempliCombo Userform1.Comboboxn , Valeurs
Next
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 4 oct. 2007 à 08:20
Salut,
>[auteur/DBLK/224194.aspx DblK] Et non pas de propriété Index en VBA. Et il est vrai que c'est bien dommage.
>[auteur/BEGINNER37/965888.aspx Beginner37]: Tu pourrais essayer de faire un truc du genre. (en adaptant)
Ce que tu as besoin est UserForm1.Controls("NomDuControl")
Private NBCombo As Integer
Private Valeurs
Private I As Integer
Private Sub CommandButton1_Click()
NBCombo = 1
'pour le teste
Valeurs = Array("Coucou", "ceci", "est", "un", "test")
Call CreationCombo
For I = 1 To NBCombo - 1
Call RempliCombo(UserForm1.Controls("Combobox" & I), Valeurs) 'correct que si la combobox existe
Next
End Sub<hr />
Sub CreationCombo() 'insertion de la combobox dans l'userform
Set obj = UserForm1.Controls.Add("forms.Combobox.1")
With obj
.Name = "Combobox" & NBCombo 'chaque Combobox est nommé
.Width = 120
.Top = 10 'ajouter à chaque passage un décalage
.Height = 15
End With
NBCombo = NBCombo + 1 'je peux créer autant de combobox vides que je souhaite en rebouclant
End Sub<hr />
Sub RempliCombo(Cbo As ComboBox, Valeurs)
Dim I As Integer
For I = 0 To UBound(Valeurs)
Cbo.AddItem Valeurs(I)
Next If Cbo.ListCount >0 Then Cbo.ListIndex 0
End Sub , ----
[code.aspx?ID=41455 By Renfield]
NOTE: La section correcte pour poster des question VBA est : [infomsg.aspx Thèmes]
DblK
Messages postés51Date d'inscriptionvendredi 30 janvier 2004StatutMembreDernière intervention 2 octobre 2008 3 oct. 2007 à 19:42
Bonjour,
Pourquoi ne pas faire de tableau de combo, en utilisant la propriété index (à moins qu'elle n'existe pas en VBA) ?
Et tu ne peux pas les créer avant exécution ? Ce qui sera plus facile pour toi.