=> Cadeau "UserForm en Chocolat Automatique" !!!
Bonsoir Iffic, Michel, Hervé, Boudoula, le Fil, le Forum
Pour commencer, je m'excuse j'étais Off Today, et donc je ne me suis pas approché d'un ordi jusqu'à maintenant.
Hier soir je blaquais, j'avais bien compris que les boutons ne fesaient rien !!! lol
Bon sinon pour répondre concrètement à Hervé, je fais pas mal de Développement Informatique puisque c'est mon job et par conséquent, j'en fabrique par 13 à la douzaine des UserForms, et de toutes les Formes...
Rien qu'ici vous en avez un aperçu !
Les UserForms VB et surtout VBA Excel sont bien pratiques et j'en use et abuse, mais il est évident que de placer 40 TextBox alignées au poil de, arf enfin vous avez compris, donc bien rangées et aussi bien nommées dans l'odre de présentation comprenant aussi un Tag, et ayant un Label correspondant pour chacune est assez fastidieux...
Dans pas mal de démos que j'ai publiées ici, notamment les 'mass CheckBox', je n'ai pas le temps pour dessiner en mode Design 40 ou 80 Controls, ni, non plus leur écrire un code évènementiel à chacun...
Donc pour ces fêtes de Pâques, je vous donne mon astuce de Développeur d'Oeuf...
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...
Option Explicit
Const Sign As String = ''Thierry 's Truc sur www.Excel-Downloads.com, 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
Bien sur, si il faut ensuite générer des macros évènementielles pour chcune de ces TextBoxs, voici comment je m'y prends
Sub MacroWrite() 'lol !!
Dim I As Byte
Dim MyString As String
For I = 1 To 40
MyString = MyString & 'Private Sub TxbDemo' & I & '_Change()' & vbCrLf & _
'TheTextBoxChecker' & ' ' & I & vbCrLf & _
'End Sub' & vbCrLf & vbCrLf
Next
With New DataObject
.SetText MyString
.PutInClipboard
End With
End Sub
IL suffit ensuite de faire CTRL + V dans le Private Module et d'attribuer une macro comprenant le passage d'argument...
Voilà, je pense que ça va plaire à Iffic et que ça va répondre à cette question de 'non-développeur', on prend vite l'habitude de se simplifier le plus la vie pour pouvoir ensuite se la compliquer avec les codes eux-même !! lol
Bonne Soirée
@+Thierry