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:

Excel VBA Interactive Userform

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.

  1. Ouvrez le Visual Basic Editor. Si l’Explorateur de projets n’est pas visible, cliquez sur Afficher, Project Explorer.

  2. 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.

Userform Screen Setup in Excel VBA

  1. 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.

  2. 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.

  3. 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.

  1. Ouvrez Visual Basic Editor.

  2. Dans l’Explorateur de projets, cliquez droit sur UserForm1 puis cliquez sur Afficher le code.

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

  4. 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.

  1. Dans l’Explorateur de projets, cliquez droit sur UserForm1 puis cliquez sur Afficher le code.

  2. Choisissez TextBox1 dans la liste déroulante de gauche. Choisissez le changement de la droite liste déroulante.

  3. Ajouter la ligne de code suivant:

Private Sub TextBox1_Change()

GetData

End Sub
  1. Dans l’Explorateur de projets, double-cliquez sur UserForm1.

  2. Double-cliquez sur le bouton Modifier / ajouter de commande.

  3. Ajouter la ligne de code suivant:

Private Sub CommandButton1_Click()

EditAdd

End Sub
  1. Double-cliquez sur le bouton de commande Effacer.

  2. 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.

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

  2. 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).

  1. 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
  1. 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.

  1. 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.

  1. 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é.

  1. Quittez l’éditeur Visual Basic, entrez les étiquettes ci-dessous dans les rangs 1 et tester la Userform.

Excel VBA Interactive Userform