Excel · VBA · A3iformations

Les formulaires UserForm en VBA : créer, paramétrer et programmer les contrôles

Un formulaire (UserForm) est une boîte de dialogue que vous dessinez vous-même dans l’éditeur VBA : zones de texte, listes déroulantes, cases à cocher, boutons… Il guide la saisie, contrôle les valeurs et les écrit proprement dans la feuille. Chaque contrôle a des propriétés (Caption, Value, Enabled…) et déclenche des événements (Click, Change…) auxquels vous associez du code. Les simulateurs reproduisent l’éditeur : cliquez sur un contrôle pour lire ses propriétés, exécutez le formulaire, puis utilisez-le comme dans Excel. Voir aussi les boîtes de dialogue MsgBox et InputBox et les événements du classeur.

UserForm1.ShowAfficher
UserForm_InitializePréparer
CommandButton1_ClickRéagir
TextBox1.ValueLire la saisie
1

Créer un formulaire, modifier ses propriétés et l’activer

Dans l’éditeur VBA (Alt + F11), Insertion › UserForm crée un formulaire vide, UserForm1, et affiche la boîte à outils. On y choisit un contrôle, puis on le dessine sur le formulaire. La fenêtre Propriétés (F4) règle le nom, le texte, la couleur, la taille… du contrôle sélectionné. Un double-clic sur un contrôle ouvre le code du formulaire et crée sa procédure d’événement, par exemple CommandButton1_Click. Enfin, une macro d’un module standard affiche le formulaire avec UserForm1.Show.

ÉtapeDans l’éditeur VBA
CréerInsertion › UserForm ; Affichage › Boîte à outils si elle est masquée
DessinerCliquer sur un outil (Label, TextBox, CommandButton…), puis tracer le contrôle sur le formulaire
ParamétrerF4 : fenêtre Propriétés. Commencer par (Name) : txtNom, cmdValider…
ProgrammerDouble-clic sur le contrôle, ou F7 : code du formulaire, avec ses procédures d’événement
TesterF5 avec le formulaire sélectionné ; dans Excel, une macro UserForm1.Show affectée à un bouton
Instruction ou événementEffet
Load UserForm1Charge le formulaire en mémoire sans l’afficher : déclenche UserForm_Initialize
UserForm1.ShowAffiche le formulaire (le charge si besoin) ; modal : la macro attend sa fermeture. Déclenche UserForm_Activate
UserForm1.Show vbModelessAffichage non modal : la macro continue, l’utilisateur peut travailler dans Excel
Me.HideMasque le formulaire, qui reste chargé : les valeurs saisies sont conservées
Unload MeFerme et décharge le formulaire : déclenche QueryClose puis Terminate, les valeurs sont perdues
UserForm_QueryClose(Cancel, CloseMode)Avant la fermeture ; Cancel = True l’annule. CloseMode vaut vbFormControlMenu (0) pour la croix ✕
Simulateur : créer, paramétrer et activer UserForm1
Nommer les contrôlesDes préfixes rendent le code lisible : txt zone de texte, lbl label, cmd bouton, chk case, opt option, cbo liste déroulante, lst zone de liste. Renommez avant d’écrire le code.
Hide ou UnloadHide garde les valeurs pour la macro appelante ; Unload les efface. Lire un contrôle après Unload recharge un formulaire vierge.
MeDans le code du formulaire, Me désigne le formulaire lui-même : Me.Caption, Unload Me. Depuis un module, on écrit UserForm1.TextBox1.
2

Bouton de commande, label et zone de texte

Le bouton de commande (CommandButton) lance une action par son événement Click. Le label (intitulé) affiche un texte que l’utilisateur ne modifie pas : sa propriété Caption sert aussi à afficher un résultat. La zone de texte (TextBox) recueille une saisie, lue par sa propriété Value (ou Text) ; son événement Change se déclenche à chaque modification.

ContrôlePropriétés utilesÉvénements
CommandButtonCaption, Default (touche Entrée), Cancel (touche Échap), EnabledClick
LabelCaption, Font, ForeColor, BackStyle, BorderStyle, WordWrapClick
TextBoxValue / Text, MaxLength, PasswordChar, MultiLine, Locked, TextAlign ; méthode SetFocusChange, AfterUpdate, Exit
Simulateur : bouton, label et zones de texte
Du texte, pas un nombreUne zone de texte renvoie du texte : "2" + "3" donne 23. Convertissez avec Val, CDbl ou CLng après avoir testé IsNumeric.
Première ligne videCells(Rows.Count, 1).End(xlUp).Row + 1 renvoie la ligne sous la dernière valeur de la colonne A : chaque saisie s’ajoute à la suite.
3

Cases à cocher, boutons d’options, bouton bascule et cadre

