OVH Cloud OVH Cloud

Comment crér des contrôles en mode execution

7 réponses
Avatar
Quant
J'essaie de cr=E9er des contr=F4les en mode execution avec=20
Excel 2002 et VBA... m=EAme en utilisant le code d=E9taill=E9=20
dans l'aide cela ne marche pas.
je re=E7ois un message d'erreur me disant chaine de classe=20
incorrecte
Que dois-je faire ?

D'avance merci

-------------------------------------------
detail du code:
-------------------------------------------

L'exemple suivant utilise les m=E9thodes Add, Clear et=20
Remove pour ajouter et supprimer un contr=F4le dans un objet=20
Page d'un contr=F4le MultiPage, en mode ex=E9cution.

Pour utilisez cet exemple, copiez le code suivant dans la=20
partie D=E9clarations d'une feuille et v=E9rifiez que celle-ci=20
contient :=20

un contr=F4le MultiPage nomm=E9 MultiPage1,


trois contr=F4les CommandButton nomm=E9s CommandButton1 =E0=20
CommandButton3.=20
Dim MyTextBox As Control


----------------------------------------------------

Private Sub CommandButton1_Click()
Set MyTextBox =3D MultiPage1.Pages(0).Controls.Add("MSForms"=20
_
& ".TextBox.1", "MyTextBox", Visible)
End Sub

Private Sub CommandButton2_Click()
MultiPage1.Pages(0).Controls.Clear
End Sub

Private Sub CommandButton3_Click()
If MultiPage1.Pages(0).Controls.Count > 0 Then
MultiPage1.Pages(0).Controls.Remove "MyTextBox"
End If
End Sub

Private Sub UserForm_Initialize()
CommandButton1.Caption =3D "Add control"
CommandButton2.Caption =3D "Clear controls"
CommandButton3.Caption =3D "Remove control"
End Sub

7 réponses

Avatar
Hervé
Salut Quant,
Une idée de départ avec 2 boutons d'option sur un UserForm. Reviens si tu
veux plus :
Private Sub UserForm_Initialize()
Dim Opt As Control
Set Opt = Controls.Add( _
"Forms.OptionButton.1", "Opt1")
With Opt
.Left = 10
.Top = 80
.Width = 200
.Height = 30
.Caption = "Option 1"
End With
Set Opt = Controls.Add( _
"Forms.OptionButton.1", "Opt2")
With Opt
.Left = 60
.Top = 80
.Width = 200
.Height = 30
.Caption = "Option 2"
End With
Set Opt = Nothing
End Sub

Hervé.

"Quant" a écrit dans le message news:
090401c3708f$311638c0$
J'essaie de créer des contrôles en mode execution avec
Excel 2002 et VBA... même en utilisant le code détaillé
dans l'aide cela ne marche pas.
je reçois un message d'erreur me disant chaine de classe
incorrecte
Que dois-je faire ?

D'avance merci

-------------------------------------------
detail du code:
-------------------------------------------

L'exemple suivant utilise les méthodes Add, Clear et
Remove pour ajouter et supprimer un contrôle dans un objet
Page d'un contrôle MultiPage, en mode exécution.

Pour utilisez cet exemple, copiez le code suivant dans la
partie Déclarations d'une feuille et vérifiez que celle-ci
contient :

un contrôle MultiPage nommé MultiPage1,


trois contrôles CommandButton nommés CommandButton1 à
CommandButton3.
Dim MyTextBox As Control


----------------------------------------------------

Private Sub CommandButton1_Click()
Set MyTextBox = MultiPage1.Pages(0).Controls.Add("MSForms"
_
& ".TextBox.1", "MyTextBox", Visible)
End Sub

Private Sub CommandButton2_Click()
MultiPage1.Pages(0).Controls.Clear
End Sub

Private Sub CommandButton3_Click()
If MultiPage1.Pages(0).Controls.Count > 0 Then
MultiPage1.Pages(0).Controls.Remove "MyTextBox"
End If
End Sub

Private Sub UserForm_Initialize()
CommandButton1.Caption = "Add control"
CommandButton2.Caption = "Clear controls"
CommandButton3.Caption = "Remove control"
End Sub
Avatar
Quant
tout d'abord merci hervé pour ce petit coup de main...

