Excel VBA Interactive Userform
Ci-dessous, nous examinerons un programme dans Excel VBA qui crée une Userform interactive. Le Userform nous allons créer se présente comme suit:
Explication: chaque fois que vous entrez une valeur dans la zone de texte ID, Excel charge VBA l’enregistrement correspondant. Lorsque vous cliquez sur Modifier / bouton Ajouter, les modifications Excel VBA 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 la Userform.
Pour créer cette Userform, exécutez les étapes suivantes.
-
Ouvrez le Visual Basic Editor. Si l’Explorateur de projets n’est pas visible, cliquez sur Afficher, Project Explorer.
-
Cliquez sur Insérer, Userform. Si la boîte à outils n’apparaît pas automatiquement, cliquez sur Affichage, Boîte à outils. Votre écran doit être configuré comme ci-dessous.
-
Ajoutez les étiquettes, les zones de texte (premier en haut, le second en dessous du premier, et ainsi de suite) et les boutons de commande. Une fois cet exercice terminé, le résultat devrait être compatible avec l’image du Userform indiqué précédemment. Par exemple, créez un contrôle de zone de texte en cliquant sur TextBox de la boîte à outils. Ensuite, vous pouvez faire glisser une zone de texte sur la Userform.
-
Vous pouvez modifier les noms et les légendes des contrôles. Les noms sont utilisés dans le code VBA Excel. Les légendes sont celles qui apparaissent sur votre écran. Il est bon de changer les noms des contrôles, mais il est pas nécessaire ici parce que nous avons seulement quelques contrôles dans cet exemple. Pour modifier la légende des étiquettes, des zones de texte et des boutons de commande, cliquez sur Affichage, fenêtre Propriétés et cliquez sur chaque contrôle.
-
Pour afficher le Userform, 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 la sous UserForm_Initialize. Lorsque vous utilisez la méthode Show pour la Userform, ce sous sera exécuté automatiquement.
-
Ouvrez Visual Basic Editor.
-
Dans l’Explorateur de projets, cliquez droit sur UserForm1 puis cliquez sur Afficher le code.
-
Choisissez Userform dans la liste déroulante de gauche. Choisissez Initialiser de la droite liste déroulante.
-
Ajoutez la ligne de code suivant:
Private Sub UserForm_Initialize() TextBox1.SetFocus End Sub
Explication: cette ligne de code définit le focus sur la première zone de texte que c’est là que nous voulons commencer lorsque le Userform est chargé.
Nous avons créé la première partie de la Userform. Bien qu’il semble déjà soignée, rien ne se passera encore lorsque nous entrons dans une valeur dans la zone de texte ID ou lorsque l’on clique sur un des boutons de commande.
-
Dans l’Explorateur de projets, cliquez droit sur UserForm1 puis cliquez sur Afficher le code.
-
Choisissez TextBox1 dans la liste déroulante de gauche. Choisissez le changement de la droite liste déroulante.
-
Ajouter la ligne de code suivant:
Private Sub TextBox1_Change() GetData End Sub
-
Dans l’Explorateur de projets, double-cliquez sur UserForm1.
-
Double-cliquez sur le bouton Modifier / ajouter de commande.
-
Ajouter la ligne de code suivant:
Private Sub CommandButton1_Click() EditAdd End Sub
-
Double-cliquez sur le bouton de commande Effacer.
-
Ajouter la ligne de code suivant:
Private Sub CommandButton2_Click() ClearForm End Sub
Explication: ces sous-marins appellent d’autres sous-marins que nous allons créer dans une seconde.
-
Double-cliquez sur le bouton de commande Fermer.
-
Ajoutez la ligne de code suivant:
Private Sub CommandButton3_Click() Unload Me End Sub
Explication: cette ligne de code ferme la Userform.
Il est temps de créer les sous-marins. Vous pouvez passer par notre fonction et sous chapitre pour en savoir plus sur les sous-marins. Si vous êtes pressé, il suffit de placer les sous-marins suivants dans un module (Dans l’éditeur Visual Basic, cliquez sur Insérer, Module).
-
En premier lieu, déclarer trois variables de type Integer et une variable de type booléen. Déclarer les variables dans la section Déclarations générale (dans la partie supérieure du module). De cette façon, il suffit de déclarer les variables une fois et vous pouvez les utiliser dans plusieurs sous-marins.
Dim id As Integer, i As Integer, j As Integer, flag As Boolean
-
Ajouter le sous 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 le dossier correspondant. Nous utilisons le lien: / vba-exemples de contrôle-collection [Controls Collection]
à boucle facilement dans des zones de texte. Si Excel VBA ne peut pas trouver l’ID (drapeau est toujours faux), il vide la deuxième et la troisième zone de texte. Si la zone de texte ID ne contient pas une valeur numérique, Excel VBA appelle le sous ClearForm.
-
Ajouter le sous 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.
-
Ajouter 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 est pas vide, les modifications Excel VBA l’enregistrement sur la feuille (à l’opposé de chargement d’un dossier comme nous l’avons vu plus haut).
Si Excel VBA ne peut pas trouver l’ID (drapeau est toujours faux), il ajoute l’enregistrement à la ligne suivante vide. La emptyRow variable est la première ligne vide et augmente chaque fois qu’un enregistrement est ajouté.
-
Quittez l’éditeur Visual Basic, entrez les étiquettes ci-dessous dans les rangs 1 et tester la Userform.