Diagramasde.com



Un premier formulaire (userform) pas à pasVous pouvez télécharger un exemple associé à ce tutoriel.IntroductionUn premier userform ultrasimpleUn exemple plus élaboréCréer l'interfaceInitialisation du userformValidation de donnéesTransfert de données du userform vers la feuilleTransfert de données de la feuille vers le formulaireIntroductionBeaucoup 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 ultrasimpleMettons 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 SubLes 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.ValueEnd SubEt 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 , 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'interfaceAvant 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ésCommen?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 à outilsSi 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.LabelsVous 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.TextBoxCliquez 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'bobox et list boxPour 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.BoutonsOutils 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 framesLes 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 imageCe 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?lesIl 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 codeMais 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 userformLorsqu'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 listesLes 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 SubComme 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 sortieIl 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 lePrivate 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éesUn 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 frappeIl 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?leDans 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 commePrivate 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 saisieLorsque 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 ExcelUne 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 userformDans 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 userformshautUn second formulaire pas à pas ?Mots clefs associés à cette page : combobox, formulaire, listboxVous devez vous identifier ou créer un compte pour écrire des commentairesMessage d'erreurPar copeau38, le mer 14/09/2011 - 17:07. BonjourJ'ai utilisé le fichier des recettes de cuisine que j'ai modifié pour mon utilisation pro car je suis enseignant dans le technique et j'ai rajouté un planning . mais j'ai un message d'erreur 380 "impossible de définir la propriété Rowsource" .comme je ne suis pas très fort je demande de l'aideMerci d'avance Copeau38Vous devez vous identifier ou créer un compte pour écrire des commentairesforumPar Misange, le ven 16/09/2011 - 18:54. Bonjoursi vous avez des questions sur un développement que vous essayez de faire merci de poser vos questions sur un forum de discuassion et pas ici. PAr exemple le fourm microsoft answers ou celui d'excel downloads.MisangeVous devez vous identifier ou créer un compte pour écrire des commentairesProblème rencontréPar pakocity, le sam 21/08/2010 - 14:51. Bonjour à tousJe 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 DJIKANGVous devez vous identifier ou créer un compte pour écrire des commentairesversion excelPar Misange, le dim 22/08/2010 - 17:07. Bonjource 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)MisangeVous devez vous identifier ou créer un compte pour écrire des commentairesProblè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 excelGr?ce à vous j'ai évolué considérablement avec mes Userforms.Merci une fois de plus pour votre aide.Augustin DJIKANGVous devez vous identifier ou créer un compte pour écrire des commentairesmerciPar Misange, le mer 01/09/2010 - 07:31. Merci du retour cela fait toujours très plaisir !MisangeVous devez vous identifier ou créer un compte pour écrire des commentairesModifier valeur de transfert d'un USERFORMPar 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 StringTerme = TxtTerme.TextSelect Case Len(Terme)Case 2 ', 5, 8, 11Terme = Terme & "+"End SelectTxtTerme.Text = TermeEn 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.CordialementCmzxNeneVous devez vous identifier ou créer un compte pour écrire des commentairesforumPar 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.MisangeVous devez vous identifier ou créer un compte pour écrire des commentairesRe transfertPar 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.CmzxNeneVous devez vous identifier ou créer un compte pour écrire des commentaireset rePar 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. MisangeVous devez vous identifier ou créer un compte pour écrire des commentairesFormat d'un champPar 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:ssA 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.CordialementCmzxNénéCmzxNeneVous devez vous identifier ou créer un compte pour écrire des commentairesvalidationPar Misange, le jeu 22/04/2010 - 11:56. BonjourLes questions que tu poses sont abordées dans les astuces référencées dans cette page 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 iciMisangeVous devez vous identifier ou créer un compte pour écrire des commentairesChamp date suitePar 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 ByteTxtDate.MaxLength = 10 'nb caractères maxi autorisé dans le textboxValeur = Len(TxtDate)If Valeur = 2 Or Valeur = 5 Then TxtDate = TxtDate & "/"End SubPetit 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.CordialementCmzxNeneVous devez vous identifier ou créer un compte pour écrire des commentairesValidation datePar 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 ... faut chercher un petit peu ;-)MisangeVous devez vous identifier ou créer un compte pour écrire des commentairesChamp DatePar CmzxNene, le dim 25/04/2010 - 10:52. Merci Misange.Il fallait utiliser le contr?le Cdate.Think YouA bient?tCmzxNeneVous devez vous identifier ou créer un compte pour écrire des commentairespropriété RowSource et nom de champPar 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.OLVous devez vous identifier ou créer un compte pour écrire des commentairesDans l'exemple téléchargeablePar 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 commentairesBonjour j'utilise Excel 2007Par Rachid, le mer 24/06/2009 - 16:06. Bonjourj'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 passeVous devez vous identifier ou créer un compte pour écrire des commentairesnom de la feuillePar Misange, le mer 24/06/2009 - 20:57. BonjourEst-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.MisangeVous devez vous identifier ou créer un compte pour écrire des commentairesbonjourPar 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 commentairesBonjour 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 commentairespas 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 !MisangeVous devez vous identifier ou créer un compte pour écrire des commentairesbonjourPar Rachid, le ven 26/06/2009 - 16:11. j'utilise un win vista version anglaisemais vous avez oublié le point virgule ici.....NBVAL($A:$A)-1;)Vous devez vous identifier ou créer un compte pour écrire des commentairesparamètre optionnelPar 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 ,)MisangeVous devez vous identifier ou créer un compte pour écrire des commentaires ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download