- Introduction
- Un premier userform ultrasimple
- Un exemple plus élaboré
- Créer l'interface
- Initialisation du userform
- Validation de données
- Transfert de données du userform vers la feuille
- Transfert de données de la feuille vers le formulaire
Introduction
Beaucoup d'utilisateurs d'excel pensent spontanément que leur "niveau en informatique" n'est pas assez bon pour se lancer dans un langage de programmation et de ce fait laissent tomber les merveilleux outils que sont les macros (langage VBA) et les userforms.
Au tout début de ce pas à pas, je leur propose de créer un userform ultrasimple juste pour démontrer que ce n'est vraiment pas insurmontable. Cependant, la création d'un userform nécessite quelques notions de base en langage macro ou VBA. La lecture du pas à pas sur ces notions est donc vivement recommandée à ceux qui n'ont jamais écrit une ligne de code.
Mon premier userform ultrasimple
Mettons directement les mains dans le cambouis !
Ouvre un nouveau classeur excel et affiche l'éditeur VBA (alt+F11). Tu vois à gauche VBA project (classeur1). Fais un clic droit sur ce mot, insertion/userform. Tu vois apparaître : à gauche, un classeur nommé feuilles avec dedans un userform1 ; à droite un carré gris tristounet et une boite à outil. Si celle ci n'apparaissait pas, regarde dans le menu affichage/boite à outils. Dans cette boite se trouvent différents objets ou "contrôles" que l'on peut placer sur un userform. Chacun de ces contrôles permet d'effectuer un type d'opération. Les étiquettes (labels) permettent d'afficher du texte, les boites de texte (textbox) de faire entrer du texte à un utilisateur, les listes (listbox et combobox) de choisir un item dans une liste pré remplie, modifiable ou non, les boutons permettent de déclencher une action comme par exemple une validation de saisie. Il y a bien d'autres contrôles disponibles. Certains sont affichés par défaut mais en faisant un clic droit sur cette boite à outils tu peux accéder à d'autres contrôles. Pour le moment, nous allons juste placer un textbox et un bouton.

