Vous êtes sur la page 1sur 44

Un premier formulaire (userform) pas à pas

Vous pouvez télécharger un exemple associé à ce tutoriel.

• 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 http://recettes-de-sylvie.fr/, 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'Editeur 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 pouvez mettre une image en fond de formulaire. Si vous voulez faire ça, cliquez sur la
propriété Picture (le bouton avec les 3 petits points) pour choisir l'image voulue, il faudra
ensuite modifier l'aspect de cette image par la propriété PictureSizeMode.

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 listboxes 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 CheckBoxes 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 pratiques 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 d'interpreter 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 des feuilles du
classeur nommée ici "code", inscrivez colonne par colonne les différentes listes (type de plat,
nombre de convives, occasions...).

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. 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 TextBoxes comme la date du jour et précocher
certaines CheckBoxes ou OptionButtons 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 nom dans l'explorateur à gauche. Il se peut qu'il y ait déjà des
bouts de macros; sans code; 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 ListBoxes et les ComboBoxes 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é
'autorise la sélection multiple
ListOccasion.MultiSelect = fmMultiSelectExtended
CboNbConvives.RowSource = ("code!NbConvives")
CboNbConvives.ListIndex = -1
'met sous format français la date du jour dans le textbox date.
TxtDate.Value = Format(Now(), "dd/mmm/yyyy")
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ôles.

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 tutos et 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-ci sur différents
types de contrôles sont adaptés aux débutants.

‹ Les userforms haut Un second formulaire pas à pas ›

Mots clefs associés à cette page : combobox, formulaire, listbox

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Problème rencontré

Par pakocity, le sam 21/08/2010 - 14:51.

Bonjour à tous

Je suis entrain de faire mes premiers pas dans l'outil VBA avec les User formes.

J'ai bien compris la démarche et je l'ai appliquée pas à pas sur l'exemple décrit jusqu'au niveau
du remplissage de la liste de sélection.

J'ai bien rempli ma liste dans une feuille nommée "code" et dans la premier colonne en
mettant dans A1(Type de Plat) dans A2(Entrée en veloutés)...

Mais seulement quand je sélection A1 comme indiqué (Sélectionnez la cellule A1 puis dans le
menu Insertion/nom/définir) dans le menu Insertion, je ne retrouve pas nom et définir pour
arriver à la page suivante permettant d'insérer la formule

(=DECALER(code!$A$2;;;NBVAL(code!$A:$A)-1)pour ajouter la liste.

et du coup je suis bloqué.

j'utilise Windows Vista.

Quelqu'un peut-il m'aider?

Merci d'avance.

Augustin DJIKANG

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

version excel

Par Misange, le dim 22/08/2010 - 17:07.


Bonjour

ce tutoriel a été réalisé avec une version 2003 ou antérieure d'excel. L'interface a changé avec
2007 et +. Pour nommer une cellule avec une version 2007 ou + il faut aller dans l'onglet
"formules/définir un nom ou gestionnaire de nom". Pour le reste c'est pareil (même formule à
entrer)

Misange

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Problème résolu.

Par pakocity, le dim 29/08/2010 - 21:01.

Bonsoir Misange.

Merci pour votre réponse. c'était vraiment un problème de version excel

Grâce à vous j'ai évolué considérablement avec mes Userforms.

Merci une fois de plus pour votre aide.

Augustin DJIKANG

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

merci

Par Misange, le mer 01/09/2010 - 07:31.

Merci du retour cela fait toujours très plaisir !

Misange

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Modifier valeur de transfert d'un USERFORM

Par CmzxNene, le dim 02/05/2010 - 05:00.

Bonjour,

Dans un TxtBox, j'ai mis le code suivant pour plus de facilité pour la saisie de l'opérateur :

Dim Terme As String

Terme = TxtTerme.Text

Select Case Len(Terme)


Case 2 ', 5, 8, 11

Terme = Terme & "+"

End Select

TxtTerme.Text = Terme

En revanche, je voudrais savoir, au moment de copier la valeur de ce champ dans mon tableau
excel par le bouton "VALIDER", comment changer le "+" en "," .

La colonne qui reçois ces données doit être un format numérique.

Merci de votre aide.

Cordialement

CmzxNene

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

forum

Par Misange, le lun 03/05/2010 - 12:23.

Bonjour CmzxNéné

Cet espace de commentaire est destiné à recueillir des questions et commentaires sur le
contenu direct de cette page et sur celui du classeur associé. Il n'est pas le lieu pour poser
toutes les questions que tu te poses sur les formulaires.

Tu peux poser ces questions sur le forum MPFE qui est fait exactement pour cela. S'y
connecter est très simple et gratuit et ne nécessite aucun enregistrement.

Misange

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Re transfert

Par CmzxNene, le mar 04/05/2010 - 06:42.

Bonjour Misange,

Ma question a un rapport avec un premier formulaire pas à pas puisque c'est le cas et je le suis
grâce au tuto ci-dessus.

Je pensais que tu aurais une solution à mon problème car je souhaiterais qu'au moment où je
clique sur mon bouton VALIDER, le "+" devienne une "," avant de coller la valeur dans une
cellule définie.
Je suis bloqué sur ce pb.

Merci quand même.

Meilleures salutations.

CmzxNene

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

et re

Par Misange, le mer 05/05/2010 - 07:39.

CmzxNéné

Je reprends : cet endroit n'est PAS un forum de discussion. Ta question concerne certes les
formulaires mais il y a des milliers de questions sur ce sujet. Je te demande de poser ta
question sur le forum MPFE. tu y trouveras de nombreuses personnes pretes à t'aider, jour et
nuit (je ne ments pas), très compétentes. Tu pourras poser autant de questions que tu veux et
c'est celui qui a le temps et les compétences pour te répondre (parfois moi !) qui te répondra.

Misange

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Format d'un champ

Par CmzxNene, le jeu 22/04/2010 - 04:41.

