'CREATION USERFORM à la volée ! (nécessite de cocher "Accès approuvé au modèle d'objet du projet VBA
Option Explicit
Const Sign As String = "Thierry 's Truc sur [URL="https://www.excel-downloads.com/"]www.Excel-Downloads.com[/URL], March 2005"
Const TxbWidth As Integer = 65
Const TxbHeigth As Integer = 15
Const TxbLeft As Integer = 90
Const TxbTop As Integer = 15
Const LblWidth As Integer = 70
Const LblHeigth As Integer = 15
Const LblLeft As Integer = 10
Const LblTop As Integer = 15
Sub MyUserFormAutoBuilder()
Dim ObjUSF As Object
Dim ObjTextBox As Object, ObjLabel As Object, CmdB As Object, LstB As Object
Dim TopPlusHeight As Integer
Dim X As Byte
Dim VLblLeft As Integer
Dim VTxbLeft As Integer
Set ObjUSF = ThisWorkbook.VBProject.VBComponents.Add(3)
With ObjUSF
.Properties("Caption") = Sign
.Properties("Width") = 660
.Properties("Height") = 195
.Properties("ShowModal") = True
End With
For X = 1 To 40
Set ObjTextBox = ObjUSF.Designer.Controls.Add("Forms.TextBox.1")
Set ObjLabel = ObjUSF.Designer.Controls.Add("Forms.Label.1")
Select Case X
Case 1 To 10
If X = 1 Then TopPlusHeight = LblTop
VLblLeft = LblLeft
VTxbLeft = TxbLeft
Case 11 To 20
If X = 11 Then TopPlusHeight = LblTop
VLblLeft = LblLeft + 160
VTxbLeft = TxbLeft + 160
Case 21 To 30
If X = 21 Then TopPlusHeight = LblTop
VLblLeft = LblLeft + 320
VTxbLeft = TxbLeft + 320
Case 31 To 40
If X = 31 Then TopPlusHeight = LblTop
VLblLeft = LblLeft + 480
VTxbLeft = TxbLeft + 480
End Select
With ObjLabel
.Caption = "Label TextBox " & X
.Left = VLblLeft: .Top = TopPlusHeight: .Width = LblWidth: .Height = LblHeigth
.Tag = "Thierry's Demo"
.Name = "LblDemo" & X
End With
With ObjTextBox
.Left = VTxbLeft: .Top = TopPlusHeight: .Width = TxbWidth: .Height = TxbHeigth
.Tag = "Thierry's Demo"
.Name = "TxbDemo" & X
' .TextAlign = fmTextAlignRight
End With
TopPlusHeight = TopPlusHeight + 15
Next
VBA.UserForms.Add(ObjUSF.Name).Show
Set ObjUSF = Nothing
Set ObjTextBox = Nothing
Set ObjLabel = Nothing
End Sub