Pour voir ce que l'utilisateur aura en face de lui, appuie sur la touche F5. A ce stade tu as un textbox avec le curseur placé dedans, et un bouton. Tu peux saisir du texte dans ton textbox mais si tu cliques sur le bouton, il ne se passe... RIEN. Pour qu'il se passe quelque chose, il faut associer des instructions à ce userform. Ferme le userform avec la croix rouge et reviens dans l'éditeur VBA. Clique sur le bouton du userform pour le sélectionner. A gauche tu vois apparaître la fenêtre propriétés (si ce n'est pas le cas, affichage, fenêtre propriétés ou touche F4). Cette fenêtre liste les propriétés associées à l'objet sélectionné. Par défaut, excel appelle CommandButton les boutons. Tu peux changer ce nom (name) pour que ce soit plus parlant. Mais attention, pas d'espace et pas certains caractères particuliers dans le nom. Mais cela ne change pas le texte du bouton. Pour ça il faut modifier la propriété caption. Mets OK dedans par exemple. Les propriétés peuvent être modifiées de cette façon, mais également par programmation (à voir plus tard !). Nous allons maintenant faire en sorte que lorsque l'utilisateur appuie sur le bouton, le texte saisi dans le textbox soit entré dans la cellule A1 de la feuille 1. Si je double clique dans l'éditeur VBA sur le bouton, une nouvelle fenêtre s'ouvre avec dans la partie centrale ceci :
Private Sub CommandButton1_Click() End Sub
Les instructions associées au clic sur ce bouton seront insérées entre ces deux lignes.
La fenêtre qui s'est ouverte comporte en haut deux menus déroulants. Celui de droite comporte des actions. On parle plutôt d'événements. Chaque type de contrôle dispose d'une série d'événements qui lui sont associés. Sur un bouton, on peut cliquer, double cliquer, passer la souris dessus... Le menu de gauche permet de sélectionner les différents contrôles du userform ou le userform lui même. En jouant avec ces deux menus on a donc accès à l'ensemble des opérations que l'on peut piloter avec les contrôles présents sur le userform. On peut également accéder à cette fenêtre de programmation en faisant un clic droit sur le mot userform1 dans l'explorateur de projet puis afficher le code.
Pour s'y retrouver dans les différentes propriétés et méthodes ou événements associés à un contrôle, lorsque l'on programme, on associe les deux comme on le fait en bon français en mettant un nom et un adjectif qualificatif. Pour que ce soit encore plus simple, on met un point entre les deux : CommandButton1.Caption permet de manipuler le texte affiché sur le bouton. Chaque objet a une propriété par défaut. Par exemple pour un textbox c'est value. Cette propriété peut être omise mais personnellement, je préfère à des fins de clarté la mettre systématiquement même si c'est plus lourd. Si l'utilisateur entre coucou dans le textbox1, la valeur du textbox (value) est coucou. Je peux récupérer cette valeur et la mettre dans la feuille de calcul. Ça donne :
sheets("feuil1").range("A1").value=textbox1.value
Il me suffit de placer cette ligne de code dans la macro associée au bouton et lorsque l'utilisateur cliquera sur ce bouton, cette ligne de code sera effectuée ce qui mettra coucou en A1.
Private Sub CommandButton1_Click()
sheets("feuil1").range("A1").value=textbox1.value
End Sub
Et voilà ! Lance le userform (F5) et vérifie que tout fonctionne. C'est bon ? Alors tu es paré pour passer à la suite ! On va juste ajouter une petite chose pratique dans ce userform : comment l'afficher et comment le masquer ?
Pour le masquer c'est très simple. Dans le code de ton bouton, il te suffit de rajouter l'instruction userform1.hide. Tu peux aussi, pour le cas ou la feuille 1 n'aurait pas été la feuille active au moment ou le userform a été lancé, faire afficher cette page : sheets("feuil1").activate.
Pour permettre à l'utilisateur de lancer le userform, tu peux aussi ajouter un bouton sur la page avec les barres d'outils contrôles ou formulaires et mettre dans le code de ce bouton l'instruction userform1.show.
Voilà. Si tu as compris ça, le reste n'est que variation autour du même principe. Un contrôle, des propriétés, des événements et un peu de code pour lier tout ça. Après on peut mettre de la couleur, soigner la présentation, optimiser le code pour faire pro et qu'il soit rapide mais fondamentalement il n'y a rien de bien plus sorcier. L'exemple qui suit est un peu plus complexe. Il reprend aussi plus en détail les différents notions rapidement abordées dans ce premier exemple.
Un userform plus élaboré
Vous voulez gérer avec excel une petite base de données, pour collecter par exemple vos recettes de cuisine préférées. En effet, outre la recette à proprement parler, vous voulez pouvoir trier vos recettes par type de plat (viande, dessert..) ou par niveau de difficulté.
Bien sur vous pouvez faire un simple tableau dans excel avec des colonnes pour chaque rubrique (titre, type de plat, difficulté, temps de préparation...).
Mais l'interface n'est guère sympathique, que ce soit pour faire la saisie ou pour visualiser vos recettes, voire les imprimer.
Les userforms (nom anglophone) ou formulaires sont justement faits pour cela. Le terme de formulaire faisant très administratif en français est je trouve très mal choisi pour cette interface qui peut être très soignée et réussie. Vous trouverez quelques exemples à télécharger sur excelabo, notamment de Michel Pierron, qui vous en convaincront aisément ! Une petite remarque : bien que l'interface Visual basic (l'éditeur) soit francisée, le VBA (le code) nécessaire pour utiliser les userforms reste en anglais. Du coup les outils sont désignés dans l'interface par le nom français, dans le code par le nom anglais et dans l'aide en ligne tantôt par l'un tantôt par l'autre. Bien qu'aimant la langue de Molière, je ferai (hélas) de même dans ce texte. Le terme de "contrôle" est synonyme d'outils.
Le classeur exemple à télécharger peut vous sembler très complexe au premier abord. Cependant chaque notion peut être étudiée séparément. La première partie, associée au userform UsfNew est la plus simple. Les userforms UsfSelection et UsfSelect2 vous montrent comment faire choisir des critères à un utilisateur. Enfin le USfAffichage vous montre comment afficher dans un formulaire des données de la feuille excel.
Pour suivre la démarche nécessaire à la création de notre premier userform, je vais honteusement pomper des recettes sur cuisine.demey.org, le site de mon amie Sylvie, site que je vous recommande plus que chaleureusement, non seulement parce que c'est mon amie, mais aussi (et surtout pour vous qui ne la connaissez pas) parce que ses recettes sont délicieuses, qu'elle les a toutes testées chez elle et que, pour en avoir goûté un certain nombre, je sais de quoi je parle ! En prime, Sylvie est diététicienne alors on peut se laisser aller à la gourmandise presque sans complexe !
Prenons une recette simple, celle du gâteau de T'cil. Celle-ci je la connais bien, T'cil c'est ma fille et la remarque humoristique pour dire qu'il ne faut pas oublier la farine m'est destinée personnellement (je confirme, si vous n'oubliez pas la farine, ce gâteau est vraiment délicieux et très facile à faire !).
Une recette comporte un certain nombre de types de données : le titre, l'auteur, les ingrédients, la recette elle même, le type de plat, la date d'ajout, le temps de préparation, le temps de cuisson, le nombre de personnes et des commentaires ou compléments. On pourrait aussi ajouter la difficulté et le coût et mettre une photo pour rendre le tout plus alléchant.
Nous allons créer un userform qui reprenne ces différentes rubriques, ce qui nous permettra de voir les différents outils que l'on peut utiliser comme des listes déroulantes, des boites de texte, des cases à cocher...
Créer l'interface
Avant d'écrire une seule ligne de code, il faut commencer par oublier excel et se mettre dans la peau de l'utilisateur final. Idéalement un userform doit être utilisable par quelqu'un qui n'a jamais manipulé excel et n'a aucune envie d'apprendre autre chose de plus compliqué que de lancer l'application et de se mettre à ses fourneaux. On commence donc par réfléchir aux infos qui doivent être affichées et aux outils permettant d'accélérer la saisie de données. Il est plus facile par exemple de choisir le type de plat dans une liste plutôt que de le saisir en toutes lettres.
Ouvrez un nouveau classeur excel. Et ouvrez directement l'éditeur visual basic (alt+F11). Dans le projet associé au classeur vous n'avez que trois feuilles (si votre classeur en comporte 3) et une autre, notée ThisWorkbook. Dans le menu insertion, cliquez sur userform. Un carré plutôt triste s'ouvre, avec marqué "userform1". Nous allons le rendre plus gai !
Fenêtre propriétés
Commençons par nommer notre premier userform. Si la fenêtre propriétés n'est pas visible, affichez la (touche F4). Cliquez n'importe ou dans le userform.
La fenêtre propriétés affiche comme son nom l'indique toutes les propriétés qui sont modifiables pour un contrôle. Elle varie donc en fonction de l'élément actif. La zone de gauche indique le nom des propriétés et la zone de droite leur valeur. Certaines sont vides, vous pouvez par exemple entrer un texte, d'autres contiennent une liste des valeurs possibles. Si vous sélectionnez le nom d'une propriété et que vous tapez F1, vous ouvrez l'aide de visual basic associée à cette propriété. Usez et abusez de cette aide ! Cette fenêtre propriétés comporte deux onglets, listant les propriétés soit par ordre alphabétique soit par catégorie (apparence, comportement, position...).
Il y a bien trop de propriétés pour pouvoir toutes les décrire ici. Nous n'en verrons qu'une toute petite partie mais l'outil est puissant !
Dans la fenetre propriétés du userform, à côté de (name), tapez UsfNew. Il y a beaucoup de types de contrôles possibles. Pour s'y retrouver facilement, je vous conseille de faire toujours commencer le nom du contrôle (ici le userform lui même) par des lettres vous permettant d'identifier immédiatement dans votre code de quoi vous parlez. Mes userforms commencent tous par Usf. Un truc très pratique d'excel c'est qu'il reconnaît le nom des objets quand vous les tapez dans le code. Si vous avez créé un userform UsfNew (attention aux majucules), quand vous taperez usfnew dans votre code, excel mettra immédiatement les majuscules au bon endroit. Vous saurez ainsi que excel et vous, vous parlez bien de la même chose.
Le fait d'avoir changé le nom du userform n'a cependant pas changé ce qui s'inscrit en haut à gauche du formulaire lui même. Pour cela, il faut modifier la propriété "caption". Mettez "Ajouter une nouvelle recette".
On peut tout de suite modifier la taille du userform avec les poignées pour l'agrandir. Et tant qu'on y est lui mettre un joli fond coloré. Pour cela, allez dans la fenêtre propriétés et changez le background. Ouvrez l'onglet palette. Vous pouvez utiliser une des couleurs proposées par défaut ou créer la vôtre : faites un clic droit sur la palette, choisissez votre couleur puis ajoutez la à la palette.
Vous ne pouvez pas directement mettre un dégradé ou une image en fond de formulaire. Si vous voulez faire ça, il faudra recouvrir le formulaire avec un contrôle "image".
Boîte à outils
Si la boite à outils n'est pas affichée, faites le (menu affichage).

