OVH Cloud OVH Cloud

Placer des labels dans un userform par vba

9 réponses
Avatar
JP
Bonjour,

Je voudrais inserer des labels dans un userform
Mon code:

Private Sub UserForm_Initialize()

For i = 76.5 To 976.5 Step 18
Me.Controls.Add("Label" & K).Caption = "Label" & K
Me.Controls.Add("Label" & K).Top = i
Me.Controls.Add("Label" & K).Left = 57
Me.Controls.Add("Label" & K).Width = 35
Me.Controls.Add("Label" & K).Height = 18
K = K + 1
Next i

j'ai une erreur d'execution : chaine de classe incorrecte.

Qui peut me dire pourquoi.

Merci

JP

9 réponses

Avatar
DanielCo
Bonjour,
Un exemple avec des checkboxes tiré de :
http://silkyroad.developpez.com/VBA/VisualBasicEditor/#LV-A

For i = 1 To 3
Set Obj = Me.Controls.Add("forms.Checkbox.1")
With Obj
.Name = "moncheckbox" & i
.Object.Caption = "le texte" & i
.Left = 140
.Top = 30 * i + 10
.Width = 50
.Height = 20
End With
Next i

Cordialement.
Daniel


Bonjour,

Je voudrais inserer des labels dans un userform
Mon code:

Private Sub UserForm_Initialize()

For i = 76.5 To 976.5 Step 18
Me.Controls.Add("Label" & K).Caption = "Label" & K
Me.Controls.Add("Label" & K).Top = i
Me.Controls.Add("Label" & K).Left = 57
Me.Controls.Add("Label" & K).Width = 35
Me.Controls.Add("Label" & K).Height = 18
K = K + 1
Next i

j'ai une erreur d'execution : chaine de classe incorrecte.

Qui peut me dire pourquoi.

Merci

JP
Avatar
LSteph
Bonjour,

Un exemple:

Private lblCs(200) As MSForms.Label

Private Sub UserForm_Initialize()
Me.Width = 350
Me.Height = 350
For i = 1 To 10
For j = 1 To 4
k = k + 1
Set lblCs(k) = Me.Controls.Add("Forms.Label.1", "lbl1")
With lblCs(k)
.Top = i * 25
.Left = (j * 80) - 50
.Caption = "Label" & k
End With
Next j
Next i
End Sub

'LSteph
Avatar
JP
Bonsoir Stephane,

Génial, je me suis bien ennuyé ce matin avec une autre solution.
Ce qui est dommage c'est que les forms ne restent pas.
Peut-on le faire?

Merci encore

JP
Avatar
LSteph
Bonjour JP,

Ne restent pas? C'est à dire...

@++

--
LSteph

"JP" a écrit dans le message de
news:
Bonsoir Stephane,

Génial, je me suis bien ennuyé ce matin avec une autre solution.
Ce qui est dommage c'est que les forms ne restent pas.
Peut-on le faire?

Merci encore

JP


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Avatar
JP
Bonjour Stéphane,

Si tu edites l'userform les labels ne sont pas dedans. IL faut lancer l'use rform_initialize() pour qu'ils apparaissent.
Je demandais s'il y avait un moyen de créer une macro pour les inscrire e n dur dans l'userform.

JP
Avatar
MichD
Bonjour,

Voici un exemple de code qui crée un formulaire à la volée
c'est-à-dire qu'il est supprimé à la fermeture!
Cependant, si tu inhibes cette ligne de code en plaçant une
apostrophe devant, tu peux créer un formulaire, les contrôles à
l'intérieur et le code à placer dans le formulaire et ce dernier
demeurera à la fermeture. Attention, si le formulaire demeure,
tu ne peux pas répéter cette procédure régulièrement parce que
tu vas te retrouver avec une multitude de formulaires dans ton
projetVBA.

Inhibe cette ligne de code si tu veux conserver le formulaire :
ThisWorkbook.VBProject.VBComponents.Remove UF

Cette procédure requiert la référence suivante :
"Microsoft forms 2.0 object library"
Barre des menus / outils / références / et tu coches la case associée
à cette référence.