j'ai reproduit la même chose ca marche...
mais quand je veux créer des textbox à la volée ca ne
marche plus...

Connais-tu une methode qui permette de le faire ?

Quant



-----Message d'origine-----
Salut Quant,
Une idée de départ avec 2 boutons d'option sur un


UserForm. Reviens si tu
veux plus :
Private Sub UserForm_Initialize()
Dim Opt As Control
Set Opt = Controls.Add( _
"Forms.OptionButton.1", "Opt1")
With Opt
.Left = 10
.Top = 80
.Width = 200
.Height = 30
.Caption = "Option 1"
End With
Set Opt = Controls.Add( _
"Forms.OptionButton.1", "Opt2")
With Opt
.Left = 60
.Top = 80
.Width = 200
.Height = 30
.Caption = "Option 2"
End With
Set Opt = Nothing
End Sub

Hervé.

"Quant" a écrit dans le


message news:
090401c3708f$311638c0$
J'essaie de créer des contrôles en mode execution avec
Excel 2002 et VBA... même en utilisant le code détaillé
dans l'aide cela ne marche pas.
je reçois un message d'erreur me disant chaine de classe
incorrecte
Que dois-je faire ?

D'avance merci

-------------------------------------------
detail du code:
-------------------------------------------

L'exemple suivant utilise les méthodes Add, Clear et
Remove pour ajouter et supprimer un contrôle dans un objet
Page d'un contrôle MultiPage, en mode exécution.

Pour utilisez cet exemple, copiez le code suivant dans la
partie Déclarations d'une feuille et vérifiez que celle-ci
contient :

un contrôle MultiPage nommé MultiPage1,


trois contrôles CommandButton nommés CommandButton1 à
CommandButton3.
Dim MyTextBox As Control


----------------------------------------------------

Private Sub CommandButton1_Click()
Set MyTextBox = MultiPage1.Pages(0).Controls.Add("MSForms"
_
& ".TextBox.1", "MyTextBox", Visible)
End Sub

Private Sub CommandButton2_Click()
MultiPage1.Pages(0).Controls.Clear
End Sub

Private Sub CommandButton3_Click()
If MultiPage1.Pages(0).Controls.Count > 0 Then
MultiPage1.Pages(0).Controls.Remove "MyTextBox"
End If
End Sub

Private Sub UserForm_Initialize()
CommandButton1.Caption = "Add control"
CommandButton2.Caption = "Clear controls"
CommandButton3.Caption = "Remove control"
End Sub




.



Avatar
Zoury
Salut Quant! :O)

: mais quand je veux créer des textbox à la volée ca ne
: marche plus...

Quelle est l'erreur ou le probleme rencontre?

Regarde cet article de la FAQ (et ceux de la MSDN) il t'aidera peut-etre :

Comment ajouter dynamiquement des contrôles sur un form ?
http://faq.vb.free.fr/index.php?questionˆ


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Hubert Canevet
Salut tout le monde,

Oh, ben ... v'là un bout de temps, que je n'ai plus joué
avec ce genre de chose. Je ne me rappelle plus avec quelle
version d'Excel c'était. Bon, on n'est pas dans le
newsgroup Excel, m'enfin chipotons pas.

Excellente occasion pour s'y remettre.

Si j'ai bien suivi, l'apport d'Hervé a été de remplacer
MSForms par Forms. Et ça marche.

Pour répondre à la question de Zoury (créer plusieurs
zones de texte), notons que le code proposé dans l'aide à
titre de démonstration crée les contrôles toujours avec le
même nom et à la même place, ce qui complique
singulièrement les opérations pour les supprimer un à un
par code, du moins pour visualiser le résultat à mesure.

Voici une approche ci-dessous dans une direction qui
permet d'en créer et supprimer plusieurs en voyant ce qui
se passe. Je note sous Excel 2000 qu'après avoir supprimé
un contrôle il faut un délai de quelques secondes avant
que le bouton puisse en supprimer un autre (pareil pour la
création), ce qui n'est pas bloquant j'imagine.