En promenant la souris sur les contrôles, leur nom français apparaît. C'est bien de les avoir traduits, mais comme le code VBA qui leur est associé reste en anglais, il est plus pratique de les désigner par leurs noms anglais, ce que je ferai dans la suite de ce texte, en indiquant au début la correspondance. D'ailleurs quand vous utilisez un de ces outils, par défaut, excel lui donne le nom anglais. Dans la boîte à outils standard, seuls les outils les plus courants sont présents. En faisant un clic droit sur la boîte, vous faites apparaître une liste vous permettant d'en ajouter d'autres, comme des contrôles calendrier ou image.
Labels
Vous ne pouvez pas écrire directement dans le userform. Il faut utiliser des labels ("intitulés"). Cliquez sur l'outil label dans la boîte à outils puis dans le userform. Une zone sélectionnée apparaît avec "label1" dedans. Mettez le curseur dans cette boîte, effacez ce texte et remplacez le par le votre. par exemple "Titre". Remarquez que la propriété caption de ce contôle s'est modifiée toute seule. En fait vous pouvez soit écrire dans le label soit écrire dans la zone en face de caption dans la fenêtre propriété, soit aussi, mais nous le verrons plus tard, utiliser VBA pour modifier ce texte. Dans la fenêtre propriétés, vous pouvez modifier la police (font) d'affichage, sa taille et sa couleur et la couleur de fond du label.
TextBox
Cliquez maintenant sur "zone de texte" dans la boîte à outil et ajoutez un textbox dans le userform. Le nom par défaut est TxtBox1. Changez le pour TxtTitre. L'utilisateur (le "user" du form..ulaire) tapera son texte dans cette boite. Comme précedemment, vous pouvez modifier la couleur de fond et les propriétés d'affichage.
Combobox et list box
Pour une fois, le nom français de combobox est nettement plus clair : les "zones de listes modifiables" vous permettent de choisir dans un liste déterminée mais que vous pouvez modifier en tapant dedans. Les listbox ne sont elles pas modifiables. La différence est aussi d'ordre esthétique : la listbox montre d'emblée les éléments de la liste (si ça ne tient pas dans la zone affichée, un ascenseur apparaît), la combo vous propose une flèche et un menu déroulant. La listbox permet de faire des sélections multiples ce qui n'est pas le cas avec la combo.
Boutons
Outils indispensables, ce sont eux que vous utiliserez par exemple pour valider le userform et entrer les données dans la page excel.
CheckBox, OptionButton et frames
Les CheckBox sont des cases à cocher. Vous pouvez proposer plusieurs choix et permettre à l'utilisateur d'en sélectionner aucun ou plusieurs. Si vous voulez qu'un seul choix soit possible (oui ou non mais pas les deux), il faut utiliser un bouton d'option. Lorsque vous cochez un bouton d'option, excel décoche les autres. Cependant vous pouvez avoir besoin de poser plusieurs questions différentes nécessitant des boutons d'options sur un formulaire. Pour qu'excel comprenne ceux qui sont liés, il faut les regrouper dans un cadre ou frame. Commencez par poser un contrôle cadre puis ajoutez dedans les boutons d'option.
Contrôle image
Ce contrôle vous permet d'ajouter une image contenue sur votre disque dur ou tout élément contenu sur votre feuille excel que vous copiez sous forme d'image, y compris des graphiques (voir sur la page grahiques).
Autres contrôles
Il y a bien entendu d'autres contrôles disponibles, vous trouverez des astuces les concernant sur les pages contrôles et userforms de ce site. Parmi les plus utiles, citons les contrôles multipages, très utiles lorsqu'il y a beaucoup de données à saisir ou lorsqu'une partie des données doit être validée avant de passer à la suite par exemple. Les boutons à bascule, les toupies, le "refedit", permettant à l'utilisateur de spécifier une plage de données...
Avant de passer au code
Mais nous avons déjà de quoi nous amuser ! Placez ces outils harmonieusement sur votre userform, alignez les correctement (vous avez des outils pour cela dans le menu format). Pour sélectionner plusieurs contrôles, utilisez la touche ctrl. Vous pouvez mettre en forme plusieurs contrôles d'un coup, tant qu'ils ont une propriété commune (comme font). Parfois dans la fenêtre propriété, la rubrique est vide alors qu'elle ne le devrait pas. En cliquant dans font justement, apparait un bouon qui ouvre le menu adéquat. Vous pouvez aussi pour conserver le même aspect à tous les contrôles du même type les dupliquer. Sélectionnez le contrôle, et tout en le déplaçant à la souris, maintenez la touche ctrl enfoncée, ceci le dupliquera (c'est vrai dans de nombreuses applications office). Votre userform pourrait donner quelque chose comme cela :
Pour voir son aspect "en vrai", dans la fenêtre de l'éditeur, appuyez sur la touche F5. Le userform se charge mais vous ne pouvez pas faire grand chose à ce stade, rien n'étant fonctionnel.
Avant d'écrire le code, encore quelques manips sur le userform lui même : prenez maintenant la peine de nommer tous vos contrôles (y compris les cadres ou frames) avec un code facile à comprendre. Evitez les noms à rallonge, pas d'espace ni de caractère spécial. Soyez sobres mais clairs ! N'oubliez pas que vous aurez peut-être à remettre le nez dans votre code d'ici 2 ans et qu'il sera plus facile de lire TxtTitre que control45... Dans le même ordre d'idées, n'hésitez pas à mettre dans votre code des tas de commentaires. Mieux vaut en mettre trop au début, quitte à faire du ménage un jour.
Pour faciliter la saisie, il est pratique d'utiliser la touche de tabulation pour passer d'une zone de saisie à une autre. Dans le menu affichage de VBE, il y a une rubrique tabulation qui vous permet de définir l'ordre. A vous de jouer avec les flèches. Comme vous ne cliquerez jamais dans un label, vous pouvez les mettre tous en bas. De même par flemme je ne change généralement pas le nom par défaut des labels, sauf ceux que je prévois de modifier par VBA pour afficher une info par exemple. Si vous voulez qu'un texte apparaisse sur un contrôle lors du survol avec la souris, pour rappeller ce qu'il faut entrer ou le format de saisie, mettez ce texte dans la propriété "controlTipText".
Il faut encore modifier certaines propriétés des contrôles dans la fenêtre propriétés. Par exemple, pour autoriser les retours chariot et l'écriture sur plusieurs lignes dans les textbox, il faut mettre les propriétés multiline et enterkeybehavior à true. Si vous voulez pouvoir utiliser la touche de tabulation dans une textbox, mettez à true la propriété tabkeybehavior mais cela vous interdit de passer d'un contrôle à l'autre avec cette touche.
Préparez les éléments nécessaires pour remplir vos zones de liste : dans une fes feuilles du classeur nommée ici "code", inscrivez colonne par colonne les différentes listes (type de plat, nombre de convives, occasions...).
![]()
Astuce :Je vous donne tout de suite un truc qui parait un peu complexe mais qui facilite grandement la maintenance de votre userform : nommez vos listes en utilisant la fonction décaler. Cette façon de faire permet d'ajouter des éléments à la liste sans avoir à redéfinir la source de celle -ci. L'astuce est expliquée en détail sur la pages listes et la fonction décaler dans le lexique. Pour l'instant, suivez juste le guide ! écrivez les éléments composant la liste les uns en dessous des autres, SANS vide, une seule liste par colonne (très important, il ne doit RIEN y avoir d'autre dans ces colonnes). Donnez un titre à la liste dans la première ligne. Par exemple en A1 vous écrivez type de plat, en A2, entrées et veloutés, en A3 terrines... Sélectionnez la cellule A1 puis dans le menu Insertion/nom/définir, recopiez ce qui est écrit ci dessous :
=DECALER(code!$A$2;;;NBVAL(code!$A:$A)-1)
Une fois cette formule magique entrée, cliquez sur ajouter. En recliquant dans la formule, un cadre pointillé sélectionne le valeurs prises en compte dans le nom TypePlat. Celles ci vont de A2 (en excluant donc le titre) jusqu'à la première cellule vide non incluse de la colonne A.