Bonjour,

Avant toute chose, je tenais à vous féliciter pour ces tutoriels très complets.

Je suis débutant un UserForm et j'ai réussi à créer un applicatif très simple utilisé dans la
Santé mais qui n'est pas encore fonctionnel.

Il me reste les contrôles pour obliger la saisie obligatoire de certains champs et le motif de ma
question :

comment fait-on pour définir le format d'un champ ?

Ex : j'ai un TxtBox dans lequel je dois mettre une heure sous la forme hh:ss

A quel endroit je dois paramétrer ce format ?

Egalement un TxtBox pour le Nom et je souhaiterais qu'il s'affiche en majuscule.

Je vous remercie de vos réponses.

Cordialement
CmzxNéné

CmzxNene

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

validation

Par Misange, le jeu 22/04/2010 - 11:56.

Bonjour

Les questions que tu poses sont abordées dans les astuces référencées dans cette page

http://www.excelabo.net/astuces/vba/controles/validation

Il faut distingue 2 choses :

- forcer l'utilisateur à entrer un certain type de données (par exemple un nombre). Cela se fait
en utilisant les événements associés au contrôle lui même. Quand on sort du textBox par
exemple, excel vérifie que ce qui est entré est un nombre. Si ce n'est pas le cas, il efface le
contenu et affiche éventuellement un message d'erreur. Un exemple ici

- mettre en forme le contenu d'un textbox (valide) à la sortie, par exemple une date. Un autre
exemple ici

Misange

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Champ date suite

Par CmzxNene, le sam 24/04/2010 - 23:49.

Merci Misange.

J'ai bien progressé sur mon application et ta réponse m'a permis de formater ce champ de
manière à ce que l'utilisateur soit bien orienté sur ce qu'il doit saisir.

J'aurais une nouvelle question à te poser :

j'ai un champ date paramétré de cette manière :

Private Sub TxtDate_Change()

Dim Valeur As Byte

TxtDate.MaxLength = 10 'nb caractères maxi autorisé dans le textbox

Valeur = Len(TxtDate)
If Valeur = 2 Or Valeur = 5 Then TxtDate = TxtDate & "/"

End Sub

Petit soucis : l'utilisateur saisi la date sur 8 chiffres et non 10 soit 25/04/10 et au transfert de
ce champ dans ma feuille, le résultat est considéré en texte et non en date.

Quelle est la syntaxe à utiliser pour obtenir un vrai champ date dans ma feuille excel ? (ps :
ma colonne est bien au format date)

Merci de ton aide.

Cordialement

CmzxNene

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Validation date

Par Misange, le dim 25/04/2010 - 10:22.

En tapant ces deux mots "validation date" dans la boîte de recherche du site, en haut à droite,
tu récupères plusieurs adresses traitant de ce problème, et en particulier celle-ci

http://www.excelabo.net/trucs/jjmmaa ... faut chercher un petit peu ;-)

Misange

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Champ Date

Par CmzxNene, le dim 25/04/2010 - 10:52.

Merci Misange.

Il fallait utiliser le contrôle Cdate.

Think You

A bientôt

CmzxNene

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

propriété RowSource et nom de champ

Par Olivier Lecointre, le dim 20/12/2009 - 16:21.


Bonjour,

dans l'application que j'écris, je cherche à utiliser une combobox alimentée par une liste sur
une feuille, comme dans votre exemple. J'ai créé un nom avec la fonction decaler et je l'ai
déclaré comme argument de Rowsource dans le code(même syntaxe que votre exemple) : je
reçois systématiquement le même message d'erreur : "Impossible de définir la propriété
Rowsource. Valeur de propriété non valide" (je suis sur Excel 2000). Je retourne le point dans
tous les sens, rien n'y fait ! Merci de votre aide.

OL

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Dans l'exemple téléchargeable

Par Libellule.52, le jeu 23/07/2009 - 07:52.

Dans la version d'exemple, je reçois un message d'erreur quand je veux sélectionner une
recette pour l'afficher dans le userform, est-ce normal ?

D'autre part, est-ce qu'il existe une solution plus simple pour passer d'une fiche à l'autre avec
des boutons "suivant" "précédent" directement dans le formulaire, plutôt que d'imbriquer des
formulaires les uns dans les autres qui s'ouvrent et se referment ?

(sur le principe du formulaire de base dans excel)

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Bonjour j'utilise Excel 2007

Par Rachid, le mer 24/06/2009 - 16:06.

Bonjour

j'utilise Excel 2007 et quand j'écris cette formule "=DECALER(code!$A$2;;;NBVAL(code!


$A:$A)-1)"

dans dans la zone"fait référence a" et quand je valide j'ai un message d'erreur "la formule
tapée contient une erreur "

merci de m'éclaircir un peu ce qui se passe

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

nom de la feuille

Par Misange, le mer 24/06/2009 - 20:57.

Bonjour
Est-ce que votre feuille s'appelle bien code ? code!$A$2 fait référence à la cellule A2 de la
feuille code. Pour le reste, il n'y a aucune différence entre 2007 et les versions antérieures.

Misange

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

bonjour

Par Rachid, le ven 26/06/2009 - 01:22.

Merci Misange pour votre réponse.

j'ai suivi exactement l'exemple mais je crois que la fonction contient une erreur

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

Bonjour

Par Rachid, le ven 26/06/2009 - 15:26.

j'ai fait plusieurs essais, et j'ai enfin trouver la correct formule :

=DECALER(Code!$A$2,,,NBVAL(Code!$A:$A)-1,)

merci pour ce site qui est très pédagogique

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

pas sur les versions françaises...

Par Misange, le ven 26/06/2009 - 15:55.

Si tu utilises la virgule comme séparateur d'instructions dans une formule, c'est peut être que
tu n'es pas sur une version française d'excel. Sur les versions anglophones, on utilise la virgule
dans la feuille de calcul comme dans VBA.