La suite est une question de créativité personnelle car on
peut aussi imaginer de créer des contrôles sur les autres
pages, d'en créer sur plusieurs colonnes ...

Je note que sous Excel 2000, si on met le formulaire en
mode création il ne reste plus qu'une zone de texte, en
sortant du mode création on retrouve les autres contrôles
(je n'ai pas essayé après avoir fermé et rouvert le
fichier). Je me rappelle dans une version précédente avoir
voulu ajouter des contrôles sur un formulaire (ou une
boîte de dialogue, je ne sais plus), ça marchait lors de
l'exécution, mais si on revenait en mode création, tous
les contrôles créés par code avaient disparu, donc pas
moyen d'utiliser la feuille de propriétés à la main. Je
m'abstiendrai à présent de faire plus qu'effleurer le
sujet.

_____________________________________
Dim MyTextBox As Control

Private Sub CommandButton1_Click()
NomControle = "MyTextBox" & MultiPage1.Pages
(0).Controls.Count
'MsgBox "Forms.TextBox.1", , NomControle
Set MyTextBox = MultiPage1.Pages(0).Controls.Add
("Forms.TextBox.1", NomControle, Visible)
MyTextBox.Top = 20 * (MultiPage1.Pages(0).Controls.Count -
1)
MyTextBox.Text = "MyTextBox" & MultiPage1.Pages
(0).Controls.Count - 1
End Sub

Private Sub CommandButton2_Click()
MultiPage1.Pages(0).Controls.Clear
End Sub

Private Sub CommandButton3_Click()
If MultiPage1.Pages(0).Controls.Count > 0 Then
MultiPage1.Pages(0).Controls.Remove "MyTextBox" &
MultiPage1.Pages(0).Controls.Count - 1
End If
End Sub

Private Sub UserForm_Initialize()
CommandButton1.Caption = "Add control"
CommandButton2.Caption = "Clear controls"
CommandButton3.Caption = "Remove control"
End Sub



-----Message d'origine-----
J'essaie de créer des contrôles en mode execution avec
Excel 2002 et VBA... même en utilisant le code détaillé
dans l'aide cela ne marche pas.
je reçois un message d'erreur me disant chaine de classe
incorrecte
Que dois-je faire ?

D'avance merci

-------------------------------------------
detail du code:
-------------------------------------------

L'exemple suivant utilise les méthodes Add, Clear et
Remove pour ajouter et supprimer un contrôle dans un


objet
Page d'un contrôle MultiPage, en mode exécution.

Pour utilisez cet exemple, copiez le code suivant dans la
partie Déclarations d'une feuille et vérifiez que celle-


ci
contient :

un contrôle MultiPage nommé MultiPage1,


trois contrôles CommandButton nommés CommandButton1 à
CommandButton3.
Dim MyTextBox As Control


----------------------------------------------------

Private Sub CommandButton1_Click()
Set MyTextBox = MultiPage1.Pages(0).Controls.Add


("MSForms"
_
& ".TextBox.1", "MyTextBox", Visible)
End Sub

Private Sub CommandButton2_Click()
MultiPage1.Pages(0).Controls.Clear
End Sub

Private Sub CommandButton3_Click()
If MultiPage1.Pages(0).Controls.Count > 0 Then
MultiPage1.Pages(0).Controls.Remove "MyTextBox"
End If
End Sub

Private Sub UserForm_Initialize()
CommandButton1.Caption = "Add control"
CommandButton2.Caption = "Clear controls"
CommandButton3.Caption = "Remove control"
End Sub


.



Avatar
Hervé
Salut Quant,
Un petit test qui ne sert à rien mais donne une idée. Crée 5 textbox avec 5
combobox et les remplis de lettres inutiles :
Private Sub UserForm_Initialize()
Dim Btn As Control
Dim Cmb As Control
Dim I As Integer, J As Integer
Dim Haut As Integer
Haut = 10
For I = 1 To 5
Set Btn = Controls.Add( _
"Forms.textbox.1", "Txt" & I)
With Btn
.Left = 10
.Top = Haut
.Width = 100
.Height = 15
.Text = Chr(64 + I)
End With
Set Cmb = Controls.Add( _
"Forms.combobox.1", "Cmb" & I)
With Cmb
.Left = 115
.Top = Haut
.Width = 100
.Height = 15
For J = 1 To 4 + I
.AddItem Chr(63 + J + I)
Next
End With
Haut = Haut + 17
Next
Set Btn = Nothing
Set Cmb = Nothing
End Sub