Ces contrôles ont une propriété Value qui vaut True ou False. Les cases à cocher (CheckBox) sont indépendantes : on en coche autant qu’on veut. Les boutons d’options (OptionButton) s’excluent : un seul par groupe vaut True. Le groupe est défini par le conteneur, un cadre (Frame), ou par la propriété GroupName. Le bouton bascule (ToggleButton) reste enfoncé ou relâché, comme un interrupteur.

ContrôleRôleÀ retenir
CheckBoxOption oui / non indépendanteIf CheckBox1.Value Then … ; événements Click et Change
OptionButtonUn choix parmi plusieursUn seul True par cadre ou par GroupName
ToggleButtonInterrupteur enfoncé / relâchéValue True quand il est enfoncé ; on change souvent sa Caption
FrameCadre qui regroupe des contrôlesFrame1.Controls les parcourt ; Enabled et Visible s’appliquent à tout son contenu
Simulateur : cases, options, bascule et cadres
Toujours un choixMettez un bouton d’option à True dans UserForm_Initialize : le groupe a ainsi toujours une valeur.
Dessiner dans le cadreDessinez le cadre d’abord, puis les boutons à l’intérieur : ils appartiennent alors au cadre et forment un groupe indépendant des autres boutons d’options.
4

La liste déroulante (ComboBox) et la zone de liste (ListBox)

La liste déroulante (ComboBox) propose des valeurs dans une liste qui s’ouvre ; la zone de liste (ListBox) les affiche en permanence et peut autoriser plusieurs choix. On les remplit dans UserForm_Initialize, avec AddItem, avec un tableau (List) ou en les reliant à une plage de la feuille (RowSource).

MembreRôle
.AddItem "Excel"Ajoute un élément à la fin (ou à une position : .AddItem "Excel", 0)
.List = Array(…) / .List(i)Remplit toute la liste / lit l’élément d’index i
.RowSource = "Feuil1!A2:A6"Relie la liste à une plage (AddItem, RemoveItem et Clear deviennent impossibles)
.ListIndexIndex de l’élément choisi, à partir de 0 ; -1 si aucun choix
.ListCountNombre d’éléments
.ValueTexte de l’élément choisi (ou saisi dans une ComboBox)
.Style = fmStyleDropDownListComboBox fermée : choix dans la liste uniquement
.RemoveItem i / .ClearSupprime un élément / vide la liste
.MultiSelect / .Selected(i)ListBox à choix multiple / l’élément i est-il sélectionné ?
Simulateur : remplir et lire les listes
RowSource ou AddItemLes deux ne se combinent pas : avec RowSource renseigné, AddItem provoque l’erreur 70 « Permission refusée ».
Retrouver la ligneAvec une liste remplie depuis A2, la ligne de l’élément choisi est ListIndex + 2 : Cells(ComboBox1.ListIndex + 2, 2) lit sa colonne B.
5

Multipage, barre de défilement, toupie et image

Le contrôle multipage (MultiPage) répartit les contrôles sur plusieurs onglets. La barre de défilement (ScrollBar) et la toupie (SpinButton) font varier un nombre entre Min et Max sans saisie au clavier. Le contrôle image (Image) affiche un fichier chargé par LoadPicture.

ContrôlePropriétés utilesÉvénements
MultiPageValue = index de la page affichée (à partir de 0), Pages(i).Caption, Pages.CountChange
ScrollBarMin, Max, Value, SmallChange (flèches), LargeChange (clic dans la piste)Change, Scroll
SpinButtonMin, Max, Value, SmallChange ; souvent associée à une zone de texteChange, SpinUp, SpinDown
ImagePicture = LoadPicture(chemin), PictureSizeMode : Clip (0), Stretch (1), Zoom (3)Click
Simulateur : onglets, curseurs et image
Valeur hors limitesDonner à Value une valeur hors de Min et Max, ou un ListIndex inexistant, provoque l’erreur 380 « Valeur de propriété non valide ».
Chemin des imagesThisWorkbook.Path & "\logo.jpg" cherche l’image à côté du classeur ; testez sa présence avec Dir(…) <> "" pour éviter l’erreur 53.
Exercice : le formulaire d’inscription

Classeur d’exercice (Énoncé et Corrigé)

  1. Enregistrez le classeur en .xlsm, puis créez le formulaire frmInscription avec les contrôles listés dans la feuille « Formulaire » (noms et propriétés).
  2. Collez le code de la feuille « Code VBA » : la partie formulaire dans le code de frmInscription, la macro OuvrirInscription dans un module standard.
  3. Lancez OuvrirInscription : la liste des formations se remplit depuis la feuille Listes, la toupie règle le nombre de places.
  4. Inscrivez trois stagiaires : chaque validation ajoute une ligne dans la feuille Stagiaires. Testez les messages d’erreur (nom vide, aucune formation).
  5. Répondez aux questions de la feuille Contrôle ; le corrigé est dans la feuille Corrigé.
A3iformations · Organisme certifié Qualiopi · Centre de passage TOSA Interface Excel Microsoft 365 en français