Chez nous, on doit utiliser la virgule dans VBA mais le point virgule dans la feuille de calcul.
Qu'as tu comme séparateur de liste dans le panneau de config de windows ?

En tous cas si tu as rencontré ce problème ici, tu dois l'avoir avec toutes les formules que tu
trouves sur des sites web francophones et dans les forums !

Misange

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

bonjour

Par Rachid, le ven 26/06/2009 - 16:11.


j'utilise un win vista version anglaise

mais vous avez oublié le point virgule ici

.....NBVAL($A:$A)-1;)

• Vous devez vous identifier ou créer un compte pour écrire des commentaires

paramètre optionnel

Par Misange, le ven 26/06/2009 - 21:03.

Non je ne l'ai pas oublié. Dans la fonction décaler, les 3 premiers paramètres sont
obligatoires. Le premier doit être indiqué en dur. Si on ne précise pas les deux paramètres
suivants (ici en ne mettant rien entre les ; ou en écrivant 0, c'est comme on veut) ils prennent
la valeur par défaut qui pour le décalage latéral et vertical est de 0.

Les deux derniers paramètres sont optionnels, ils représentent la hauteur et la largeur de la
plage. Pour t'en convaincre, écris des nombres dans une plage de quelques cellules et teste des
formules du genre

=somme(decaler($A$1;;2) ou

=somme(decaler($A$1;;;2) ou

=somme(decaler($A$1;;;;2) (remplace dans ton cas les ; par des ,)

Misange

• Vous devez vous identifier ou créer un compte pour écrire des commentaires
Un second formulaire pas à pas
Vous pouvez télécharger l'exemple associé

Prérequis
La lecture et la compréhension de ce tutoriel suppose que vous connaissez les notions
suivantes:

Notions de base d'Excel

Les cellules et leurs adresses absolues et relatives.

Notions de VBA

Utilisation de l'éditeur, structure de macros simples (boucles, tests conditionnels, formatage


de données, écriture par VBA dans la feuille excel).

Définitions
Un formulaire ou userform est une interface que vous créez pour rendre simple d'emploi un
classeur Excel.

Au lieu de devoir saisir des informations dans les cases de la feuille Excel, au bon endroit,
avec le bon format, les utilisateurs ont en face d'eux une page que vous avez construite sur
mesure et qui les guide dans la saisie des données.

Vous pouvez même faire en sorte qu'ils ne sachent même pas qu'ils utilisent Excel !

Pour personnaliser cette interface, vous disposez d'une trousse à outils comprenant par
exemple un bouton (ou plus !), des boites de saisie de texte, des cases à cocher, des boutons
radio. On désigne ces outils sous le nom générique de Contrôles.

Vous pouvez colorier votre formulaire, y mettre même des photos, des gifs animés, des
vidéos, de telle sorte que votre utilisateur peut même aller jusqu'à ignorer qu'il est sur Excel !

La création d'un userform comporte plusieurs étapes clefs :

1. la mise au point du cahier des charges. Ceci se fait sans toucher à Excel
mais en se posant des questions simples : qui sera l'utilisateur ? De quelles
informations doit-il disposer pour remplir le formulaire ? Quelles sont les
infos que je veux qu'il rentre et sous quel format ? Que deviennent les
données saisies ? L'expérience montre que cette étape est généralement
complètement sous estimée par le "userformiste" débutant. C'est pourtant
là qu'on peut éviter qu'un truc simple devienne une usine à gaz impossible
à modifier.
2. La réalisation de l'interface. C'est la partie sympa du boulot !
3. le codage en VBA qui va permettre de traiter les données saisies et les
mettre dans les cases d'une feuille Excel pour les stocker et les traiter.
4. Le débuggage. Aie... lorsque la conception initiale est mauvaise !
5. Les premiers tests utilisateurs qui trouvent ça "très bien mais si tu pouvais
rajouter ceci ou cela...". Il faut le gérer !

Conception
Il est facile de faire évoluer un projet bien structuré, avec des lignes de commentaires qui
rappellent le but de telle ou telle partie. Cela prend un peu plus de temps au début mais
simplifie considérablement la reprise du code ultérieurement.

Adoptez des noms de macro et de variables explicites : un an après , vous retrouverez plus
facilement à quoi correspond la variable dsc1 si vous l'avez appelée DateSaisieCommande.

Adoptez des conventions d'écriture : Par exemple, préfixez txt- tous les contrôles de type
boite de texte à saisir, cmd- tous les boutons...

Mettez en forme vos macros pour faire ressortir avec des niveaux d'indentation (vous pouvez
utiliser cet excellent freeware) les instructions qui vont ensemble (if, then, end if...).

Voyez GRAND mais concevez pas à pas : Mieux vaut un formulaire qui ne fait qu'une partie
des fonctions idéales mais qui les fait vraiment qu'un projet terminé à 80% mais qui faute des
20% restant est inutilisable. En pratique cela veut dire qu'il faut concevoir par modules
simples et indépendants.

Nous allons commencer par quelque chose de très très basique : un formulaire permettant à un
utilisateur de rentrer son nom et son prénom dans une boite de texte. Ce nom et ce prénom
seront alors transférés dans la feuille excel.

Du point de vue conception, ça va assez vite. La seule chose à laquelle il convient de penser
c'est au mode d'entrée du nom :

En majuscules, en minuscules ? Noms et prénoms séparés ? Déjà en fait on voit que ça vaut le
coup d'y réfléchir. Si vous devez ensuite traiter votre fichier pour éditer des étiquettes par
exemple, vous voyez que si Jean Dupont ne vous posera pas de difficulté, reconnaître noms et
prénoms dans Jean Hugues du Chêne De la Ville c'est déjà plus coton.

De quoi avons nous besoin ?

• Un cadre
• Une zone de saisie de texte pour le nom, une pour le prénom.
• Un bouton permettant à l'utilisateur de valider son enregistrement.
• Un bouton permettant à l'utilisateur d'annuler la saise de son
enregistrement.

Réalisation de la première interface


Ouvrez un nouveau classeur dans Excel et enregistrez le sous "premieruserform.xls.
Ouvrez l'éditeur Visual Basic (alt+F11)

A gauche vous avez une colonne listant les projets VBA actifs.

Repérez celui nommé VBAProject(premieruserform.xls).

Il contient un dossier contenant 3 feuilles Microsoft Excel Objects (si vous avez 3 feuilles par
défaut dans vos classeurs) et une nommée "ThisWorkbook"

Nous allons ajouter dans ce projet VBA un formulaire vierge

Clic droit dans le projet/insertion/userForm

Voilà votre cadre qui se crée ! Normalement une boîte à outils est alors disponible. Si ce
n'était pas le cas, allez dans affichage/boîte à outils.

Cette boîte à outils contient par défaut certains contrôles.

Dans la fenêtre de gauche vous devez voir ceci ...

Pour des questions de convention d'écriture, il est conseillé de toujours préfixer le nom de vos
formulaires de la même façon. Ici nous choisissons frm et notre formulaire s'appellera donc
frmCoordonnées. Pour déclarer ce nom, faites un clic droit sur l'objet sélectionné puis dans la
fenêtre des propriétés (affichée via le menu affichage ou avec la touche F4), tapez le nom de
votre formulaire en regard de la propriété Name (nom).

Pour soigner l'aspect offert à l'utilisateur et l'informer, on peut modifier le titre qui apparait
sur le formulaire: tapez "Saisie coordonnées personnelles" en regard de la propriété Caption
(titre) qui fera apparaître ce titre sur le formulaire.

VBA est en anglais. Ne soyez pas inquiet si vous maîtrisez mal ou pas du tout cette langue, il
n'y a qu'une poignée de mots à connaître et beaucoup se comprennent intuitivement. Pas
besoin de dictionnaire ! Leur signification en français est indiquée en vert dans ce texte.
Une fois le cadre créé, il faut ajouter les Contrôles nécessaires : Dans la boîte à outil,

sélectionnez celui qui vous intéresse en cliquant dessus. Cliquez


ensuite simplement là où vous souhaitez le placer dans le cadre du formulaire. Créez ainsi :

Pour le Nom

• Un contrôle Label (Intitulé ou étiquette) et inscrivez Nom en regard de la


case Caption dans la fenêtre des propriétés. Un label n'est pas modifiable
par l'utilisateur dans le formulaire. Il permet d'afficher des informations,
généralement pour aider à la saisie.
• Un contrôle TextBox (Zone de texte). Ce contrôle sera nommé txtNom
(propriété Name). Il recevra la saisie de l'utilisateur.

Pour le Prénom

• Un LabeL contenant Prénom dans la propriété Caption.


• Un TextBox nommé txtPrenom (propriété Name).

A présent il faut mettre 2 boutons :

• un pour valider la saisie


• ajouter le contrôle Bouton de commande. Ce contrôle sera nommé cmdOK
(propriété Name) et nous mettrons Valider ou OK pour la propriété
Caption. C'est ce qui apparaîtra comme texte sur le bouton.
• un pour annuler la saisie
• ajouter un second Bouton de commande. Nommez le cmdAnnuler
(propriété Name) et nous mettrons Annuler ou Quitter pour la propriété
Caption.

Si vous avez suivi ce didacticiel, vous devriez arriver au résultat suivant :


Nous verrons par la suite comment le rendre plus attrayant...

Le code VBA associé

Vous venez de terminer la création de votre formulaire.

On résume :

• Le nom est inscrit puis stocké dans le controle txtNom


• Le prénom est inscrit puis stocké dans le controle txtPrenom
• Le bouton Valider se nomme cmdValider
• Le bouton Annuler se nomme cmdAnnuler

Lorsque vous cliquez sur un des deux boutons de votre formulaire, vous demandez qu'une
action soit effectuée.

Comment le bouton perçoit-il votre clic ?

Chaque contrôle possède des événements associés. Lorsque l'utilisateur clique sur un bouton
de commande, l'événement associé est l'évenement Click qui déclenche par une macro portant
le nom de boutoncommande_Click contenant les actions à effectuer.

Dans notre exemple, nous aurons donc à créer deux macros, cmdValider_Click et
cmdAnnuler_Click

Ecriture du code VBA

Que veut-on faire ?

• Pour le bouton Annuler (ou Quitter), on veut simplement fermer le


formulaire.
• Pour le bouton Valider (ou OK), on veut transférer les informations
contenues dans les deux TextBox (txtNom et txtPrenom) vers un endroit
de votre feuille de calcul.
• Faites un double-clic sur le bouton annuler. Excel crée automatiquement
les deux lignes suivantes :

Private Sub cmdAnnuler_Click()

End Sub

Le code associé au bouton "fermer"

On veut que lorsque l'utilisateur clique sur ce bouton, les données contenues dans le
formulaire soient effacées sans traitement et que le formulaire soit fermé.

Cela implique qu'il faut le décharger de la mémoire.

Le code sera :

Private Sub cmdAnnuler_Click()


Unload Me
End Sub
Me est un mot clé VBA que l'on peut utiliser pour se référer au formulaire (curseur sur Me et
F1 pour l'aide). On aurait pu à la place écrire Unload frmCoordonnées puisque c'est le nom
que nous lui avons donné.

Le code associé au bouton "valider"

Cette fois, nous voulons qu'en cliquant sur ce bouton, les données soient transférées du
formulaire à la feuille de calcul : le nom dans la colonne A, le prénom dans la colonne B d'une
feuille du classeur que nous aurons nommé "Donnees". C'est ce que fait le code ci-dessous :

Private Sub cmdOK_Click()


Sheets("Donnees").Range("A1").Value = Me.txtNom.Text
Sheets("Donnees").Range("B1").Value = Me.txtPrenom.Text
Unload Me

End Sub

Cela fonctionne mais il manque encore beaucoup de choses.

1. Vérifier que les textBox ne sont pas vides lors de la validation.


2. Mettre une majuscule à la première lettre du nom et du prénom.
3. A chaque validation, mettre les données à la suite des précédentes.

Verification de la saisie

Lors de la validation sur OK ou Valider, on teste si les txtBox sont renseignés (= non vide =
différent de " ").

Si l'une des textbox est vide, il faut dans l'ordre

• afficher un message d'erreur pour l'utilisateur


• mettre le pointeur dans le textbox invalide
• interrompre la macro de validation
• réafficher le formulaire en conservant les données déjà inscrites et valides.

Ce que fait le code suivant :

Private Sub cmdValider_Click()


' On teste la saisie du nom ...
If Me.txtNom.Text = "" Then

MsgBox "Vous devez entrer un nom."


Me.txtNom.SetFocus
Exit Sub
End If

' On teste la saisie du prénom ...


If Me.txtPrenom.Text = "" Then

MsgBox "Vous devez entrer un prénom."


Me.txtPrenom.SetFocus
Exit Sub
End If
Sheets("Donnees").Range("A1").Value = Me.txtNom.Text
Sheets("Donnees").Range("B1").Value = Me.txtPrenom.Text
Unload Me 'De cette façon, à la prochaine saisie, les textbox seront
vides à l'ouverture
End Sub

Format des données saisies

La fonction dans Excel qui permet de mettre une majuscule en début de mot est
NOMPROPRE.

La fonction équivalente en anglais est PROPER.

Pour utiliser dans VBA une fonction de la feuille de calcul, on la fait précéder des mots clefs
Application. WorsheetFunction

Ex. Application.WorksheetFunction.Proper(Me.txtnom.Text)

ou encore Application.Proper(Me.txtNom.Text)

On pourra faire la conversion de la manière suivante :

• Nomconverti = Application.WorksheetFunction.Proper(Me.txtnom.Text)
• Prenomconverti = Application.WorksheetFunction.Proper(Me.txtnom.Text)

Le code VBA devient :

Private Sub cmdValider_Click()


' On teste la saisie du nom ...
If Me.txtNom.Text = "" Then

MsgBox "Vous devez entrer un nom."


Me.txtNom.SetFocus
Exit Sub
End If
' On teste la saisie du prénom ...
If Me.txtPrenom.Text = "" Then

MsgBox "Vous devez entrer un prénom."


Me.txtPrenom.SetFocus
Exit Sub
End If
' Conversion du nom et prénom en NOMPROPRE'
Nomconverti = Application.WorksheetFunction.Proper(Me.txtnom.Text)
Prenomconverti =
Application.WorksheetFunction.Proper(Me.txtprenom.Text)
' Mise en place des données dans la feuille de calcul'
Sheets("Donnees").Range("A1").Value = Me.txtNom.Text
Sheets("Donnees").Range("B1").Value = Me.txtPrenom.Text
Unload Me

End Sub

Inscrire les nouvelles données sous les précédentes dans la feuille

Soit en A1 l'intitulé Nom et en B1, l'intitulé Prénom

Pour inscrire le nom et le prénom, il faut trouver la première ligne vide des colonnes A et B.

On va procéder comme suit :


Je pars de la dernière ligne du tableur et dans la colonne A (65536 lignes avec XL2000 et +)

Range("A65536")

Je remonte jusquà trouver la première ligne remplie

End(xlUp)

La ligne trouvée, je décale d'une ligne vers le bas et de 0 colonnes vers la droite

Offset(1,0)

A présent je peux inscrire les valeurs Nom et Prénom dans les colonnes A et B

Range("A65536").End(xlUp).Offset(1,0).Value=......

Attention, ce code ne remplira pas d'éventuels blancs dans votre colonne liés par exemple à un
effacement manuel dans la feuille.

Le code final est donc :

Private Sub cmdValider_Click()


' On teste la saisie du nom
If Me.txtNom.Text = "" Then

MsgBox "Vous devez entrer un nom."


Me.txtNom.SetFocus
Exit Sub
End If
' On teste la saisie du prénom
If Me.txtPrenom.Text = "" Then

MsgBox "Vous devez entrer un prénom."


Me.txtPrenom.SetFocus
Exit Sub
End If
' Conversion du nom et prénom en NOMPRPRE
Nomconverti = Application.WorksheetFunction.Proper(Me.txtNom.Text)
Prenomconverti =
Application.WorksheetFunction.Proper(Me.txtPrenom.Text)
' Mise en place des valeurs saisies
Range("A65536").End(xlUp).Offset(1, 0).Value = Nomconverti
Range("B65536").End(xlUp).Offset(1, 0).Value = Prenomconverti
' On décharge le formulaire

Unload Me
End Sub

Et voilà ! votre premier userform est tout à fait fonctionnel ! il lui manque encore une petite
chose pourtant :

quand l'utilisateur ouvre le classeur il se trouve face à une liste de noms et de prénoms mais il
ne sait pas comment accéder au formulaire. Nous allons donc mettre un bouton cette fois-ci
sur la feuille de calcul qui va lancer le Userform.
Lancer le Userform
Ouvrez le classeur excel (pas VBA cette fois).

Dans le menu affichage > barres d'outils, cochez si ce n'est déjà fait la barre d'outils contrôles.

Cliquez sur le bouton puis dans votre feuille pour l'y placer.

Faites un clic droit sur le bouton pour afficher la fenêtre de ses propriétés. Vous ne serez pas
perdu c'est la même que celle que vous avez utilisée ci-dessus. Modifiez le nom du bouton
(propriété Name) pour l'appeller lanceFrmcoordonnées par exemple.

Dans la propriété caption tapez "Afficher le formulaire de saisie". Vous voyez que le texte est
trop long et ne tient pas sur le bouton. Si vous voulez que la taille du bouton s'ajuste
automatiquement, dans la fenêtre propriétés mettez à true la propriété autoSize (il y a un petit
menu déroulant). Tant que vous y êtes, mettez un peu de couleur : backcolor (Couleur de
fond) sur votre bouton et jouez avec les propriétés font (police de caractères), forecolor
(couleur de police)...

Pendant tout ce temps, le bouton sur la feuille est entourée par quatre poignées de
redimensionnement matérialisées par des petits cercles blancs.

Double cliquez maintenant sur le bouton.

VBA s'ouvre avec une nouvelle macro prête à remplir.

Ajoutez simplement la ligne de code suivante :

Private Sub lanceFrmcoordonnées_Click()


frmCoordonnées.Show
End Sub

La méthode Show permet d'afficher le formulaire.

Astuce : Si vous avez nommé votre userform frmCoordonnées avec un C majuscule, tapez le
tout en minuscules. si vous n'avez pas fait de faute de saisie (pas oublié l'accent ou un o),
excel reconnait que c'est le nom d'un objet que vous avez créé et, dès que vous avez tapé le
point, excel ouvre une liste déroulante proposant les propriétés et méthodes associées à ce
type d'objet (ici un userform).

Si ce menu ne s'ouvre pas c'est que vous avez fait une faute. Dès que vous aurez terminé la
saisie, excel la modifiera pour mettre la majuscule au bon endroit.

Revenez dans votre feuille de calcul. dans la barre d'outils contrôles, cliquez sur le premier
bouton en haut à gauche en forme d'équerre. Il active/désactive le mode création. Si vous
restez en mode création, le double clic vous envoie dans l'éditeur et ne lance pas l'affichage du
formulaire.

Vous pouvez maintenant tester votre formulaire : cliquez sur votre joli bouton...
Les outils (contrôles) de formulaire
Définitions

On
appelle
contrôle
un outil
(bouton,
boîte de
saisie de
texte...)
qui

déclenche une action.

A chaque contrôle est associé une liste de propriétés (couleur, taille, police de caractères...) et
une liste de méthodes ou d'événements qu'il peut déclencher.

(action en réponse au clic, au double clic, au passage de la souris...). Vous pouvez facilement
accéder à leur liste pour chaque contrôle (voir la page Propriétés et méthodes)

Par défaut, excel propose une palette de contrôles. Cette palette est modifiable pour afficher
plus d'outils prédéfinis.

Contrôles de la palette par défaut


Voici un aperçu des contrôles par défaut,

• Barre de défilement ou ScrollBar


• Bouton ou CommandButton
• Bouton à Bascule ou ToggleButton
• Bouton d' Option ou OptionButton
• Cadre ou Frame
• Case à cocher ou CheckBox
• Controle Onglet ou TabStrip
• Image
• Intitulé ou label
• MultiPage
• RefEdit
• Toupie ou SpinButton
• Zone de Liste ou ListBox
• Zone de liste Modifiable ou ComboBox
• Zone de Texte ou TextBox
Contrôles de formulaire : les boutons
Vous pouvez télécharger l'exemple associé à cette page

C'est un contrôle utilisable dans un formulaire

Vous pouvez télécharger l'exemple associé à cette page

C'est un contrôle utilisable dans un formulaire

Exemple de customisation : une image qui remplace un bouton :

Dans cet exemple nous allons simuler le survol et le clic d'un bouton comme on peux le voir
partout sur internet mais dans Excel !

Propriété backcolor du userform : &H8000000F&

(C'est la couleur de fond que j'ai utilisée pour les boutons qui ont de la transparence)

Nous avons besoin de 3 images aux mêmes dimensions (format jpg, bmp ou gif) :

• image1 : image au repos

• image2 : image survolée

• image3 : image cliquée

• et d'un label qui indique le rôle du bouton :

Propriétés :

name label1
caption Valider
forecolor &H00004040& (couleur du texte)
• Positionner le premier contrôle image

Propriétés :

name image3
borderstyle 0
picture et choisir l'image3
picturesizemode 1(stretch)

répéter l'opération pour les 2 autres images en respectant bien l'ordre, image2 puis image1

Positionnez-les exactement au même endroit (superposées) seul l'image1 reste donc visible

• Positionnez le label au centre de l'image1 et notez la valeur de sa propriété Top qui


indique la distance du label par rapport au haut du userform

• Coller le code qui est commenté pour vous détailler la syntaxe utilisée

Private Sub image1_MouseMove(ByVal Button As Integer, ByVal Shift As


Integer, _
ByVal X As Single, ByVal Y As Single)

'MouseMove indique l'action à déclencher au survol par le curseur de


l'image1
image1.Visible = False
'ici rendre invisible l'image1 pour voir l'image2
End Sub
Private Sub image2_MouseDown(ByVal Button As Integer, ByVal Shift As
Integer, _
ByVal X As Single, ByVal Y As Single)

'MouseDown indique l'action à déclencher à la pression du bouton de la


souris sur l'image2
image2.Visible = False
'ici rendre invisible l'image2 pour voir l'image3
label1.Top = 118
'ici la valeur Top réduite de 2 pour simuler le texte appuyé

'ici l'action que vous auriez mis pour un bouton standard

End Sub

Private Sub image1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer,


_
ByVal X As Single, ByVal Y As Single)

'MouseUp indique l'action à déclencher à la remontée du bouton de la souris


sur l'image1
image1.Visible = True
'ici rendre visible l'image1
End Sub

Private Sub image3_MouseUp(ByVal Button As Integer, ByVal Shift As Integer,


_
ByVal X As Single, ByVal Y As Single)
image2.Visible = True

'ici rendre visible l'image2


label1.Top = 120
'ici votre valeur Top initiale
End Sub

Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As


Integer, _
ByVal X As Single, ByVal Y As Single)
image2.Visible = False

image3.Visible = True
label1.Top = 118
'ici la valeur Top réduite de 2
End Sub

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As


Integer, _
ByVal X As Single, ByVal Y As Single)

'UserForm_MouseMove indique l'action à déclencher au survol par le curseur


de l'userform
image1.Visible = True
image2.Visible = True
label1.Top = 120
'ici votre valeur Top initiale
End Sub
ListBox, ComboBox
ListBox ou zone de liste

C'est un Contôle utilisable dans un UserForm ou formulaire qui permet de sélectionner


une ou plusieurs valeurs parmi une liste prédéfinie soit par l'utilisateur soit en dur dans le
code.

Par exemple, comment afficher les mois de l'année et sélectionner par défaut le mois de
janvier

Private Sub UserForm_Initialize()


For x = 1 To 12
ListBox1.AddItem Format(DateSerial(2006, x, 1), "mmmm")
Next
' Initialisation de la ListBox sur le premier élément
ListBox1.ListIndex = 0
End Sub

Les ListBox permettent d'afficher les données de deux manières différentes. La première et la
plus utilisée, affiche le textetel qu'il est entré. La deuxième affiche les données sous forme de
bouton d'option.

Pour cela, il faut donner, à la propriété "Liststyle" la valeur 1:

ListBox1.ListStyle = 1

Pour récuperer la valeur qui a été sélectionnée, deux possibilités :

- Récuperation du texte

mavar = ListBox1.Value

- Récupération de la position dans la liste

mavar = ListBox1.ListIndex

Les Combobox ou zones de liste modifiables.


Comme les ListBox, les ComboBox permettent d'afficher des élements sous forme de
liste. Elles permettent cependant en plus à l'utilisateur d'ajouter lui même un élément en le
tapant.

Les listes : combobox, listbox, laquelle choisir comment les


remplir ?
Mettons que vous vouliez préciser dans votre formulaire de saisies de coordonnées la civilité
(Mme, Melle, Mr). Plutôt que d'obliger l'utilisateur à l'écrire, donnez lui le choix via une liste
prédéfinie.

On va donc placer dans notre formulaire une liste. Mais il y en a deux disponibles : ListBox
(Zone de liste) et ComboBox (liste modifiable)et chacune comporte des options. Laquelle
choisir ?

• La ListBox
o Elle propose un choix fixe d'éléments.
o Le nombre d'éléments visibles d'emblées est déterminé à l'avance.
Si le nombre d'éléments de choix est trop important, un ascenceur
permet de se déplacer dans la liste.
o Elle permet de faire des sélections multiples
• La ComboBox
o Permet à l'utilisateur de choisir un élément de la liste ou de taper ce
qu'il souhaite.
o Un seul élément est visible à la fois, une flèche permet de
développer un menu déroulant.
o Ne permet pas les choix multiples.

Comment introduire les éléments de la liste ?

Plusieurs méthodes sont disponibles : les noms des éléments peuvent être codés "en dur" ou
on peut utiliser une liste tapée dans une feuille excel.

La méthode addItem

Ajoutez pour commencer une ListBox que vous nommez listCivilité.

Le code pour la remplir est à mettre dans la macro Userform_initialize :

Private Sub UserForm_Initialize()


ListCivilité.AddItem "Mr"
ListCivilité.AddItem "Mme"
ListCivilité.AddItem "Melle"
End Sub

Cette méthode fonctionne très bien mais on voit tout de suite qu'elle devient lourde dès qu'il y
a beaucoup éléments.

NB : la méthode removeItem fonctionne avec la même syntaxe pour enlever un élément.

On peut cependant utiliser cette méthode pour ajouter par exemple une liste de nombres
comme des années de naissance.

‹ Contrôles de formulaire : les boutons haut Manipulations de base avec les


formulaires ›

Mots clefs associés à cette page : combobox, contrôle, listbox, liste

• Vous devez vous identifier ou créer un compte pour écrire des


commentaires
comment effacer les valeurs de la comboBox

Par franckell, le lun 27/12/2010 - 11:22.

bonjour,

J'aimerais connaitre la façon d'effacer les valeurs , dans une ComboBox, à part "" qui je pense
n'est pas la bonne façon. Je récupère des dates dans une feuille par exemple janvier en A1,
A2......, et ensuite si je passe dans la feuille février si je met dans la comboBox les valeurs de
A1,A2... J'aimerais que les premières valeurs ne soient plus là, j'ai beau mettre le nom de ma
ComboBox suivi de "" , les valeurs se rajoutent à la suite.

franckell

• Vous devez vous identifier ou créer un compte pour écrire des


commentaires

ListBox1.RemoveItem (Index)

Par Misange, le mar 28/12/2010 - 08:59.

Bonjour

Il faut utiliser la méthode remove.item qui fait exactement l'inverse de add.idem. Tu trouveras
un exemple à télécharger ici qui illustre cette méthode:

trucs/liste_userform

Misange

• Vous devez vous identifier ou créer un compte pour écrire des


commentaires

Mais il me manque la fin de la 1 ere ligne , erreur 254

Par franckell, le mar 28/12/2010 - 10:45.

bonjour

j'esai de me servir de votre macro pour effacer une combobox. Mais il me manque la fin de la
1 ere ligne , erreur 424

merci d'avance pour la fin de la ligne

franckell

franckell

• Vous devez vous identifier ou créer un compte pour écrire des


commentaires
fin

Par Misange, le mar 28/12/2010 - 11:37.

Quelle fin de quelle première ligne ? Je ne suis pas dans votre code !

Misange

• Vous devez vous identifier ou créer un compte pour écrire des


commentaires

je me suis mal expliqué

Par franckell, le mar 28/12/2010 - 16:59.

voici ma macro qui me sert a voir les valeurs des lignes que j'ai sur une feuille, exemple
janvier, février.... a partir de la ligne 15 jusqu'à la ligne nouvelle_ligne qui change .

je récupére dans ma combobox1 les dates dans la colonne a, que je met dans ma combobox1,
et ensuite je lis ce qu'il y a sur la ligne consernée.

au départ je me met sur le mois que nous somme c'est a dire décembre combobox2, là pas de
problème. mais si je vais sur janvier en me servant de la combobox 2, je récupère les dates de
janvier a la suite de elle de décembre.

je vous joint ma macro que je me sert

Sub metdatejour()

Dim fff

fff = 0

'ma combobox est ""com_ligne_a_regarder ""et ma boite est ""suivit_compte""

suivit_compte.com_ligne_a_regarder = ""

'les dates que je récupère , sont depuis la ligne ("A" & nouvelle_ligne) donc i

For i = 15 To nouvelle_ligne

'Ajoute chaque date dans la liste.

fff = Range("A" & i).Value

suivit_compte.com_ligne_a_regarder.AddItem (fff)

Next i

'Sélectionne la premiere date de la liste...


suivit_compte.com_ligne_a_regarder.ListIndex = 1

End Sub

franckell

franckell

• Vous devez vous identifier ou créer un compte pour écrire des


commentaires

forum

Par Misange, le mer 29/12/2010 - 09:26.

Cet espace de commentaire n'est pas destiné à répondre à des questions particulières, sauf si la
réponse tient en 3 mots. Je vous propose de poser votre question sur le forum microsoft
answers excel qui est prévu pour cela. Si vous ne vous êtes jamais connecté au forum, voici
une page qui vous expliquera comment faire. C'est volontairement que je ne réponds pas aux
questions particulières ici, sinon je ne ferai plus que cela ! merci de votre compréhension.

Misange

• Vous devez vous identifier ou créer un compte pour écrire des


commentaires
Manipulations de base avec les formulaires
Récuperer des données de la feuille pour les afficher dans
le formulaire
Dans l'exemple précédent (second formulaire) nous avons vu comment saisir des données
dans un formulaire pour les entrer dans la feuille de calcul.

Il est cependant très souvent utile de faire aussi l'inverse :

• Pour permettre de corriger des données d'une feuille de calcul via une interface
prédéfinie
• Pour remplir des listes de choix affichées dans le formulaire à partir de données
stockées dans la feuille.

Initialisation du formulaire : affecter des valeurs à des contrôles avant leur


affichage

Prenons un exemple très simple : dans votre formulaire, ajoutez un Contrôle label (étiquette).
Nommez le (propriété Name) lblTitre

Dans la feuille de calcul, tapez en D1 "merci d'entrer vos coordonnées"

Nous allons faire en sorte que lorsque vous demanderez l'affichage du formulaire le texte
(caption) qui s'affiche dans votre label soit celui de cette cellule D1.

Les instructions nécessaires sont à placer dans une macro particulière, qui se déclenche à
l'initialisation du formulaire. Elle est toujours nommée UserForm_Initialize, quel que soit le
nom du formulaire.

Allez dans le module VBA associé à votre userform. Avec les deux menus du haut
sélectionnez Userform_Initialize ce qui crée une macro vide correspondante.

Tout ce qui sera écrit dans cette macro sera lu et exécuté avant l'affichage du userform par la
méthode show. C'est donc ici que l'on va remplir les listes, affecter des valeurs par défaut à
des textbox ou dans notre exemple mettre un texte dans notre intitulé lblTitre, ce que fait la
macro ci-dessous :

Private Sub UserForm_Initialize()


LblTitre.Caption = Sheets(1).Range("D1").Value
End Sub

Suivre le déroulement de la macro ; déverminage

Ceci nous permet de mettre un tout petit peu les doigts dans la mécanique du userform pour
suivre ce qui se passe quand dans la feuille de calcul vous cliquez sur le bouton qui lance le
userform.
Pour le savoir, on peut suivre les instructions pas à pas :

Le bouton déclenche la macro lancefrmCoordonnées. Allez dans VBA et placez le pointeur


n'importe ou dans cette macro (qui est dans le module associé à la feuille 1 puisque ce n'est
pas un bouton du formulaire mais un bouton de la feuille) puis appuyez sur la touche F8. Ceci
vous met en lecture pas à pas. Chaque appui sur F8 déplace le pointeur et la ligne en cours de
lecture est surlignée en jaune. En plaçant le pointeur dans cette ligne, vous pouvez suivre la
valeur des variables. Ainsi la valeur affectée à lblTitre est initialement label3 (valeur affectée
par défaut à ce label puisqu'il est le 3° créé dans ce userform après les labels noms et
prénoms) après avoir appuyé encore une fois sur F8 vous voyez qu'il contient maintenant le
texte de la cellule D1. N'hésitez pas à suivre de la sorte le déroulement de vos macros quand
le résultat n'est pas conforme à ce que vous attendez.

Petite astuce: fermez tous les fenêtres autres qu'excel, ouvrez VBA (alt+F11) clic droit sur la
barre des tâches Windows, Mosaïque verticale

vous avez maintenant les 2 fenêtres visibles et en activant vba (en cliquant dans le code puis
F8) vous pouvez contrôler visuellement ce que déclenche votre code sur l'interface

Afficher un userform dès l'ouverture du classeur

Dans l'exemple précédent, nous avons mis un bouton sur la feuille 1 pour lancer l'affichage du
formulaire. Mais on peut aussi lancer le userform dès l'ouverture du classeur et se passer ainsi
du bouton.

Faites un double clic sur le module ThisWorkbook dans l'éditeur VBA dans la fenetre
"Projet". Dans la liste deroulante de gauche de la fenetre d'edition, choisissez "workbook" et
dans celle de droite "open" (ça se fait tout seul car open est la méthode ou l'événement associé
par défaut à workbook). C'est dans cette macro que l'on met les instructions d'affichage du
formulaire:

Private Sub Workbook_Open()


frmCoordonnées.Show
End Sub