Afficher un message
Vieux 16/12/2005, 18h42   #4 (permalink)
_Thierry
XLDnaute Barbatruc
 
Date d'inscription: février 2005
Messages: 3 099
Par défaut Re:Sondage via userform : pb de taille

Bonjour Juliette, Toutou, le Forum

Pas vraiment sûr d'avoir compris, mais si on veut se faciliter la tache on peut faire ce genre de codes après avoir vérifier d'avoir activer la référence à 'Microsoft Forms 2.0 Object Library'


Par exemple ce code va générer tout seul un UserForm avec 40 TextBox mesurées, alignées, nommées etc, avec 40 label alignés aussi...


Citation:
OptionExplicit


Const Sign AsString = ''Thierry 's Truc sur www.Excel-Downloads.com, March 2005'

Const TxbWidth AsInteger = 65
Const TxbHeigth AsInteger = 15
Const TxbLeft AsInteger = 90
Const TxbTop AsInteger = 15

Const LblWidth AsInteger = 70
Const LblHeigth AsInteger = 15
Const LblLeft AsInteger = 10
Const LblTop AsInteger = 15

Sub MyUserFormAutoBuilder()
Dim ObjUSF AsObject
Dim ObjTextBox As Object, ObjLabel As Object, CmdB As Object, LstB AsObject
Dim TopPlusHeight AsInteger
Dim X AsByte
Dim VLblLeft AsInteger
Dim VTxbLeft AsInteger
*
*
Set ObjUSF = ThisWorkbook.VBProject.VBComponents.Add(3)
*
With ObjUSF
* * .Properties('Caption') = Sign
* * .Properties('Width') = 660
* * .Properties('Height') = 195
* * .Properties('ShowModal') =
True
*
EndWith
*
* *
For X = 1 To 40
* * * *
* * *
Set ObjTextBox = ObjUSF.Designer.Controls.Add('Forms.TextBox.1')
* * *
Set ObjLabel = ObjUSF.Designer.Controls.Add('Forms.Label.1')
* * *
* * * * *
SelectCase 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
* * * * *
EndSelect
* * * * * * *
* * * * *
* * * * *
With ObjLabel
* * * * * * .Caption = 'Label TextBox ' & X
* * * * * * .Left = VLblLeft: .Top = TopPlusHeight: .Width = LblWidth: .Height = LblHeigth
* * * * * * .Tag = 'Thierry
's Demo'
* * * * * * .Name = 'LblDemo' & X
* * * * *
EndWith
* * * * *
With ObjTextBox
* * * * * * .Left = VTxbLeft: .Top = TopPlusHeight: .Width = TxbWidth: .Height = TxbHeigth
* * * * * * .Tag = 'Thierry
's Demo'
* * * * * * .Name = 'TxbDemo' & X
* * * * * * .TextAlign = fmTextAlignRight
* * * * *
EndWith
* * * * *
* * * * TopPlusHeight = TopPlusHeight + 15
* *
Next

VBA.UserForms.Add(ObjUSF.Name).Show
*
Set ObjUSF = Nothing
Set ObjTextBox = Nothing
Set ObjLabel = Nothing
EndSub

Pour un control Multipage, le 'passage' de page se fait en précisant sa valeur :

MultiPage1.Value = 0 'Pour la première page


Bonne Soirée je dois partir là
Et Bon Week End
[ol]@+Thierry[/ol]
_Thierry est déconnecté   Réponse avec citation