Créer dynamiquement des contrôles dans un UserForm, Excel VBA

Créer dynamiquement des contrôles dans un UserForm, Excel VBA

Voici un code VBA détaillé pour créer dynamiquement des contrôles dans un UserForm sous Excel, accompagné d’une explication complète.
Code VBA pour Créer des Contrôles Dynamiques dans un UserForm
Ce code va créer un UserForm avec des étiquettes (Labels), des zones de texte (TextBox) et un bouton (Button) de manière dynamique lorsqu’il est exécuté.

Option Explicit
Dim NewForm As Object
Dim TxtBox As Object
Dim Lbl As Object
Dim Btn As Object
Sub CreateDynamicUserForm()
    Dim i As Integer
    Dim CodeModule As Object
    ' Créer le UserForm dynamiquement
    Set NewForm = ThisWorkbook.VBProject.VBComponents.Add(3) ' 3 correspond à un UserForm
    With NewForm
        .Properties("Caption") = "Dynamic UserForm"
        .Properties("Width") = 300
        .Properties("Height") = 250
    End With
    ' Boucle pour créer plusieurs TextBoxes et Labels
    For i = 1 To 3
        ' Créer l'étiquette (Label)
        Set Lbl = NewForm.Designer.Controls.Add("Forms.Label.1", "Label" & i, True)
        With Lbl
            .Caption = "Label " & i
            .Left = 20
            .Top = 20 + (i - 1) * 30
            .Width = 80
        End With
        ' Créer la zone de texte (TextBox)
        Set TxtBox = NewForm.Designer.Controls.Add("Forms.TextBox.1", "TextBox" & i, True)
        With TxtBox
            .Left = 110
            .Top = 20 + (i - 1) * 30
            .Width = 150
        End With
    Next i
    ' Créer le bouton de soumission (Submit Button)
    Set Btn = NewForm.Designer.Controls.Add("Forms.CommandButton.1", "btnSubmit", True)
    With Btn
        .Caption = "Submit"
        .Left = 100
        .Top = 120
        .Width = 100
    End With
    ' Ajouter un événement de clic pour le bouton via le CodeModule
    Set CodeModule = NewForm.CodeModule
    With CodeModule
        Dim Code As String
        Code = "Private Sub btnSubmit_Click()" & vbCrLf & _
               "   MsgBox ""You clicked Submit!""" & vbCrLf & _
               "End Sub"
        .InsertLines .CountOfLines + 1, Code
    End With
    ' Afficher le formulaire dynamiquement
End Sub

Explication du Code
1. Création dynamique de l’objet UserForm
Set NewForm = ThisWorkbook.VBProject.VBComponents.Add(3) ' 3 correspond à un UserForm

  • La fonction VBProject.VBComponents.Add(3) permet de créer dynamiquement un nouvel UserForm dans le projet VBA du classeur.
  • Le formulaire est stocké dans la variable NewForm.

2. Définir les propriétés du UserForm

With NewForm
    .Properties("Caption") = "Dynamic UserForm"
    .Properties("Width") = 300
    .Properties("Height") = 250
End With
  • Le titre (Caption) du formulaire est défini à « Dynamic UserForm ».
  • La largeur et la hauteur du formulaire sont spécifiées (300 x 250).

3. Boucle pour ajouter des Labels et des TextBoxes

For i = 1 To 3
    ' Créer l'étiquette (Label)
    Set Lbl = NewForm.Designer.Controls.Add("Forms.Label.1", "Label" & i, True)
    With Lbl
        .Caption = "Label " & i
        .Left = 20
        .Top = 20 + (i - 1) * 30
        .Width = 80
    End With
    • Une boucle s’exécute de 1 à 3 pour créer plusieurs Labels et TextBoxes.
    • La commande NewForm.Designer.Controls.Add("Forms.Label.1", "Label" & i, True) ajoute dynamiquement un Label.
    • La propriété Caption est définie à "Label i", et le label est positionné selon les coordonnées.
' Créer la zone de texte (TextBox) Set TxtBox = NewForm.Designer.Controls.Add("Forms.TextBox.1", "TextBox" & i, True) With TxtBox .Left = 110 .Top = 20 + (i - 1) * 30 .Width = 150 End With Next i
  • De manière similaire, des TextBoxes sont ajoutées à côté des Labels.

4. Création du bouton de soumission (Submit Button)

Set Btn = NewForm.Designer.Controls.Add("Forms.CommandButton.1", "btnSubmit", True)
With Btn
    .Caption = "Submit"
    .Left = 100
    .Top = 120
    .Width = 100
End With
  • Un bouton nommé "btnSubmit" est créé.
  • Le Caption du bouton est défini à "Submit", et il est positionné.

5. Ajouter le code VBA pour gérer le clic sur le bouton

Set CodeModule = NewForm.CodeModule
With CodeModule
    Dim Code As String
    Code = "Private Sub btnSubmit_Click()" & vbCrLf & _
           "   MsgBox ""You clicked Submit!""" & vbCrLf & _
           "End Sub"
    .InsertLines .CountOfLines + 1, Code
End With
  • L’objet CodeModule est utilisé pour insérer du code VBA dans le UserForm créé dynamiquement.
  • Un événement btnSubmit_Click est ajouté, affichant une MsgBox lorsqu’on clique sur le bouton.

6. Affichage du UserForm

  • Le UserForm créé dynamiquement est affiché à l’utilisateur.

Améliorations et Personnalisations
1. Création dynamique des contrôles :

  • Le nombre de TextBoxes et Labels peut être modifié en ajustant la limite de la boucle.

2. Améliorations de gestion des événements :

  • Il est possible d’ajouter d’autres événements comme le changement de texte (TextBox_Change) ou la sortie du contrôle (TextBox_Exit).

3. Ajout de contrôles supplémentaires :

  • D’autres contrôles comme des ComboBox, CheckBox, ou des Frames peuvent être ajoutés de manière similaire.

4. Stockage des données du formulaire :

  • Les valeurs saisies dans les TextBoxes peuvent être stockées dans une feuille de calcul à la soumission.
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x