Comment créer un formulaire dans Microsoft Excel
Le formulaire de réservation de cours est un formulaire simple illustrant les principes de conception de UserForm et le codage VBA associé.
Il utilise une sélection de contrôles comprenant des zones de texte, des zones de liste déroulante, des boutons d’option regroupés dans un cadre, des cases à cocher et des boutons de commande.
Lorsque l’utilisateur clique sur le bouton OK, son entrée est entrée dans la prochaine ligne disponible sur la feuille de calcul.
Description du formulaire Excel:
Il existe deux zones de texte simples (Name: _ et _Phone: _) dans lesquelles l’utilisateur peut taper du texte libre, et deux zones de liste déroulante (_Department et Course)
qui permettent à l’utilisateur de choisir un élément dans la liste.
Il existe trois boutons d’option (Introduction, Intermédiaire et Avancé) regroupés dans un cadre (Niveau) afin que l’utilisateur ne puisse choisir qu’une seule des options.
Il existe deux cases à cocher (Lunch Required et Vegetarian) qui, parce qu’elles ne sont pas regroupées dans un cadre, peuvent toutes deux être sélectionnées si nécessaire.
Cependant, si la personne effectuant la réservation ne veut pas de déjeuner, nous n’avons pas besoin de savoir si elle est végétarienne ou non. Ainsi, la case à cocher Végétarien est grisée jusqu’à ce qu’elle soit requise.
Il existe trois boutons de commande (OK, Cancel et Clear Form) dont chacun exécute une fonction prédéfinie lorsque vous cliquez dessus.
Les paramètres des propriétés de contrôle:
Control |
Type |
Property |
Setting |
UserForm |
UserForm |
Name |
frmCourseBooking |
Caption |
Course Booking Form |
||
Name |
Text Box |
Name |
txtName |
Phone |
Text Box |
Name |
txtPhone |
Department |
Combo Box |
Name |
cboDepartment |
Course |
Combo Box |
Name |
cboCourse |
Level |
Frame |
Name |
fraLevel |
Caption |
Level |
||
Introduction |
Option Button |
Name |
optIntroduction |
Intermediate |
Option Button |
Name |
optIntermediate |
Advanced |
Option Button |
Name |
optAdvanced |
Lunch Required |
Check Box |
Name |
chkLunch |
Vegetarian |
Check Box |
Name |
chkVegetarian |
Enabled |
False |
||
OK |
Command Button |
Name |
cmdOk |
Caption |
OK |
||
Default |
True |
||
Cancel |
Command Button |
Name |
cmdCancel |
Caption |
Cancel |
||
Cancel |
True |
||
Clear Form |
Command Button |
Name |
cmdClearForm |
=== Création de formulaires dans Excel Si vous souhaitez créer le formulaire vous-même, copiez simplement la mise en page présentée dans l’illustration ci-dessus. Suivez les étapes ci-dessous:
-
Ouvrez le classeur auquel vous souhaitez que le formulaire appartienne (UserForms comme les macros doivent être attachés à un classeur) et basculez vers Visual Basic Editor.
-
Dans Visual Basic Editor, cliquez sur le bouton Insérer UserForm (ou accédez à Insertion> UserForm).
-
Si la boîte à outils n’apparaît pas d’elle-même (cliquez d’abord sur le formulaire pour vous assurer qu’il ne se cache pas), cliquez sur le bouton Boîte à outils (ou allez dans Affichage> Boîte à outils).
-
Pour placer un contrôle sur le formulaire, cliquez sur le bouton approprié de la boîte à outils, puis cliquez sur le formulaire. Les contrôles peuvent être déplacés en les faisant glisser par leurs bords ou redimensionnés en faisant glisser les boutons autour de leur périmètre.
-
Pour modifier les propriétés d’un contrôle, assurez-vous que le contrôle choisi est sélectionné, puis effectuez les modifications appropriées dans la fenêtre Propriétés. Si vous ne voyez pas la fenêtre des propriétés, allez dans Affichage> Fenêtre Propriétés.
-
Pour supprimer un contrôle du formulaire, sélectionnez-le et cliquez sur la touche Suppr de votre clavier.
Un UserForm ne fera rien tant que le code qui pilote le formulaire et ses divers contrôles ne sera pas créé. L’étape suivante consiste à écrire le code qui pilote le formulaire lui-même.
Ajout du code: 1 Initialisation du formulaire === == Initialisation du formulaire:
La plupart des formulaires nécessitent une configuration lors de leur ouverture. Il peut s’agir de définir les valeurs par défaut, de s’assurer que le champ est vide ou de créer les listes de zones de liste déroulante. Ce processus s’appelle Initialiser le formulaire et il est pris en charge par une macro appelée UserForm_Initialize (au cas où vous seriez confus par mon orthographe variable du mot « initialis (z) e », c’est parce que je parle anglais et VBA parle américain – mais ne vous inquiétez pas, VBA l’épellera pour vous!). Voici comment créer le code pour initialiser le formulaire de réservation de cours:
-
Pour afficher la fenêtre de code du formulaire, accédez à Affichage> Code ou cliquez sur F7.
-
Lorsque la fenêtre de code s’ouvre pour la première fois, elle contient une procédure UserForm_Click () vide. Utilisez les listes déroulantes en haut de la fenêtre de code pour choisir UserForm et Initialize. Cela créera la procédure dont vous avez besoin. Vous pouvez maintenant supprimer la procédure UserForm_Click ().
-
Saisissez le code suivant dans la procédure:
Private Sub UserForm_Initialize() txtName.Value = "" txtPhone.Value = "" With cboDepartment .AddItem "Sales" .AddItem "Marketing" .AddItem "Administration" .AddItem "Design" .AddItem "Advertising" .AddItem "Dispatch" .AddItem "Transportation" End With cboDepartment.Value = "" With cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" End With cboCourse.Value = "" optIntroduction = True chkLunch = False chkVegetarian = False txtName.SetFocus End Sub
Comment fonctionne le code d’initialisation:
Le but de la procédure UserForm_Initialize () est de préparer le formulaire utilisateur dans VBA pour l’utilisation, en définissant les valeurs par défaut pour les différents contrôles et en créant les listes que les zones de liste déroulante afficheront.
Ces lignes définissent le contenu des deux zones de texte sur vide:
txtName.Value = "" txtPhone.Value = ""
Viennent ensuite les instructions pour les combos. Tout d’abord, le contenu de la liste est spécifié, puis la valeur initiale de la zone de liste déroulante est définie sur vide.
With cboDepartment .AddItem "Sales" .AddItem "Marketing" (as many as necessary…) End With
cboDepartment.Value = « »
Si nécessaire, un premier choix peut être fait dans le groupe d’options, dans ce cas:
optIntroduction = True Les deux cases à cocher sont définies sur False (c’est-à-dire pas de coche). Réglez sur True si vous voulez que la case à cocher apparaisse déjà cochée:
chkLunch = False chkVegetarian = False Enfin, le focus est porté sur la première zone de texte. Cela place le curseur des utilisateurs dans la zone de texte afin qu’ils n’aient pas besoin de cliquer sur la case avant de commencer à taper:
txtName.SetFocus === Ajout du code: 2 Faire fonctionner les boutons Il y a trois boutons de commande sur le formulaire et chacun doit être alimenté par sa propre procédure. En commençant par les plus simples…
Codage du bouton Annuler:
Auparavant, nous avons utilisé la fenêtre Propriétés pour définir la propriété Annuler du bouton Annuler sur True. Lorsque vous définissez la propriété Annuler d’un bouton de commande sur True, cela a pour effet de «cliquer» sur ce bouton lorsque l’utilisateur appuie sur la touche Échap de son clavier. Mais cela seul ne fera rien arriver à la forme. Vous devez créer le code de l’événement de clic du bouton qui, dans ce cas, fermera le formulaire. Voici comment:
-
Avec l’UserForm ouvert pour modification dans Visual Basic Editor, double-cliquez sur le bouton Annuler. La fenêtre de code du formulaire s’ouvre avec la procédure cmdCancel_Click () prête à être modifiée.
-
Le code de fermeture d’un formulaire est très simple. Ajoutez une ligne de code à la procédure pour qu’elle ressemble à ceci:
Private Sub cmdCancel_Click() Unload Me End Sub
Codage du bouton Effacer le formulaire:
J’ai ajouté un bouton pour effacer le formulaire au cas où l’utilisateur voudrait changer d’avis et tout réinitialiser, et pour le rendre plus facile s’il avait plusieurs réservations à faire en même temps. Il suffit d’exécuter à nouveau la procédure d’initialisation. Une macro peut être appelée à exécuter une autre macro (ou une série de macros si nécessaire) en utilisant le mot clé Call:
-
Double-cliquez sur le bouton Effacer le formulaire. La fenêtre de code du formulaire s’ouvre avec la procédure cmdClearForm_Click () prête à être modifiée.
-
Ajoutez une ligne de code à la procédure pour qu’elle ressemble à ceci:
Private Sub cmdClearForm_Click() Call UserForm_Initialize End Sub
Codage du bouton OK:
C’est le morceau de code qui doit faire le travail de transfert des choix de l’utilisateur et de la saisie de texte sur la feuille de calcul. Lorsque nous définissons la propriété Cancel du bouton Annuler sur True, nous définissons également la propriété Default du bouton OK sur True. Cela consiste à cliquer sur le bouton OK lorsque l’utilisateur appuie sur la touche Entrée (ou Retour) de son clavier (à condition qu’il n’ait pas utilisé sa touche Tab pour passer à un autre bouton).
Voici le code pour faire fonctionner le bouton:
-
Double-cliquez sur le bouton OK. La fenêtre de code du formulaire s’ouvre avec la procédure cmdOK_Click () prête à être modifiée.
-
Modifiez la procédure pour ajouter le code suivant:
Private Sub cmdOK_Click() ActiveWorkbook.Sheets("Course Bookings").Activate Range("A1").Select Do If IsEmpty(ActiveCell) = FalseThen ActiveCell.Offset(1, 0).Select End If Loop Until IsEmpty(ActiveCell) = True ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Else ActiveCell.Offset(0, 4).Value = "Adv" End If If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Yes" Else ActiveCell.Offset(0, 5).Value = "No" End If If chkVegetarian = True Then ActiveCell.Offset(0, 6).Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Value = "No" End If End If Range("A1").Select End Sub
Comment fonctionne le code CmdOK_Click:
Les deux premières lignes vérifient que le bon classeur est actif et déplace la sélection vers la cellule A1:
ActiveWorkbook.Sheets("Course Bookings").Activate Range("A1").Select The next few lines moves the selection down the worksheet until it finds an empty cell: Do If IsEmpty(ActiveCell) = False Then ActiveCell.Offset(1, 0).Select End If Loop Until IsEmpty(ActiveCell) = True
Les quatre lignes suivantes commencent à écrire le contenu du formulaire sur la feuille de calcul, en utilisant la cellule active (qui se trouve dans la colonne A) comme référence et en déplaçant _ le long de la ligne_ une cellule à la fois:
ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value
Nous arrivons maintenant aux boutons d’option. Ceux-ci ont été placés dans un cadre sur le formulaire afin que l’utilisateur ne puisse en choisir qu’un seul. Une instruction IF est utilisée pour indiquer à Excel quoi faire pour chaque option:
If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Else ActiveCell.Offset(0, 4).Value = "Adv" End If
Les instructions VBA IF sont beaucoup plus faciles à gérer que la fonction IF d’Excel.
Vous pouvez avoir autant d’options que vous le souhaitez, insérez simplement un ElseIf supplémentaire pour chacune. S’il n’y avait que deux options, vous n’auriez pas besoin de ElseIf, seuls les If et Else suffiraient (n’oubliez pas – ils ont tous besoin d’un End If).
Il existe une autre instruction IF pour chaque case à cocher. Pour la case à cocher Déjeuner requis, une coche dans la case signifie «Oui», la personne a besoin de déjeuner, et aucune coche signifie «Non».
If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Yes" Else ActiveCell.Offset(0, 5).Value = "No" End If
Nous pourrions utiliser une instruction IF similaire pour la case à cocher Végétarien, mais si la personne n’a pas besoin de déjeuner, il est indifférent qu’elle soit végétarienne ou non. En tout cas, il serait faux de supposer qu’ils n’étaient pas végétariens simplement parce qu’ils n’avaient pas besoin de déjeuner. L’instruction IF contient donc une seconde instruction if imbriquée:
If chkVegetarian = True Then ActiveCell.Offset(0, 6).Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Value = "No" End If End If
Une coche dans la case signifie «Oui», la personne est végétarienne. S’il n’y a pas de coche dans la case, l’instruction IF imbriquée regarde la case à cocher Déjeuner requis. Si la case à cocher Déjeuner requis est cochée, aucune coche dans la case à cocher Végétarien signifie que la personne n’est pas végétarienne et insère donc «Non» dans la cellule. Cependant, si la case à cocher Déjeuner requis n’est pas cochée, alors nous ne savons pas si la personne est végétarienne ou non (cela n’a pas d’importance de toute façon) donc la cellule est laissée vide (« »).
Enfin, la sélection est ramenée au début de la feuille de calcul, prête pour l’entrée suivante:
Plage (« A1 »). Sélectionnez === Ajout du code 3: Manipulation du formulaire Enfin, un exemple de la manière dont les contrôles d’un formulaire peuvent être manipulés pendant son utilisation. Lorsque les propriétés du contrôle ont été définies, la propriété Enabled de la case à cocher Végétarien a été définie sur False. Lorsqu’un contrôle n’est pas activé, user ne peut pas y entrer de valeur, bien qu’il puisse contenir une valeur qui s’y trouvait déjà, et VBA peut ajouter, supprimer ou modifier la valeur.
Nous n’avons pas besoin de savoir si la personne est végétarienne (même si c’est le cas!) Si elle ne commande pas le déjeuner. Ainsi, la case à cocher Végétarien reste désactivée sauf si une coche est placée dans la case à cocher Déjeuner requis. Ensuite, l’utilisateur est libre de cocher la case Végétarien s’il le souhaite. S’ils le cochent, nous saurons qu’ils ont répondu «Oui» et s’ils ne le font pas, nous savons qu’ils ont répondu «Non».
Nous pouvons faire basculer la propriété Enabled de False à True en ayant une procédure qui s’exécute automatiquement chaque fois que la valeur de la case à cocher Lunch Required change. Heureusement, plus de contrôles ont une procédure Change et celle que nous utilisons ici est chkLunch_Change (). Nous allons l’utiliser pour activer la case à cocher Végétarien lorsque la case Déjeuner requis est cochée, et la désactiver lorsque la case Déjeuner requis n’est pas cochée.
Il nous reste encore une chose à faire. Supposons que quelqu’un ait coché la case Déjeuner requis et coché également la case Végétarien. Ensuite, ils ont changé d’avis et ont retiré la coche de la case à cocher Déjeuner requis. La case à cocher Végétarien serait désactivée mais la coche insérée précédemment resterait.
Une ligne de code supplémentaire peut garantir que la coche est supprimée lorsque la case est désactivée. Voici le tout:
Private Sub chkLunch_Change() If chkLunch = True Then chkVegetarian.Enabled = True Else chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Ouverture du formulaire Le formulaire est maintenant prêt à être utilisé, il doit donc être ouvert avec une simple macro. Cela peut être attaché à un bouton de barre d’outils personnalisé, à un bouton de commande dessiné sur la feuille de calcul ou à n’importe quel graphique (cliquez avec le bouton droit sur le graphique et choisissez Attribuer une macro). Si nécessaire, créez un nouveau module pour le classeur et ajoutez cette procédure:
Sub OpenCourseBookingForm() frmCourseBooking.Show End Sub
Si vous avez aimé nos blogs, partagez-les avec vos amis sur Facebook. Et vous pouvez aussi nous suivre sur Twitter et Facebook.
Nous serions ravis de vous entendre, faites-nous savoir comment nous pouvons améliorer, compléter ou innover notre travail et le rendre meilleur pour vous. Écrivez-nous à [email protected]