'/// Remarque PMO : c'est ici qu'il faut adapter le nom du UserForm ///
Const USFName As String = "Etage6_" 'adaptez "Etage6_" au nom souhaité
'//////////////////////////////////////////////////////////////////////
Const Sign As String = "@+Thierry 's Truc sur www.Excel-Downloads.com, Aug 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
'--- Ajouts ou modifications PMO ---
Dim suffixe&
Randomize Timer
suffixe& = Int((2 ^ 24 * Rnd) + 1)
For Each ObjUSF In ThisWorkbook.VBProject.VBComponents
If Left(ObjUSF.Name, Len(USFName)) = USFName Then
ThisWorkbook.VBProject.VBComponents.Remove VBComponent:=ObjUSF
Exit For
End If
Next ObjUSF
'---------------------------------
Set ObjUSF = ThisWorkbook.VBProject.VBComponents.Add(3)
With ObjUSF
.Properties("Caption") = Sign
.Properties("Width") = 660
.Properties("Height") = 195
.Properties("ShowModal") = True
'--- Modification PMO - laissez en place la constante USFName, ne la modifiez qu'au ---
'--- niveau de sa déclaration (voir, au début du code, Const USFName As String ) ---
.Properties("Name") = USFName & suffixe& 'Si on veut forcer un Nom de UserForm...
'--------------------------------------------------------------------------------------
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 = 3
End With
TopPlusHeight = TopPlusHeight + 15
Next
MyLabelClicks ObjUSF.Name
VBA.UserForms.Add(ObjUSF.Name).Show
Set ObjUSF = Nothing
Set ObjTextBox = Nothing
Set ObjLabel = Nothing
End Sub