Hervé.

"Quant" a écrit dans le message news:
012501c370b1$935417b0$
tout d'abord merci hervé pour ce petit coup de main...

j'ai reproduit la même chose ca marche...
mais quand je veux créer des textbox à la volée ca ne
marche plus...

Connais-tu une methode qui permette de le faire ?

Quant



-----Message d'origine-----
Salut Quant,
Une idée de départ avec 2 boutons d'option sur un


UserForm. Reviens si tu
veux plus :
Private Sub UserForm_Initialize()
Dim Opt As Control
Set Opt = Controls.Add( _
"Forms.OptionButton.1", "Opt1")
With Opt
.Left = 10
.Top = 80
.Width = 200
.Height = 30
.Caption = "Option 1"
End With
Set Opt = Controls.Add( _
"Forms.OptionButton.1", "Opt2")
With Opt
.Left = 60
.Top = 80
.Width = 200
.Height = 30
.Caption = "Option 2"
End With
Set Opt = Nothing
End Sub

Hervé.

"Quant" a écrit dans le


message news:
090401c3708f$311638c0$
J'essaie de créer des contrôles en mode execution avec
Excel 2002 et VBA... même en utilisant le code détaillé
dans l'aide cela ne marche pas.
je reçois un message d'erreur me disant chaine de classe
incorrecte
Que dois-je faire ?

D'avance merci

-------------------------------------------
detail du code:
-------------------------------------------

L'exemple suivant utilise les méthodes Add, Clear et
Remove pour ajouter et supprimer un contrôle dans un objet
Page d'un contrôle MultiPage, en mode exécution.

Pour utilisez cet exemple, copiez le code suivant dans la
partie Déclarations d'une feuille et vérifiez que celle-ci
contient :

un contrôle MultiPage nommé MultiPage1,


trois contrôles CommandButton nommés CommandButton1 à
CommandButton3.
Dim MyTextBox As Control


----------------------------------------------------

Private Sub CommandButton1_Click()
Set MyTextBox = MultiPage1.Pages(0).Controls.Add("MSForms"
_
& ".TextBox.1", "MyTextBox", Visible)
End Sub

Private Sub CommandButton2_Click()
MultiPage1.Pages(0).Controls.Clear
End Sub

Private Sub CommandButton3_Click()
If MultiPage1.Pages(0).Controls.Count > 0 Then
MultiPage1.Pages(0).Controls.Remove "MyTextBox"
End If
End Sub

Private Sub UserForm_Initialize()
CommandButton1.Caption = "Add control"
CommandButton2.Caption = "Clear controls"
CommandButton3.Caption = "Remove control"
End Sub




.



Avatar
Hubert Canevet
Au fait je remarque quand même une chose, sous Excel 2000
je n'ai pas d'objet UserForm, donc pas d'événement
UserForm_Initialize.

Je peux affecter le code correspondant à l'événement
Worksheet_Activate et ça marche (après avoir sélectionné
une autre feuille et être revenu sur la feuille de test).

Question de version ?

J'utilise les boutons de la boîte à outils, avec ceux de
la barre d'outils formulaire, il semble que le code serait
plus long à intégrer.
Avatar
Ledev
Hubert Canevet wrote:
Au fait je remarque quand même une chose, sous Excel 2000
je n'ai pas d'objet UserForm, donc pas d'événement
UserForm_Initialize.

Je peux affecter le code correspondant à l'événement
Worksheet_Activate et ça marche (après avoir sélectionné
une autre feuille et être revenu sur la feuille de test).

Question de version ?



:O) pas tout à fait, c'est juste que tu n'est pas sur le même Container.
Tente ceci(dans Visual Basic Editor):
Insertion, nouvelle UserForm
Dbl clique sur la feuille, et tu l'aura ton UserForm_Initialize ;-).

a+