Créer des contrôles dynamiques sur un UserForm, Excel VBA

Créer des contrôles dynamiques sur un UserForm, Excel VBA

Voici un exemple détaillé pour créer des contrôles dynamiques sur un UserForm en Excel VBA. Ce code vous permet de créer des contrôles comme des TextBox, ComboBox, CommandButton, etc., au moment de l’exécution en fonction des données d’une feuille de calcul.
Étapes pour créer des contrôles dynamiques sur un UserForm :
1. Créer un UserForm :

  • Ouvrez l’éditeur VBA avec Alt + F11.
  • Insérez un UserForm en allant dans Insertion > UserForm.
  • Vous verrez un UserForm vide dans l’éditeur, sans contrôles au départ.

2. Création dynamique des contrôles :

  • Utilisez la méthode Controls.Add pour ajouter des contrôles comme des TextBox, ComboBox, etc., pendant l’exécution.

3. Ajuster les propriétés des contrôles :

  • Une fois qu’un contrôle est créé, vous pouvez modifier ses propriétés (par exemple, Top, Left, Width, Height, Name, etc.) pour adapter son apparence.

4. Positionnement dynamique :

  • Vous pouvez définir l’agencement des contrôles en calculant leurs positions et en les ajustant en fonction de la taille du formulaire ou d’autres conditions.

Exemple de code pour créer des contrôles dynamiques :
Cet exemple crée un UserForm avec des contrôles dynamiques en fonction des données présentes dans une feuille de calcul. Nous allons créer des TextBox et des CommandButton dynamiquement, en fonction du nombre de lignes de données dans la feuille.

Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim txtBox As MSForms.TextBox
    Dim cmdButton As MSForms.CommandButton
    ' Définir la feuille de calcul (vous pouvez choisir n'importe quelle feuille)
    Set ws = ThisWorkbook.Sheets("Feuil1")
    ' Trouver la dernière ligne avec des données dans la colonne A
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    ' Initialiser la position du haut pour les contrôles
    Dim topPosition As Integer
    topPosition = 10 ' Commencer à 10 pixels du haut
    ' Boucle à travers les lignes de données et créer les contrôles
    For i = 1 To lastRow
        ' Créer un TextBox
        Set txtBox = Me.Controls.Add("Forms.TextBox.1", "txtBox" & i, True)
        With txtBox
            .Top = topPosition
            .Left = 10
            .Width = 200
            .Height = 20
            .Text = ws.Cells(i, 1).Value ' Définir le texte du TextBox avec la donnée de la feuille
        End With
        ' Incrémenter la position du haut pour espacer les contrôles verticalement
        topPosition = topPosition + 25
        ' Créer un CommandButton
        Set cmdButton = Me.Controls.Add("Forms.CommandButton.1", "cmdButton" & i, True)
        With cmdButton
            .Top = topPosition
            .Left = 10
            .Width = 100
            .Height = 30
            .Caption = "Cliquez Moi " & i ' Définir le texte du bouton en fonction du numéro de ligne
            .OnClick = "CommandButtonClick" ' Lier à un gestionnaire d'événements (expliqué ci-dessous)
        End With
        ' Incrémenter la position du haut pour le prochain contrôle
        topPosition = topPosition + 40
    Next i
End Sub
' Gestionnaire d'événements pour le clic sur le bouton (vous pouvez ajouter cela dans le code du formulaire)
Private Sub CommandButtonClick()
    MsgBox "Vous avez cliqué sur un bouton !"
End Sub

Explication du Code :

  • UserForm_Initialize :
  • Cet événement est déclenché lorsque le UserForm est chargé. Il est utilisé pour créer des contrôles dynamiques en fonction des données de la feuille.
  • ws.Cells(ws.Rows.Count, "A").End(xlUp).Row permet de trouver la dernière ligne avec des données dans la colonne A, ce qui détermine le nombre de contrôles à créer.
  • La boucle parcourt les lignes de la feuille et crée un TextBox et un CommandButton pour chaque ligne.
  • Création Dynamique des Contrôles :
  • Me.Controls.Add est utilisé pour créer les contrôles. Il prend trois paramètres : le type de contrôle, un nom unique et un booléen indiquant si le contrôle doit être ajouté au UserForm.
  • Pour le TextBox : .Top et .Left définissent la position, .Width et .Height définissent la taille, et .Text définit le texte initial (basé sur les données de la feuille).
  • Pour le CommandButton : .Caption définit le libellé du bouton, et .OnClick est lié à une sous-routine pour gérer l’événement de clic du bouton.
  • Ajustement de la disposition :
  • La variable topPosition permet de positionner les contrôles les uns en dessous des autres avec un espace entre eux.

Concepts Clés :
1. Types de Contrôles :

  • Vous pouvez créer dynamiquement différents types de contrôles, comme des TextBox, ComboBox, Label, CommandButton, etc.

2. Positionnement :

  • Top et Left définissent la position du contrôle sur le UserForm. Vous pouvez ajuster ces valeurs pour créer un agencement en grille ou plus complexe.

3. Gestion des Événements :

  • Pour des contrôles dynamiques comme les CommandButton, vous pouvez lier un gestionnaire d’événements (par exemple, OnClick) pour gérer les interactions utilisateur.

4. Dimensionnement Dynamique :

  • Vous pouvez utiliser des logiques pour ajuster la taille et l’agencement des contrôles en fonction de la taille du formulaire ou du nombre de contrôles créés.

Améliorations Possibles :

  • Vous pouvez personnaliser le type de contrôles en fonction des besoins des utilisateurs, par exemple en utilisant des ComboBox pour des listes déroulantes.
  • Implémentez une logique de validation ou des fonctionnalités spécifiques dans les gestionnaires d’événements pour chaque contrôle.
  • Vous pouvez également ajouter des Labels dynamiques pour décrire chaque contrôle.

Ce code est un modèle de base. Selon vos besoins, vous pouvez l’améliorer avec des logiques plus complexes, des types de contrôles personnalisés et une gestion plus sophistiquée de la mise en page.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x