'----------------------------------------------------------
Sub UserForm_aLaVolee()
Dim UF As Object
Dim L As MSForms.Label
Dim CB As MSForms.CommandButton
Dim A$
Dim i&
On Error GoTo fin
'---- Crée dynamiquement un UserForm ----
Set UF = ThisWorkbook.VBProject.VBComponents.Add(3)
With UF
.Properties("Caption") = "UserForm à la volée"
.Properties("Height") = 240
.Properties("Width") = 320
End With
'---- Crée le bouton de fermeture ----
Set CB = UF.Designer.Controls.Add("forms.CommandButton.1")
With CB
.Caption = "Fermer"
.Left = 200
.Top = 180
End With
'---- Crée le label ----
Set L = UF.Designer.Controls.Add("forms.Label.1")
With L
.Caption = "mon texte"
.TextAlign = fmTextAlignCenter
.Left = 20
.Top = 20
.BackColor = vbRed
.BorderStyle = fmBorderStyleSingle
End With
'°°° Ajout du code évènementiel °°°
A$ = "Sub CommandButton1_Click()" & _
vbCrLf & "Unload Me" & _
vbCrLf & "End Sub"
With UF.CodeModule
i& = .CountOfLines
.InsertLines i& + 1, A$
End With
'-----------
A$ = "Sub Label1_Click()" & _
vbCrLf & "MsgBox " & _
"""Vous avez cliqué sur mon texte""" & _
vbCrLf & "End Sub"
With UF.CodeModule
i& = .CountOfLines
.InsertLines i& + 1, A$
End With
'---- Affiche le UserForm ----
VBA.UserForms.Add(UF.Name).Show
'---- Détruit le UserForm ----
ThisWorkbook.VBProject.VBComponents.Remove UF
fin:
End Sub
'----------------------------------------------------------





"JP" a écrit dans le message de groupe de discussion :


Bonjour Stéphane,

Si tu edites l'userform les labels ne sont pas dedans. IL faut lancer
l'userform_initialize() pour qu'ils apparaissent.
Je demandais s'il y avait un moyen de créer une macro pour les inscrire en
dur dans l'userform.

JP
Avatar
MichD
J'ai omis de mentionner l'auteur de cet exemple "Frédéric Sigonneau".
Tu devrais pouvoir retrouver l'original sur son site internet :
http://frederic.sigonneau.free.fr/ ainsi que plusieurs autres choses
intéressantes.
Avatar
LSteph
Bonjour,

Oui, c'est parce que tu étais parti sur un initialize que j'en ai suivi l 'idée
et cela me semble être la bonne puisqu'in fine si on les créait en dur c'est qu'on ne voudrait pas utiliser de macro pour les créer une seconde fois.
donc le concept du userform "dynamique" partirait d'un userform "vide" qui génère lui même ses composants.

Sinon regarde si l'exemple de FS proposé par MD te convient.

---

Suivant le même ordre d'idée tu peux aussi créer un Userform comprena nt déjà un certains nombre de contrôles typemais qui s'adaptent à un modèle de document selon un contexte et un objectif.
Exemple por gérer une petite base: avoir prédisposé deux boutons, des textbox et listes qui selon les noms de champs adaptent le label qui va av ec et ne rendre visibles que les contrôles nécessaires.

---

En fait tout dépend de l'objectif et si c'est plus pour une tache fastidi euse ou répétitive.

Cordialement.

--
LSteph

Le mardi 24 décembre 2013 13:32:29 UTC+1, JP a écrit :
Bonjour Stéphane,



Si tu edites l'userform les labels ne sont pas dedans. IL faut lancer l'u serform_initialize() pour qu'ils apparaissent.

Je demandais s'il y avait un moyen de créer une macro pour les inscrire en dur dans l'userform.



JP
Avatar
JP
Je suis toujours stupéfait des possibilités du vba.
Dans mon cas j'avais 150 labels (3 colonnes de 50) à créer et 100 check box (2 colonnes de 50).
C'est assez fastidieux de tout créer avec un alignement parfait.
Mais je vais étudier de près cette solution car, dans le cas que je vie ns de traité, le nombre des labels et checkbox varient de 10 à 50.

Merci pour toutes ces informations.

JPierre