/ / Excel VBA Interactive Userform

Formulaire utilisateur interactif Excel VBA

Ci-dessous, nous examinerons un programme en Excel VBA qui crée un formulaire utilisateur interactif. Le formulaire utilisateur que nous allons créer se présente comme suit:

Formulaire utilisateur interactif Excel VBA

Explication: Chaque fois que vous entrez une valeur dans la zone de texte ID, Excel VBA charge l'enregistrement correspondant. Lorsque vous cliquez sur le bouton Modifier / Ajouter, Excel VBA modifie l'enregistrement sur la feuille ou ajoute l'enregistrement lorsque l'ID n'existe pas encore. Le bouton Effacer efface toutes les zones de texte. Le bouton Fermer ferme le Userform.

Pour créer ce Userform, exécutez les étapes suivantes.

1. Ouvrez Visual Basic Editor. Si l'explorateur de projet n'est pas visible, cliquez sur Affichage, Explorateur de projets.

2. Cliquez sur Insérer, Userform. Si la boîte à outils n'apparaît pas automatiquement, cliquez sur Affichage, Boîte à outils. Votre écran devrait être configuré comme ci-dessous.

Configuration de l'écran du formulaire utilisateur dans Excel VBA

3 Ajoutez les étiquettes, les zones de texte (la première en haut, la seconde en dessous de la première, etc.) et les boutons de commande. Une fois que cela est terminé, le résultat doit être cohérent avec l'image du Userform présentée précédemment. Par exemple, créez un contrôle de zone de texte en cliquant sur TextBox dans la Boîte à outils. Ensuite, vous pouvez faire glisser une zone de texte sur le Userform.

4 Vous pouvez modifier les noms et les légendes des contrôles. Les noms sont utilisés dans le code Excel VBA. Les légendes sont celles qui apparaissent sur votre écran. Il est judicieux de changer le nom des contrôles, mais cela n’est pas nécessaire ici car nous n’avons que quelques contrôles dans cet exemple. Pour modifier la légende des étiquettes, des zones de texte et des boutons de commande, cliquez sur Afficher, Fenêtre Propriétés, puis cliquez sur chaque contrôle.

5. Pour afficher le formulaire utilisateur, placez un bouton de commande sur votre feuille de calcul et ajoutez la ligne de code suivante:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Nous allons maintenant créer le Sub UserForm_Initialize. Lorsque vous utilisez la méthode Show pour Userform, ce sous-programme sera automatiquement exécuté.

6. Ouvrez Visual Basic Editor.

7. Dans l'Explorateur de projet, cliquez avec le bouton droit sur UserForm1, puis cliquez sur Afficher le code.

8. Choisissez Userform dans la liste déroulante de gauche. Choisissez Initialiser dans la liste déroulante de droite.

9. Ajoutez la ligne de code suivante:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Explication: cette ligne de code active la première zone de texte car c'est ici que nous voulons commencer lorsque Userform est chargé.

Nous avons maintenant créé la première partie du Userform. Bien que cela ait déjà l'air sympa, rien ne se passe pour le moment lorsque nous entrons une valeur dans la zone de texte ID ou lorsque nous cliquons sur l'un des boutons de commande.

10. Dans l'Explorateur de projet, cliquez avec le bouton droit sur UserForm1, puis cliquez sur Afficher le code.

11. Choisissez TextBox1 dans la liste déroulante de gauche. Choisissez Modifier dans la liste déroulante de droite.

12. Ajoutez la ligne de code suivante:

Private Sub TextBox1_Change()

GetData

End Sub

13. Dans l'Explorateur de projet, double-cliquez sur UserForm1.

14. Double-cliquez sur le bouton de commande Edition / Ajouter.

15. Ajoutez la ligne de code suivante:

Private Sub CommandButton1_Click()

EditAdd

End Sub

16. Double-cliquez sur le bouton de commande Effacer.

17. Ajoutez la ligne de code suivante:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Explication: ces sous-marins appellent d’autres sous-marins que nous allons créer dans une seconde.

18. Double-cliquez sur le bouton de commande Fermer.

19. Ajoutez la ligne de code suivante:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Explication: cette ligne de code ferme le Userform.

Il est temps de créer les sous-marins. Vous pouvez consulter notre chapitre Fonction et Sous-chapitre pour en savoir plus sur les sous-programmes. Si vous êtes pressé, placez simplement les sous-programmes suivants dans un module (dans Visual Basic Editor, cliquez sur Insertion, Module).

20 Commencez par déclarer trois variables de type Integer et une variable de type Boolean. Déclarez les variables dans la section Déclarations générales (en haut du module). De cette façon, vous ne devez déclarer les variables qu’une seule fois et vous pouvez les utiliser dans plusieurs sous-marins.

Dim id As Integer, i As Integer, j As Integer, flag As Boolean

21. Ajoutez le sous-fichier GetData.

Sub GetData()

If IsNumeric(UserForm1.TextBox1.Value) Then
    flag = False
    i = 0
    id = UserForm1.TextBox1.Value

    Do While Cells(i + 1, 1).Value <> ""

        If Cells(i + 1, 1).Value = id Then
            flag = True
            For j = 2 To 3
                UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value
            Next j
        End If

        i = i + 1

    Loop

    If flag = False Then
        For j = 2 To 3
            UserForm1.Controls("TextBox" & j).Value = ""
        Next j
    End If

Else
    ClearForm
End If

End Sub

Explication: Si la zone de texte ID contient une valeur numérique, Excel VBA recherche l'ID et charge l'enregistrement correspondant. Nous utilisons la collection Controls pour parcourir facilement les zones de texte. Si Excel VBA ne parvient pas à trouver l'ID (l'indicateur est toujours Faux), il vide les deuxième et troisième zones de texte. Si la zone de texte ID ne contient pas de valeur numérique, Excel VBA appelle le sous-élément ClearForm.

22. Ajoutez le sous-formulaire ClearForm.

Sub ClearForm()

For j = 1 To 3
    UserForm1.Controls("TextBox" & j).Value = ""
Next j

End Sub

Explication: Excel VBA efface toutes les zones de texte.

23. Ajoutez le sous EditAdd.

Sub EditAdd()

Dim emptyRow As Long

If UserForm1.TextBox1.Value <> "" Then
    flag = False
    i = 0
    id = UserForm1.TextBox1.Value
    emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1

    Do While Cells(i + 1, 1).Value <> ""

        If Cells(i + 1, 1).Value = id Then
            flag = True
            For j = 2 To 3
                Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value
            Next j
        End If

        i = i + 1

    Loop

    If flag = False Then
        For j = 1 To 3
            Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value
        Next j
    End If

End If

End Sub

Explication: Si la zone de texte ID n'est pas vide, Excel VBA modifie l'enregistrement sur la feuille (l'inverse du chargement d'un enregistrement, comme nous l'avons vu précédemment). Si Excel VBA ne parvient pas à trouver l'ID (l'indicateur est toujours Faux), il ajoute l'enregistrement à la ligne vide suivante. La variable emptyRow est la première ligne vide et augmente chaque fois qu'un enregistrement est ajouté.

24. Quittez Visual Basic Editor, entrez les étiquettes illustrées ci-dessous dans la rangée 1 et testez le Userform.

Formulaire utilisateur interactif Excel VBA

Lisez aussi: