Un Premier Formula Ire USERFORM

58
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

Transcript of Un Premier Formula Ire USERFORM

Page 1: Un Premier Formula Ire USERFORM

Un premier formulaire (userform) pas à pasVous 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.

Page 2: Un Premier Formula Ire USERFORM

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

Page 3: Un Premier Formula Ire USERFORM

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.

Page 4: Un Premier Formula Ire USERFORM

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

Page 5: Un Premier Formula Ire USERFORM

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 !

Page 6: Un Premier Formula Ire USERFORM

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.

Page 7: Un Premier Formula Ire USERFORM

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.

Page 8: Un Premier Formula Ire USERFORM

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 :

Page 9: Un Premier Formula Ire USERFORM

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.

Page 10: Un Premier Formula Ire USERFORM

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.

Page 11: Un Premier Formula Ire USERFORM

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

Page 12: Un Premier Formula Ire USERFORM

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"

Page 13: Un Premier Formula Ire USERFORM

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

Page 14: Un Premier Formula Ire USERFORM

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

Page 15: Un Premier Formula Ire USERFORM

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.

Page 16: Un Premier Formula Ire USERFORM

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)

Page 17: Un Premier Formula Ire USERFORM

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.

Page 18: Un Premier Formula Ire USERFORM

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

Page 19: Un Premier Formula Ire USERFORM

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)

Page 20: Un Premier Formula Ire USERFORM

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.

Page 21: Un Premier Formula Ire USERFORM

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

Page 22: Un Premier Formula Ire USERFORM

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.

Page 23: Un Premier Formula Ire USERFORM

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

Page 24: Un Premier Formula Ire USERFORM

Un second formulaire pas à pasVous 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.

Page 25: Un Premier Formula Ire USERFORM

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.

Page 26: Un Premier Formula Ire USERFORM

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.

Page 27: Un Premier Formula Ire USERFORM

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

Page 28: Un Premier Formula Ire USERFORM

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 MeEnd Sub

Page 29: Un Premier Formula Ire USERFORM

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

Page 30: Un Premier Formula Ire USERFORM

Sheets("Donnees").Range("B1").Value = Me.txtPrenom.Text Unload Me 'De cette façon, à la prochaine saisie, les textbox seront vides à l'ouvertureEnd 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.

Page 31: Un Premier Formula Ire USERFORM

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

Page 32: Un Premier Formula Ire 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.ShowEnd 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...

Page 33: Un Premier Formula Ire USERFORM

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

Page 34: Un Premier Formula Ire USERFORM

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

Page 35: Un Premier Formula Ire USERFORM

Contrôles de formulaire : les boutonsVous 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 label1caption Valider

Page 36: Un Premier Formula Ire USERFORM

forecolor &H00004040& (couleur du texte)

Positionner le premier contrôle image

Propriétés :

name image3borderstyle 0 picture et choisir l'image3picturesizemode 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'image2End Sub

Page 37: Un Premier Formula Ire USERFORM

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'image1End 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 initialeEnd 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 2End 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 initialeEnd Sub

Page 38: Un Premier Formula Ire USERFORM

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 = 0End 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 ?

Page 39: Un Premier Formula Ire USERFORM

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

Page 40: Un Premier Formula Ire USERFORM

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

Page 41: Un Premier Formula Ire USERFORM

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

Page 42: Un Premier Formula Ire USERFORM

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

Page 43: Un Premier Formula Ire USERFORM

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").ValueEnd 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.

Page 44: Un Premier Formula Ire 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.ShowEnd Sub