Il y a d'autres façons de faire pour remplir les listes mais celle-ci est à mon goût l'une des plus rapides par la suite. Si vraiment ça vous parait trop complexe pour le moment, sélectionnez juste la zone A2:A10 et nommez cette plage TypePlat par insertion/nom/définir.
Initialisation du userform
Lorsqu'on va lancer le userform, il faut que les listes soient remplies. On peut également afficher par défaut des informations dans les textbox comme la date du jour et précocher certaines checkbox ou optionbutton le cas échéant. A chaque userform est associé un événement d'initialisation et les instructions à effectuer doivent être placées dans une macro particulière nomme userform_initialize.Pour créer cette macro, commencez par ouvrir la feuille de code associée à votre formulaire en faisant un clic droit sur son nm dans l'explorateur à gauche. Il se peut qu'il y ait déjà des bouts de macros de type private sub label1_clic() dans cette feuille. Effacez les tous. Ils se créent quand par erreur ou volontairement vous double cliquez sur un contrôle au moment de la mise en forme de votre userform.
Dans la fenêtre qui s'est ouverte, dans le menu de gauche vous voyez (général). En déroulant ce menu vous retrouvez le nom de tous les contrôles que vous avez créé plus le nom générique "userform" (même si vous avez renommé celui-ci). Sélectionnez le. Le menu de droite propose maintenant les différents événements associés au userform (ce qui doit se passer quand on clique dessus, qu'on l'active...). Sélectionnez initialize.
Une nouvelle macro Private Sub UserForm_Initialize() est prête à recevoir nos instructions.
Remplir les listes
Les listbox et les combobox se remplissent de la même manière, en utilisant par exemple la propriété RowSource. D'autres méthodes sont possibles, notamment item par item. Regardez dans l'aide d'excel et sur la page listes d'excelabo. Pour utiliser une propriété, on la fait précéder du nom du controle. En tapant son nom en minuscule, on vérifie qu'excel reconnait le contrôle. Si c'est le cas, au moment du changement de ligne lors de l'écriture du code, excel applique la bonne orthographe. Sinon, vérifiez le nom du contrôle. Si toutefois vous êtes sur de vous et qu'excel persiste à ne pas prendre en compte un contrôle que vous venez d'ajouter (ça se produit parfois), enregistrez votre classeur, fermez le et rouvrez le.
Voici le code du userform_initialize :
Private Sub UserForm_Initialize()
CboType.RowSource = ("code!TypePlat") 'remplit la combo
CboType.ListIndex = -1 'une ligne vide s'affiche au lancement
ListOccasion.RowSource = ("code!Occasion")
ListOccasion.ListIndex = -1 ' aucun item de la liste n'est sélectionné
ListOccasion.MultiSelect = fmMultiSelectExtended 'autorise la sélection multiple
CboNbConvives.RowSource = ("code!NbConvives")
CboNbConvives.ListIndex = -1
TxtDate.Value = Format(Now(), "dd/mmm/yyyy") 'met sous format français la date du jour dans le textbox date.
End Sub
Comme un même plat peut être servi en différentes occasions, j'ai choisi de proposer les choix dans une listbox et non une combo et d'autoriser la sélection multiple.
par défaut, il est probable que la date qui sera utilisée sera celle du jour. Celle ci est donc préinscrite. La gestion des dates dans VBA est assez complexe pour un français. Ceci fait l'objet de plusieurs astuces dans les pages dates et contrôles.
Prévoir la sortie
Il faut toujours prévoir que l'utilisateur veuille annuler la saisie en cours. Le bouton annuler sert à cela. On peut au choix décharger ou seulement cacher le userform. Décharger (unload UsfNew )signifie qu'au prochain appel, la procédure userform_initialize sera effectuée, ce qui n'est pas le cas si on se contente de le cacher (UsfNew.hide). Affichez dans VBE le userform et double cliquez sur le bouton annuler. Le code sera à inscrire dans le
Private Sub CmdAnnuler_Click()
Choix de la photo et affichage : la propriété "visible"
En créant le userform, on prévoit un bouton qui permettra de choisir le chemin du fichier contenant la photot à afficher. Celle ci sera ensuite affichée dans un contrôle image pour vérification. Pour éviter d'encombrer le formulaire, on va basculer l'affichage entre le bouton et celui de la photo.
Validation de données
Un des gros intérêts d'une interface utilisateur c'est de pouvoir vérifier les données qui sont entrées. Si on veut par exemple trier sur la date, il faut que celle ci soit entrée correctement. Si on tape directement dans la feuille excel, on peut faire des erreurs. En passant par le formulaire, on va vérifier chaque donnée avant de la rentrer dans le classeur. Cette validation peut être faite à trois moments : en cours de frappe, lorsque l'on"sort" du contrôle ou lorsque l'on a fini de rentrer toutes les données dans le formulaire.
Validation en cours de frappe
Il est pratique dans certains cas d'interdire la saisie de certains caractères. PAr exemple, si vous avez une textbox demandant sous quel nom un fichier doit être enregistré, il vaut mieux signaler tout de suite à l'utilisateur que truc/machin.xls est un nom invalide. Les procédures de validation seront dans ce cas placées dans l'événement "change" du contrôle puisqu'il se déclenche à chaque changement comme son nom l'indique.
Validation à la sortie du contrôle
Dans d'autres cas, il faut attendre que l'utilisateur ait fini sa saisie avant de la contrôler. Par exemple, s'il doit saisir un code de type H4-1. Dans ce cas, la procédure de valisation sera écrite dans l'événement exit du contrôle. Quand, à l'aide des menus déroulants dans l'éditeur VBA, vous sélectionnez à gauche le nom du contrôle et à droite l'événement, vous voyez qu'excel écrit tout de suite quelque chose comme
Private Sub TxtTpsCuisson_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Le cancel permet d'empêcher de sortir du contrôle. Le curseur reste dedans et l'utilisateur doit modifier la saisie jusqu'à ce qu'elle soit correcte. Pour que les choses soit plus faciles à comprendre pour lui (mais pourquoi je ne peux pas faire sortir le curseur de ce truc ???), il est vivement recommandé d'une part d'afficher un message pour rappeller quelle est la consigne de saisie et d'autre part de sélectionner les données déjà saisies pour éviter à l'utilisateur de le faire. On pourrait d'ailleurs aussi les effacer. Les instructions selstart et sellength sont là pour ça.
Validation en fin de saisie
Lorsque l'utilisateur pense avoir rempli le formulaire, il clique sur le bouton valider. C'est donc dans la macro Private Sub CmdValider_Click() que nous écrirons le code de validation. On dit aussi qu'on intercepte l'événement click du bouton valider.
Le premier type d'erreur que peut faire l'utilisateur c'est d'oublier de remplir un champ obligatoire. Dans ce cas, il faut réafficher le userform en laissant les données déjà entrées bien sur. Un signal visuel pour indiquer les données manquantes (label en rouge par exemple) peut être une bonne stratégie. Dans l'exemple choisi, il n'y a pas beaucoup de types d'erreurs possibles. Mais il est souvent nécessaire de vérifier que la saisie dans une boite de texte correspond à un format attendu de données, comme un numéro de téléphone qui ne doit comporter que des nombres et pas de lettre, un code produit comportant 2 lettres et 4 chiffres... Vous trouverez des exemples sur la page contrôle.
Ici, on laisse à l'utilisateur la possibilité de changer la date inscrite par défaut. Il faut donc vérifier que ce qu'il inscrit à la place correspond bien à une date valide. Ce cas est traité à part sur la page contrôles avec un exemple à télécharger.
Il est également nécessaire de vérifier que des choix ont été effectués dans les listes. Suivant le cas, on teste que l'index de la liste n'est plus à -1 et/ou qu'au moins un item a été choisi (listes à choix multiples).
Transfert des données du Userform vers la feuille excel
Une fois que vous avez vérifié que toutes les données entrées sont valides, vous pouvez les transférer dans la feuille excel. Ceci se fait très simplement en récupérant les valeurs des différents contrôles et en les inscrivant dans une cellule.
Par exemple si vous avez un textbox nommé TxtRecette, pour en transférer le contenu dans la cellule B3 de la feuille "cuisine", il vous suffit d'inscrire :
range("cuisine!B3").value= TxtRecette.value.
dans l'exemple joint, vous verrez comment faire en sorte que ces données s'inscrivent sur la première ligne vierge de la page.
Transfert des données de la feuille vers le userform
Dans l'exemple à télécharger, vous verrez comment effectuer une sélection de certaines fiches sur la base de données. L'objectif est ensuite d'afficher les fiches filtrées dans un userform. Il serait tout à fait possible de prévoir d'imprimer ensuite ce userform.
Pour afficher des données de la feuille dans le userform, le principe est tout aussi simple que précedemment :
TxtRecette.value=range("mafeuille!X1").value.
Vous trouverez sur excelabo, dans les pages userforms et contrôles de nombreuses autres astuces pour manipuler les différents éléments d'un userform, effectuer des tests de validation de données et convertir des données popur les mettre dans un format adéquat. Je vous recommande en particulier de porter attention aux problèmes spécifiques de la manipulation de dates avec VBA. La page dates d'excelabo vous présente quelques uns de problèmes fréquemment rencontrés et les solutions adaptées, en particulier ce qui concerne les problèmes de dates françaises/anglaises. Cet autre exemple simple ou celui-cisur différents types de contrôles sont adaptés aux débutants.
Cette page a été vue 101382 fois.
