Macros-commandes VBA/Création de Formulaire
Un Userform (également appelé formulaire dynamique), permet de réaliser des interfaces utilisateurs simples et conviviales pour la saisie, la modification ou la visualisation de données. Nous allons dans ce chapitre expliquer le fonctionnement de base de la création de formulaire à l’aide de plusieurs exemples.
Généralités
modifierDéfinition du formulaire
modifierUn formulaire est un document conçu avec une structure et un format qui permettent de faciliter la lecture, la capture, l’organisation et la modification des informations à saisir ou à afficher. Il existe 2 types de formulaires :
- Les formulaires imprimés sur papier (formulaires statiques) qui contiennent des mises en forme, des étiquettes et des espaces vides pour écrire des données. Vous pouvez utiliser Excel et les modèles Excel pour créer des formulaires imprimés.
- Les formulaires affichés à l'écran (formulaires dynamiques) qui contiennent des mises en forme, des étiquettes, des objets de saisie et des espaces vides pour renseigner, cocher ou sélectionner des données et qui peuvent surtout réagir aux actions de l’utilisateur (clic, déplacement, ...). Vous pouvez utiliser VBA Excel pour créer des formulaires affichés.
Types de formulaires dynamiques Excel
modifierVous pouvez créer 2 types de formulaires dans Excel : formulaires utilisateurs (userforms) ou feuilles de calcul (sheets). Les 2 types peuvent contenir des contrôles de formulaire et des contrôles ActiveX ainsi que le code VBA qui leur est associé. Vous pouvez utiliser chaque type de formulaire de manière autonome, ou les combiner de différentes façons pour créer une solution qui vous convienne. Nous allons dans ce chapitre étudier les formulaires utilisateurs VBA.
Un peu de vocabulaire autour des formulaires
modifierDans le module Userform (formulaire), toutes les procédures sont des actions répondant à des actions sur des objets nommés contrôles ActiveX (formulaire, bouton, boite de texte, case à cocher, liste déroulante, …) inclus dans le formulaire. Ce formulaire présentant en outre un ensemble de propriétés , de méthodes et répondant à des événements :
- Name : permet de définir le nom du formulaire
- Caption : permet de définir le titre du formulaire
- Minimize : rapetisse le formulaire
- Load : charge en mémoire et ouvre le formulaire
- Show : affiche le formulaire
- Change : permet de déclencher des actions sur changement intervenu sur le formulaire
- Initialize : permet de déclencher des actions sur chargement du formulaire
- Activate : permet de déclencher des actions sur activation du formulaire
- Close : permet de déclencher des actions sur fermeture du formulaire
Création de l'interface
modifierAccès à l'éditeur Visual Basic
modifierAvant de créer l'interface de notre formulaire, l'utilisateur devra, en se positionnant sur l'onglet développeur du fichier EXCEL sur lequel il se trouve, 'ouvrir la fenêtre VBA'. Il pourra également utiliser le raccourci Alt + F11.
Insertion du formulaire
modifierUne fois la fenêtre VBA ouverte, l'utilisateur pourra créer un userform (formulaire), via insertion puis user form.
Il récupère alors un 'Userform vierge' qui apparait qu’il va personnaliser en fonction de ce qu’il veut effectuer avec ce formulaire (saisie de données, contrôles des données, proposition à l’utilisateur…). Cette personnalisation va notamment s’effectuer via 'les propriétés' et 'la boite à outils'.
Les propriétés
modifierGrâce aux propriétés du formulaire, il est possible de modifier un certain nombre de choses. Par souci de simplicité, nous n’abordons que quelques propriétés du formulaire dans cette leçon mais sachez qu’il en existe beaucoup d’autres. Nous aborderons les propriétés les plus courantes telles que :
Name
Caption
Font
Backcolor
–Bordercolor
-Border style
Picture
Pour afficher les propriétés
modifierPour 'afficher les propriétés', dans la même logique qu’avec Excel ou Windows, je place mon curseur sur le UserForm, j’effectue un clic droit et je vais afficher les propriétés.La fenêtre de propriété du UserForm s’affiche à droite en dessous de notre fenêtre projet, une multitude de propriété apparait.
Par souci de simplicité, nous ne présentons que quelques illustrations de l’utilisation des propriétés les plus utilisées permettant d’apporter plus d’esthétique (police, couleur…), mais également plus d'interactivité avec l'utilisateur.
Name
modifierLa propriété name correspond au nom de l’objet, c’est ce nom que l’on va utiliser dans notre code pour appeler l’objet.
De manière générale, et par souci d’efficacité, il est recommandé de nommer les objets en expliquant à quoi ils servent. Dans l’exemple que nous avons choisi, le formulaire va permettre à l’utilisateur l’allocation d’une charge de travail de chaque acteur en fonction du projet sur lequel il travaille. Il est donc recommandé de renommer le UserForm1 de base par UserFormProjet. Ce simple nommage permettra à l’utilisateur de s’y retrouver beaucoup plus facilement dans son code par la suite, de gagner du temps et d’éviter de nombreuses erreurs d’inattention.
La propriété Name peut aussi s'appliquer sur la propriété Parent de l'objet. Par exemple dans Excel :
Dim F As Excel.Worksheet
Set F = ActiveSheet
MsgBox "La feuille " & F.Name & " se trouve dans le fichier " & F.Parent.Name & " de l'application " & F.Parent.Parent.Name
Caption
modifierLa propriété caption permet à l’utilisateur de modifier le titre de son formulaire. Là encore, il est fortement recommandé à l’utilisateur de respecter une certaine cohérence. Toujours avec notre même exemple de formulaire pour la saisie de projet :
Font
modifierCette propriété va permettre à l’utilisateur de modifier la police de la caption que nous avons abordée précédemment. L’utilisateur va ainsi avoir la possibilité de choisir un type de police particulier, sa taille, si cette police sera en italique, en gras … Il suffit de se positionner sur font dans les propriétés, puis d’appuyer sur le bouton qui apparait à l’extrémité droite de la ligne.
Une fois cette étape effectuée, une boite de dialogue « police » apparait, il vous suffit ensuite de choisir la police qui vous convient.
Backcolor – Bordercolor - Border style
modifierCes trois propriétés vont permettre à l’utilisateur de modifier à sa guise la couleur de fond du formulaire, la couleur de la bordure mais également le style de la bordure. Ces trois propriétés sont très utiles quand vous voulez donner une esthétique recherchée à votre formulaire. Ces propriétés fonctionnent de la même façon que la propriété Font, en effet, il suffit de se placer sur la ligne de ces propriétés, cliquer sur le bouton qui apparait à l’extrémité droite, puis une liste de choix apparait.
La taille 0 correspond à une bordure invisible alors que la taille 1 correspond à une bordure simple.
Picture
modifierPour aller encore plus loin dans l’esthétisme, vous avez également la possibilité de placer une photo en image de fond de votre formulaire. Il suffit de se placer dans le propriété Picture, cliquer sur le bouton placé à l'extrémité de la ligne.
Une fois cette manipulation effectuée, une boite de dialogue charger une image apparaitra, il vous suffira alors d’aller chercher dans vos dossiers l’image que vous souhaitez sélectionner en image de fond pour votre formulaire.
Voilà à quoi ressemble votre formulaire une fois que vous avez effectué toutes ces modifications, simplement en ayant modifié quelques propriétés.
ControlSource
modifierCela permet de lier un champ du formulaire à une cellule d'une feuille qui existe dans le classeur. Le champ affichera donc la valeur de la cellule, puis sur libération il lui donnera sa nouvelle valeur (synchronisation).
Ex : Feuil1!A1
.
Si la cellule contient une formule, le champ du formulaire la remplacera par sa valeur. |
SpecialEffect
modifierCe champ définit le look de l’objet (formulaire, TextBox...), il peut prendre cinq valeurs différentes[1] :
- 0-frmSpecialEffectFlat : rendu 2D. C'est celui par défaut des formulaires.
- 1-fmSpecialEffectRaised : rendu 3D où l’objet est surélevé (mis en avant).
- 2-frmSpecialEffectSunken : rendu 3D où l’objet est abaissé (mis en arrière). C'est celui par défaut des TextBox et CheckBox.
- 3-fromSpecialEffectEtched : 2D avec une bordure.
- 4-frmSpecialEffectBump : 3D avec une bordure.
Les contrôles de la boîte à outils
modifierPour afficher la boite à outils, si elle ne s’affiche pas automatiquement, il faut se rendre dans affichage et sélectionner « boite à outils ».
Comme pour les propriétés, nous allons vous présenter un certain nombre de contrôles qui vous seront utiles pour créer votre formulaire personnalisé. Vous allez sélectionner certains contrôles de la boite à outils, les insérer dans votre formulaire, puis régler les propriétés de ces contrôles et enfin dynamiser ces contrôles en programmant leurs réactions aux événements (Clic, Saisie, Déplacement, Ouverture, ...).
De plus, vous pourrez ajouter des contrôles supplémentaires et personnaliser ainsi votre boite à outils. Vous trouverez également un certain nombre de contrôles ActiveX sur internet et il vous sera même possible, une fois que vous serez à l’aise avec la programmation, de créer vous-même vos contrôles.
Le label
modifierLe contrôle label permet généralement de placer un intitulé (libellé) à côté d’un contrôle ne procédant pas cet attribut, à côté d’une zone de texte par exemple, afin de permettre à l’utilisateur d’en identifier le contenu.
À partir de là, vous pouvez utiliser l’ensemble des propriétés que nous avons vu précédemment notamment renommer votre label afin d’aider l’utilisateur dans la compréhension du formulaire. Et voici ce à quoi votre formulaire pourrait ressembler si vous ajoutez 18 labels que vous renommez.
Le TextBox
modifierLe contrôle TextBox permet de placer des zones de saisie de texte sur la feuille, dans laquelle l’utilisateur pourra renseigner des informations. Les propriétés d’un contrôle TextBox permettent de contrôler le nombre de caractères maximum que pourra entrer l’utilisateur, l’affichage sur plusieurs lignes du texte ou encore le type d’alignement du texte dans la zone de texte...
Voici le formulaire obtenu une fois ajoutées 12 x 6 = 72 TextBox pour la saisie des utilisateurs. Afin que l’utilisateur ait l’impression de saisir ses informations dans un tableau, nous avons modifié l’une des propriétés des TextBox, la propriété BackStyle, en appliquant BackStyleOpaque.
La ComboBox
modifierLe contrôle ComboBox, ou la zone de liste modifiable, est une zone de texte permettant à l’utilisateur de saisir une valeur manuellement ou de la sélectionner dans la liste qui se déroule lorsqu’il clique sur le bouton prévu à cet effet. Un contrôle ComboBox peut permettre à l’utilisateur de saisir une valeur ne figurant pas dans la liste, ou n’autoriser qu’une des valeurs de la liste.
Ce contrôle n’inclut pas d’intitulé, par conséquent il est recommandé d’ajouter un Label pour que l’utilisateur s’y retrouve dans le formulaire.
Les alternatives sont la ListBox (liste défilante), et dans Excel la cellule liste (Données, Validation des données, Autoriser = Liste).
Le CommandButton
modifierIl est possible d’ajouter à votre formulaire un bouton permettant à l’utilisateur d’effectuer diverses actions. Il peut par exemple servir à valider les informations entrées dans la feuille (bouton OK) afin de passer à l’étape suivante du programme, ou au contraire d’interrompre le programme (bouton Annuler).
Il est important de garder à l’esprit lorsque que vous manipulez les contrôles ActiveX, que chaque ActiveX dispose de ses propres propriétés que vous pouvez manipuler à votre guise.
Finaliser la présentation du formulaire
modifierLa taille d'un formulaire est fixe ; il ne s'adapte donc pas automatiquement à la taille ou à la résolution de l'écran. Si le formulaire est utilisé sur un autre PC, en fonction des dimensions de ce dernier, il y aura certaines différences.
Il est possible de redimensionner le formulaire ainsi que tous les contrôles par code VBA mais ce n’est pas évident. Dans ce cas, il vaut mieux réaliser de petits formulaires afin d’anticiper l’usage d’un écran de plus petite taille que celui initialement utilisé.
Il est important de savoir que les contrôles onglet et surtout multi-pages permettent de répartir les différents contrôles sur plusieurs pages successives : c’est une bonne méthode pour permettre de saisir de façon plus simple un nombre conséquent de données.
Initialiser une boite de texte
modifierIl est également possible de pré remplir une boîte de texte avec un texte que l'utilisateur effacera pour faire sa saisie. Cela se fait au moment de l'initialisation du formulaire, par code VBA, ou bien dans la fenêtre propriété en remplissant la propriété "Text".
Modifier les couleurs
modifierIl est possible de choisir les couleurs de fond des formulaires ainsi que des différents contrôles utilisés. Pour cela, il y a deux possibilités :
- Utiliser une des couleurs prédéfinies de la palette en cliquant sur la flèche en face de backcolor puis sur palette.
- Définir sa propre couleur : clic droit sur la palette puis sur définissez votre couleur et enfin cliquer sur le bouton ajouter.
Aligner les contrôles
modifierAligner les contrôles permet d’avoir un meilleur visuel quant à la disposition des contrôles dans un formulaire. Pour cela, il faut :
- Sélectionner les contrôles voulus avec la touche Ctrl
- Les aligner : Menu format puis Aligner de l'éditeur VBA.
Il est également possible de les répartir ou encore d’ajuster leurs tailles de façon à avoir des dimensions uniformes et des espacements équidistants.
Définir l’ordre de saisie des contrôles
modifierAfin de faciliter la saisie, il paraît plus pratique d’user de la touche tabulation pour se déplacer dans un formulaire. Il est possible de définir l’ordre dans lequel les contrôles seront sélectionnés, pour cela :
- Ouvrir le menu affichage
- Sélectionner ordre de tabulation
- Faire monter ou descendre les différents contrôles qui apparaissent dans la liste jusqu'à ce que l’ordre convienne.
Afficher des messages d'aide
modifierInsérer des messages de façon à indiquer à l’utilisateur comment entrer une donnée est utile dans bien des cas. En effet, cela permet d’informer l’utilisateur et lui éviter de saisir plusieurs fois une information car le format n’étant pas adapté, l’information ne sera pas prise en compte : par exemple, indiquer que la date doit être saisie sous format jj/mm/aaaa. C’est la propriété controlTipText qui permet cela.
Exemple : renseignez "numéro à 10 chiffres sans espaces" dans le ControlTypeText de la textbox concernée
Tester l’apparence
modifierIl est possible de visualiser le formulaire à tout moment afin de vérifier comment le formulaire apparaîtra à l'utilisateur et de pouvoir ainsi corriger les éventuels indésirables. Pour cela, il suffit d’appuyer sur la touche F5 ; elle permet de lancer le formulaire.
Initialisation du formulaire : transfert de données de la feuille vers le formulaire
modifierDans cette partie, il s’agit de montrer comment procéder pour l’intégration des données issues d’un tableau Excel dans un formulaire dynamique. Il est à noter que ce n’est pas systématiquement un besoin. En effet, en fonction de l’exercice et des exigences, cela sera demandé ou non.
Le module VBA du formulaire
modifierDans un premier temps, il s’agit de d’accéder à l’Userform ou formulaire. Pour cela, il faut :
- Aller dans l’éditeur VBA
- Faire un clic droit sur le nom du formulaire pour visualiser le code associé.
Le formulaire s’ouvre alors ainsi que la fenêtre qui permet de visualiser tous les contrôles associés au formulaire.
Remplir les listes
modifierPour que les différents choix possibles s'affichent dans les listes, il y a plusieurs solutions. Celles-ci s'appliquent que ce soit une ListBox ou une ComboBox.
- La méthode AddItem : cette option consiste à taper un code VBA en utilisant l’instruction AddItem
- La propriété RowSource : cette option consiste à afficher la fenêtre propriété du contrôle et la paramétrer afin de sélectionner une plage de données bien précise. Elle peut être remplie en mode graphique avec un tableau (ex :
Feuille1!C22:C28
) - La propriété List : cette option consiste également à afficher la fenêtre propriété du contrôle et la paramétrer afin de sélectionner une plage de données bien précise
Concernant les propriétés RowSource et List, il s’agit de compléter manuellement dans la fenêtre propriétés du contrôle ou par VBA.
Via VBA
modifierIl s’agit de la méthode AddItem qui consiste en l’affectation d’une propriété à la plage de donnée voulue.
La méthode AddItem ajoute les éléments les uns après les autres. Pour cela, la macro doit être écrite dans le UserForm ‘UserForm Initialize’. Pour cette première méthode, il y a différentes étapes à suivre :
- Tout d’abord, il s’agit dans un premier temps de sélectionner la ComboBox ou ListBox concernée et vérifier que la propriété RowSource est vide.
- Ensuite, il faut double cliquer sur le userform créé pour accéder au code
- Enfin, il s’agit de composer le code avec l’instruction AddItem
- Après cela, il faut exécuter le programme afin de le tester.
Illustration :
Pour un exemple où il s'agit d'intégrer différentes projets, il faut agir comme suit :
Private Sub UserForm_Initialize()
'Cette procédure renseigne le ComboBox1 avec des valeurs
ComboBox1.AddItem "Projet 1"
ComboBox1.AddItem "Projet 2"
ComboBox1.AddItem "Projet 3"
End Sub
Ou
Private Sub UserForm_Initialize()
'Cette procédure renseigne la ListBox1 avec des valeurs
ListBox1.AddItem "Projet 1"
ListBox1.AddItem "Projet 2"
ListBox1.AddItem "Projet 3"
End Sub
On peut également remplir une liste à partir d'une plage de données sélectionnées : c’est conseillé et surtout utile lorsque on souhaite par exemple sélectionner uniquement les projets commençant par un caractère bien précis.
Illustration :
Private Sub UserForm_Initialize()
For Each projet in range("data!A1:A20")
If left(projet.value,1)="1" then ComboBoxchoixProjet.AddItem (projet.value)
End Sub
Il est à noter qu’il existe également la méthode RemoveItem mais celle-ci fait exactement l'inverse de la méthode AddItem : elle permet de supprimer un élément de la ComboBox ou ListBox.
Via la fenêtre propriétés et VBA
modifierCela concerne principalement la propriété RowSource : elle permet d’affecter une référence à une plage de données ; elle attend un champ vertical. Pour cette seconde méthode, il y a différentes étapes à suivre :
- On inscrit d’abord les données qui nous intéressent pour cette manipulation dans une feuille Excel
- Poser un label sur le UserForm
- Poser une zone de liste modifiable sur le UserForm
- Rechercher la propriété RowSource de la ComboBox et entrer simplement :
- 1ère option : les références de la feuille Excel comme ceci : Feuil1!A1:A3 – Il s’agit tout simplement de la source des données affichées dans la ComBox / l'adresse de la plage contenant les données ou,
- 2e option : un nom défini (onglet formules/définir un nom) faisant référence à la plage souhaitée ou,
- 3e option : la référence à une colonne d'un tableau Excel : par exemple Projet [Nucléaire] si le tableau s’appelle Projet et le titre de la colonne est Nucléaire. Pour cela il faut que les données source soient sous forme de tableau.
( Cette option présente un avantage comparé aux précédentes : elle permet d’intégrer automatiquement dans la liste sur le formulaire s’il y a ajout de données dans la colonne en question. )
Attention ! Il faut respecter les majuscules et minuscules dans les noms des tables et colonnes.
- Rechercher la propriété Value et lui donner comme valeur ‘Choisir’
- Poser un bouton de commande et entrer le code suivant :
Private Sub CommandButton1_Click()
Label1.caption = ComboBox1.Value
End Sub
- Enfin, exécuter le programme pour s’assurer de son bon fonctionnement
Instruction Array
Par ailleurs, on peut utiliser un array ou tableau interne pour remplir une liste ou une combobox.
C’est utile dans le sens où cela évite de devoir créer un tableau avec les données nécessaires dans un classeur Excel. C'est donc pratique uniquement s’il n’y que quelques éléments à ajouter dans la liste de choix. L’utilisation des array présente un autre intérêt non négligeable. En effet, l’utilisateur peut avoir besoin de construire une liste à partir d'éléments qui auront été sélectionnés auparavant suivant des critères complexes. Le résultat de ce tri peut être stocké dans un array qui sera ensuite réinjecté dans la liste en question.
L’un des grands avantages des tableaux est leur très grande rapidité d'exécution : travailler avec les tableaux est beaucoup plus rapide que de travailler en faisant des boucles sur des plages de données de la feuille.
Illustration :
Private Sub RemplirCombo()
ComboBoxProjet.List = Array("Un", "Deux", "Trois", "Quatre")
End Sub
C’est utile dans le sens où cela évite de devoir créer un tableau avec les données nécessaires dans un classeur excel. C'est donc pratique uniquement s’il n’y que quelques éléments connus d'avance à ajouter dans la liste de choix.
Il existe également la propriété List qui elle est remplie par un tableau vertical ou horizontal.
Afficher par défaut un élément de la liste ou une case vide
modifierC’est l’instruction listIndex qui permet d’afficher par défaut un élément de la liste.
Il est possible de forcer l’affichage du premier choix (ou d'un autre) élément de la liste en ajoutant l'instruction suivante :
ComboBoxProjet.ListIndex = 0 (ou 1 ou 2...)
Pour forcer l’affichage d'une case vide dans une ComBox, il faut utiliser l'instruction suivante :
ComboBoxProjet.ListIndex = -1
Les listes multi colonnes
modifierIl est envisageable de vouloir afficher non pas une mais deux voire deux, trois ou même quatre colonnes dans une seule liste.
La propriété ColumnCount est particulièrement utile dans ce cas là : elle permet d’indiquer le nombre de colonnes qu’il faudra par la suite compléter.
Il est plus simple de le faire à partir des données de la feuille.
Dans ce cas, il faut utiliser la propriété List: pour une ListBox ou une ComboBox multi colonnes, la propriété List attend un array à 2 dimensions afin de prendre en compte les lignes et les colonnes. Pour afficher une liste de 3 colonnes et de 7 lignes dans la ComboBox nommée Projet, il faudra agir comme suit :
Illustration :
With Projet ColumnCount = 3 List = Range("H2:J8").Value End With
La propriété list attend un array de valeurs. Il est donc parfaitement possible de remplir la liste multi-colonnes avec un array créé en VBA à partir d'autres données (feuille, autre array...).
C'est utile si l’on souhaite par exemple récupérer les données de la feuille puis les trier par ordre alphabétique ou ne conserver que les valeurs répondant à un critère particulier.
Par défaut, la propriété par défaut Value d'une ListBox ou d'une ComboBox renvoie la valeur de la première colonne. Si vous voulez que ce soit par défaut la valeur de la 2e colonne ou autre, il faut le préciser en utilisant la propriété BoundColumn
Illustration :
Projet.boundColumn = 2
Les listes à choix multiples
modifierLes listes à choix multiples permettent de sélectionner plusieurs réponses. Ce n’est pas le cas des ComboBox.
Par défaut, un seul choix est possible mais il est possible d’autoriser le choix multiple par l’intermédiaire de l’instruction MultiSelect.
Illustration :
Il faut ajouter cette ligne dans le UserFor_Initialise :
ListActivité.MultiSelect = fmMultiSelectExtended
Les boutons d'option et les cases à cocher
modifierIl est possible de proposer un choix par défaut à l'utilisateur quand le formulaire s'affiche comme par exemple répondre "Monsieur" à la demande d’État Civil.
La propriété par défaut d'un bouton d'option ou d'une case à cocher est la propriété value : elle n'admet que deux valeurs : true ou false (vrai ou faux) et cela même si vous affichez "Monsieur" ou "Madame" sur vos options. On pourra bien entendu récupérer le genre par la suite quand le formulaire sera validé.
Pour initialiser le formulaire avec l'option "Monsieur" pré cochée, il suffit d'ajouter une ligne dans le code UserForm_Initialize.
Dans le cas où le bouton s’appelle OptF, on procède comme suit :
Illustration :
OptF.value = true ou OptF = True
La propriété value étant la propriété par défaut il n’est pas nécessaire de le préciser ainsi, les deux écritures sont équivalentes.
Il faut noter que les boutons d'option sont exclusifs ainsi si l’on écrit : OptM=true et OptF=true, seul le bouton OptF sera coché.
Pour ce qui est des cases à cocher, il en est tout autrement : il est possible de cocher plusieurs cases.
Les boîtes de texte et les labels
modifierIl est possible d’afficher, sur le formulaire, une information qui n’a pas à être modifié par l’utilisateur comme par exemple la date ou le contenu d’une cellule.
Illustration :
Pour afficher la date du jour dans l'étiquette nommée LblDate :
LblDate = Date
Il faut noter que ‘Date’ est une instruction de VBA qui affiche la date du jour.
Autrement, pour afficher le contenu de la cellule D2 de la feuille Data :
LblX = sheets("data").range("D2")
Attention ! : Il n’est pas possible d’afficher une plage de données dans une étiquette ; Excel renvoie une erreur d'incompatibilité.
Il est également possible de pré remplir une boîte de texte, que ce soit pour mettre un texte indiquant à l'utilisateur ce qu’il doit remplir, ou pour proposer une réponse.
Illustration :
TxtPrénom.Text = "saisissez votre prénom ou votre pseudo"
Tester votre formulaire
modifierIl est possible de tester le formulaire à tout moment pendant l’écriture du code dans le UserForm_Initialize en appuyant sur la touche F5 avec le curseur placé n’importe où dans le code, ou sur le formulaire dans l'éditeur VBA. À ce stade du cours, l’on a un formulaire avec des listes pré remplies, des options pré côchées et des boites de texte vides ou pré remplies. Cependant, l'appui sur les boutons ou le choix dans une liste ne déclenche rien. Nous allons voir dans le paragraphe suivant comment activer les boutons et récupérer les informations saisies par l'utilisateur.
Afficher et masquer un formulaire
modifierComment afficher un formulaire grâce à un bouton ?
modifierPour pouvoir afficher un formulaire, nous pouvons utiliser deux méthodes : afficher le formulaire à l'ouverture du classeur ou à l'aide d'un bouton. Nous allons voir dans un premier temps la méthode du bouton placé sur la feuille
Bouton formulaire ou bouton activeX ?
Ouvrir Excel et placer un bouton sur la feuille Excel à l'endroit souhaité : pour effectuer cette manœuvre les étapes à suivre sont les suivantes :
- Aller dans l'onglet développeur
- Cliquer sur insérer
Excel nous propose d'insérer deux types de contrôles sur votre feuille : Des contrôles de type formulaire. Des contrôles de type ActiveX.
Un contrôle formulaire permet de faciliter l’organisation et la modification des informations. Les contrôles formulaires sont issus des versions antérieures d'excel, ils sont conservés pour des raisons de compatibilité d'excel.
Les contrôles Activex étaient connus sous le nom de contrôles OLE ou de contrôles OCX, en insérant dans une page Web ou autre programme des contrôles ActiveX d'autres utilisateurs pourront réutiliser les fonctionnalités insérées.
Nous allons nous intéresser aux UserForm VBA incluant des objets ActiveX.
- Pour insérer un contrôle, sélectionnez le dans la boite à outils et faites le glisser dans le formulaire. Au moment du dépôt dans le formulaire, certains assistants se déclenchent (boutons, options, ...), puis entrez ses propriétés et nommez le grâce à la fenêtre propriétés.
- Pour programmer un contrôle, double-cliquer dessus et renseigner le code VBA à lui associer
Afficher le formulaire avec un bouton placé dans la feuille
Nous allons voir les différents boutons proposés par l'onglet "Développeur"
Placer le bouton de votre choix sur la feuille excel. Dans l'onglet Développeur et cliquez dans propriétés.
Voici un bouton placé sur feuille Excel
La mise en forme du bouton peut être modifiable voici les actions pouvant être menées :
- Contrôler l’affichage définitif du formulaire
- Sélectionner et de désélectionner les contrôles afin de procéder à des modification supplémentaires.
- Modification du texte dans un contrôle, telle que la légende ou l’étiquette.
- Grouper, copier, déplacer et aligner les contrôles afin d’organiser la disposition du formulaire de feuille de calcul.
- Redimensionner les contrôles afin d’obtenir l’affichage souhaité.
- Positionner ou dimensionner un contrôle avec une cellule.
- Protéger les contrôles et les cellules en fonction de vos besoins de protection
- Activer ou désactiver l’impression des contrôles lors de l’impression du formulaire de feuille de calcul.
- Supprimer des contrôles qui sont inutiles.
Il faut créer un bouton dans la feuille (partie développeur → insérer → bouton - > cliquer sur la cellule choisie) et lui affecter la macro suivante.Une fois le bouton installé vous devez inscrire une instruction qui lance l’affichage d'un formulaire en appelant par son nom :
Private Sub CommandButtonformulaire_Click()
UserFormprojet.Show
End Sub
Cette instruction lance l’affichage du formulaire en commençant par la macro UserFormprojet.Show. Si Excel vous affiche un message d'erreur à ce stade, lancez votre formulaire en mode pas à pas : mettez vous dans l'éditeur VBA cliquez dans le formulaire et appuyez sur la touche F8 de façon répétée. Le code défile et vous verrez où se situe votre erreur.
Masquer un formulaire
modifierL'instruction qui vous permettre de masquer le formulaire est la suivante :
UsfAdhérent.hide
Mais si vous voulez faire réapparaître un formulaire dans l'état où il était lorsque vous l'avez masqué, utiliser l'instruction suivante :
UsfAdhérent.show
Modification du formulaire en cours de saisie et validation des données
modifierModifier les couleurs d'un bouton
modifierCliquer sur le bouton "CommandButton1", puis affichage ⇒ Fenêtre Propriétés
http://bdiemert.free.fr/wikiversity/VBA/IDEFenetrePropriete.jpg
Dans la liste des Propriétés ⇒ Affichage "Par catégorie" ⇒ Menu "Apparence" ⇒ Propriété "BackColor" pour la couleur du fond (ou Propriété "ForeColor" Pour la couleur du texte) ⇒ Dans la liste déroulante à droite ⇒ Affichage "Palette" et sélection de la couleur
http://bdiemert.free.fr/wikiversity/VBA/IDEFenetrePaletteCouleurs.jpg
Modifier le texte et la police du bouton
modifierDans la liste des Propriétés ⇒ Affichage "Par catégorie" ⇒ Menu "Apparence" ⇒ Propriété "Caption" ⇒ Entrer le libellé : "Quitter"
Pour modifier la police ⇒ Menu "Police" ⇒ Propriété "Font" et sélectionner la police, le style et la taille
http://bdiemert.free.fr/wikiversity/VBA/IDEFenetrePolice.jpg
Résultat sur le formulaire
http://bdiemert.free.fr/wikiversity/VBA/FRMBoutonQuitter.jpg
Utiliser un intitulé (Label) et une zone de texte (TextBox)
modifierPour cet exemple nous allons créer 2 zones de texte, une pour le nom l'autre pour le prénom, 2 intitulés et un bouton "Valider".
- Placer 2 intitulés sur le formulaire, (le contrôle avec un « A ») l'une à côté de l'autre, dans la propriété "Caption" de la première taper : « Nom », dans la deuxième : « Prénom », puis utiliser les propriétes "BackColor, ForeColor, Font ou autres pour la mise en forme ⇒ http://bdiemert.free.fr/wikiversity/VBA/IDEBoiteOutilsLabel.jpg
- Sous chaque intitulé nous placerons 2 zones de texte (le contrôle avec « ab| ») ⇒ http://bdiemert.free.fr/wikiversity/VBA/IDEBoiteOutilsTexte.jpg
- Faire un double-clic sur la première (pour afficher le code) et taper le code suivant :
Private Sub TextBox1_Change()
[A1] = UserForm1.TextBox1
End Sub
Ceci affiche dans la cellule A1 le texte tapé de la zone de texte 1 (TextBox1)
- Idem pour la deuxième mais avec ce code ci ⇒ http://bdiemert.free.fr/wikiversity/VBA/FRMNomPrenom.jpg
Private Sub TextBox2_Change()
[B1] = UserForm1.TextBox2
End Sub
Change()
est un des évènements prédéfinis qui surviennent lors des manipulations de zone de texte, comme les suivantsClick()
Initialize()
BeforeUpdate()
AfterUpdate()
Bouton "Valider"
modifierMaintenant nous allons concaténer le nom et le prénom dans la cellule C1. Pour cela, nous allons créer un bouton, et rentrer dans la propriété "Caption", y écrire "Valider", puis dans la propriété ⇒ Apparence ⇒ (Name) le nommer : "Bt_Valider", Double-cliquer sur ce bouton et taper ce code :
Private Sub Bt_Valider_Click()
[C1] = UserForm1.TextBox1 & " " & UserForm1.TextBox2
End Sub
Maintenant, nous allons afficher le formulaire, taper le nom dans la zone de texte 1 et le prénom dans la 2 puis cliquer sur le bouton « Valider » ⇒ http://bdiemert.free.fr/wikiversity/VBA/IDENomPrenomValider.jpg
Programmer une zone de liste (ComboBox)
modifierPour cet exemple nous allons créer un intitulé « Où habites-tu? » et une zone de liste « Les villes ».
Intitulé
modifierPlacer un intitulé sur l'UserForm, rentrer dans la propriété "Caption" : « Où habites-tu ? » puis utiliser les propriétés de mise en forme « BackColor, ForeColor, Font » etc.
Zone de liste (ComboBox)
modifierDans les cellules A1 à A15 de la feuille 2 (Feuil2) du classeur entrer des noms de ville. '11e image' « http://imageshack.com/a/img89/4760/5wnz.jpg » (Archive • Wikiwix • Que faire ?). Consulté le 2017-07-23
Revenir à l'éditeur Visual Basic (« Alt » + « F11 »), sélectionner le formulaire, y placer une zone de liste modifiable ⇒ '12e image' « http://imageshack.com/a/img23/6808/nwxn.jpg » (Archive • Wikiwix • Que faire ?). Consulté le 2017-07-23
Dans les propriétés ⇒ Données ⇒ RowSource, rentrer la zone ciblée : Feuil2!A1:A15 ⇒ '13e image' « http://imageshack.com/a/img801/245/3pfh.jpg » (Archive • Wikiwix • Que faire ?). Consulté le 2017-07-23
Double-cliquer sur la zone de liste (ComboBox) et rentrer ce code:
Private Sub ComboBox1_Change()
[C3] = UserForm1.ComboBox1
End Sub
Utiliser un bouton Option
modifier- Pour cet exemple nous allons créer 2 boutons d'option pour choisir entre : « Fille » ou « Garçon », il faut placer avant tout chose un cadre (Frame) sur l'UserForm. Propriété ⇒ Caption : « Fille ou garçon » ⇒ '14e image' « http://imageshack.com/a/img20/8900/4bvh.jpg » (Archive • Wikiwix • Que faire ?). Consulté le 2017-07-23
- Il faut ensuite placer sur ce cadre 2 boutons d'option, nommer le 1er : « fille », le 2e : « garçon », se servir des propriétés « BackColor, ForeColor, Font etc » pour la mise en forme ⇒ '15e image' « http://imageshack.com/a/img4/6462/anbj.jpg » (Archive • Wikiwix • Que faire ?). Consulté le 2017-07-23
- Double-cliquer sur le premier bouton (Fille) et entrer ce code:
Private Sub OptionButton1_Click()
If Controls("OptionButton1").Value = True Then
[C4] = "Vous êtes une " & Controls("OptionButton1").Caption
End If
End Sub
Ce qui écrira dans la cellule C4 "Vous êtes une fille" lorsque ce bouton sera coché
- Double-cliquer sur le deuxième bouton (Garçon) et saisir le code :
Private Sub OptionButton2_Click()
If Controls("OptionButton2").Value = True Then
[C4] = "Vous êtes un " & Controls("OptionButton2").Caption
End If
End Sub
Cela écrira dans la cellule C4 "Vous êtes un garçon" lorsque ce bouton sera coché ⇒ '16e image' « http://imageshack.com/a/img191/7605/nwl1.jpg » (Archive • Wikiwix • Que faire ?). Consulté le 2017-07-23
Contrôler une saisie dans une TextBox
modifierNous allons vérifier maintenant la saisie d’une TextBox à l’aide d’un nouvel exemple :
- Placer un label en haut du formulaire, Propriété ⇒ Caption : Indiquez votre prénom
- Placer une TextBox dessous
- Le bouton de commande tout en bas, Propriété ⇒ Caption : Valider ⇒ '17e image' « http://imageshack.com/a/img41/4899/bcy4.jpg » (Archive • Wikiwix • Que faire ?). Consulté le 2017-07-23
- Programmer le bouton "Valider" via un double-clic et la saisie du code suivant :
Private Sub CommandButton1_Click()
If Controls("Textbox1") = "" Then
MsgBox "Vous devez ABSOLUMENT indiquer votre prénom !", vbExclamation, "ERREUR"
Controls("Textbox1").SetFocus
End If
[A1] = UserForm1.TextBox1
End Sub
Tant qu'au moins une lettre du prénom ne sera pas saisie, le focus replacé sur la TextBox1, sinon le prénom s'affichera en A1 ⇒ '18e image' « http://imageshack.com/a/img51/1829/2z3r.jpg » (Archive • Wikiwix • Que faire ?). Consulté le 2017-07-23
Transfert de données du formulaire dans la feuille
modifierBoîtes de texte
modifierDe base, la propriété d’une zone de texte par défaut est le texte. Pour mettre le contenu de cette boîte de texte dans une cellule de la feuille de calcul, écrivez :
Range("C1").value = TextBox1 Range("C2").value = TextBox2
Il y a bien sûr la possibilité d’effectuer une boucle afin d’affecter une valeur aux TextBox de façon automatique. (Voir exercice associé à cette leçon).
Exercice :
Private Sub RangeBoitesDansCellules()
' se positionne sur la feuille suivi
Set f = Sheets("Tb suivi Projets + MCO + Act")
' teste l’ordre du projet sélectionné
If numeroDeProjet >= 0 Then
'initialise les lignes de début et de fin
'en fonction de l’ordre du projet dans le combo
ligned = 3 puis 11 puis 19 puis 27 ...
lignef = 8 puis 16 puis 24 puis 32
ligned = (numeroDeProjet * 8) + 3
lignef = ligned + 5
End If
' initialiser les box
boite = 0
' boucle sur les lignes de début à fin
For ligne = ligned To lignef
' boucle sur les colonnes C à N
For colonne = 3 To 14
' change de textbox à chaque tour
boite = boite + 1
' range dans la cellule pointée par la colonne et la ligne
' la valeur de la boite de texte pointée par le numéro de box
f.Cells(ligne, colonne) = Me.Controls("TextBox" & boite).Value
' va à la colonne suivante
Next colonne
' va à la ligne suivante
Next ligne
End Sub
'On peut aussi affecter cette valeur à une variable :'
Dim Nom as String Nom = TextBox1
ComboBox
modifierConcernant la propriété d'une ComboBox, par défaut c’est .Value. Contrairement aux TextBox qui ne renvoient que du texte qu’il faut ensuite éventuellement transtyper (changer le Type texte en nombre, date...), Excel reconnait le type de donnée renvoyé par une liste. Dim Activité as String 'à modifier si la liste contient une date ou un nombre ! Activité= ListActivité Range("F2")=Activité ou bien directement Range("F2")=ListActivité
Exercice :
Private Sub RangeProjetsDansCombo()
' se positionne sur la feuille projet
Set f = Sheets("Projets")
'initialise les variables de projets
numeroDeProjet = -1
'Alimentation de la combobox avec le nom des différents projets
For projet = 2 To 4
ComboBoxChoixProjet.AddItem f.Cells(projet, 1)
Next projet
End Sub
Exercices
modifierExemple d'initialisation d'un formulaire
modifierLe code suivant initialise le formulaire en masquant et minimisant Excel, en réglant taille, hauteur, largeur et position
Sub monFormulaire_Initialize()
Excel.Application.Visible = False ' on peut masquer les feuilles de calculs
WindowState = Excel.XlWindowState.xlMinimized ' ou bien les minimiser
Me.Width = Application.Width ' ou encore recouvrir toute leur largeur
Me.Height = 590 ' définir de la hauteur en pixel
Me.Top = 0 'positionner en haut
Me.Left = Application.Left + Application.Width - Me.Width ' positionner le plus à droite possible
End Sub
Exemple de code associé à un contrôle
modifierPour commencer à associer du code à un contrôle, il est pratique de double cliquer dessus car cela crée automatiquement l'en-tête de la fonction.
Le code suivant rend visible un bouton quand on coche une case, et le masque quand on la décoche
Sub maCasaCocher_Click()
If maCasaCocher.maCasaCocher= True Then
Me.monBoutonaCacher.Visible = True
Function
Else
Me.monBoutonaCacher.Visible = False
End If
End Sub
End Function
Exemple de création d'un formulaire personnalisé
modifierCi-dessous, le lien pour l'exercice de création de formulaire personnalisé :
Les formulaires Access et Excel
modifierDescription
modifierQu'est ce qu'un formulaire ?
Un formulaire est un document conçu avec une structure et un format standards qui permettent de faciliter la capture, l’organisation et la modification des informations.
Les formulaires imprimés contiennent des instructions, des mises en forme, des étiquettes et des espaces vides pour écrire ou taper des données. Vous pouvez utiliser Excel et les modèles Excel pour créer des formulaires imprimés.
Types de formulaires Excel
Vous pouvez créer plusieurs types de formulaires dans Excel : formulaires de données, feuilles de calcul contenant des contrôles de formulaire et des contrôles ActiveX, et formulaires utilisateurs VBA (Visual Basic Applications). Vous pouvez utiliser chaque type de formulaire de manière autonome, ou les combiner de différentes façons pour créer une solution qui vous convienne. Nous allons dans ce chapitre les formulaires utilisateurs VBA.
Un peu de vocabulaire avant de commencer
Dans les modules Userforms (formulaire), toutes les procédures sont des actions répondant aux contrôles ActiveX (formulaire, bouton, boite de texte, case à cocher, …) inclus dans le formulaire.
Propriétés du formulaire
Name : permet de définir le nom du formulaire
Caption : permet de définir le titre du formulaire
Méthodes du formulaire
Minimize : rapetisse le formulaire
Load : charge en mémoire et ouvre le formulaire
Show : affiche le formulaire
Événements du formulaire
Change : permet de déclencher des actions sur changement du formulaire
Initialize : permet de déclencher des actions sur chargement du formulaire
Activate : permet de déclencher des actions sur activation du formulaire
Close : permet de déclencher des actions sur fermeture du formulaire
Comment créer son formulaire simple ?
Avant toute chose, une fois votre fichier Excel ouvert, allez dans Fichier, Option et cochez Afficher l'onglet développeur dans le ruban. Une fois cette option activée, placez-vous sur l'onglet développeur et cliquez sur Visual Basic à gauche du ruban. Une nouvelle fenêtre VBA s'affiche. Cliquez maintenant sur Insertion : UserForm. La base de votre formulaire est créée qui s’appelle userform1. À ce stade, diverses fenêtres se sont affichées :
Fenêtre projet
Affiche tous les conteneurs de code VBA (modules, formulaires, …)
Fenêtre code
Affiche tous les codes VBA (modules, formulaires, …), dans le cas des formulaires, affiche aussi le design de la fenêtre
Fenêtre propriété
Affiche toutes les propriétés des objets sélectionnés (modules, formulaires, listes, …)
Une boite à outils est également apparue; elle vous servira à construire votre formulaire.
Vous pouvez modifier le nom de votre formulaire userform 1 dans la fenêtre propriété, name.
Les principaux contrôles de la boite à outils
Intitulé : texte simple non modifiable par l'utilisateur : titre, étiquette accompagnant une zone de texte
Zone de texte : champ texte accessible en saisie
Zone de liste modifiable : permet de sélectionner 1 à plusieurs valeurs dans une liste prédéfinie
Zone de liste : permet de sélectionner 1 à plusieurs valeurs dans une liste prédéfinie
Case à cocher : permet de sélectionner 0 ou plusieurs options parmi celles proposées
Bouton d'option : permet de sélectionner une option parmi plusieurs proposées
Bouton bascule : bouton prenant deux états : appuyé ou relâché
Cadre : contient d'autres contrôles
Bouton de commande : permet d'exécuter une action en cliquant dessus (ouvrir un formulaire, calculer, etc.)
Contrôle d'onglet : permet de définir différents onglets contenant des informations différentes
Image : permet d'insérer une image dans le formulaire
Les Assistants : uniquement pour certains contrôles simples (boutons, options, etc.)
Sélectionnez un contrôle de la boite à outils afin de déterminer la forme et, en restant appuyé dessus, faites le glisser dans userform1.
Tapez vos données à l'intérieur et nommez le dans la fenêtre propriétés.
Recommencez autant de fois que nécessaire.
Création
modifierAccess et Excel permettent l’utilisation de formulaires, en plus de leurs bases de données et feuilles de calcul.
Pour créer un userform dans Excel, il faut passer en vision du code : ALT + F11. Ensuite dans l'arborescence à gauche, le clic droit permet la création de trois type d'objets : feuille, userform et module.
Si les modules ne peuvent contenir que du Visual Basic, les feuilles et userform peuvent en comporter également. |
Pour qu'un userform se lance automatiquement au démarrage, ajouter le code suivant dans une feuille :
Sub workbook_open()
MonFormulaire1.Show vbModeless
End Sub
- On désigne donc le formulaire par son nom (MonFormulaire1 ci-dessus). Mais dans le code du formulaire, on peut utiliser Me à la place.
- Supprimer la mention vbModeless ci-dessus entraine l'impossibilité d'ouvrir d'autres fichiers Excel pendant l’utilisation du formulaire.
Le code suivant initialise le userform qui le contient, en effet le nom de cette fonction est connu et la lance automatiquement au lancement :
Sub UserForm_Initialize()
Excel.Application.Visible = False ' on peut masquer les feuilles de calculs
WindowState = Excel.XlWindowState.xlMinimized ' ou bien les minimiser
Me.Width = Application.Width ' ou encore recouvrir toute leur largeur
Me.Height = 590 ' définition de la hauteur en pixel
Me.StartUpPosition = 0 ' position du userform
Me.Top = 0
Me.Left = Application.Left + Application.Width - Me.Width ' le plus à droite possible
End Sub
Ensuite, en mode création la boite à outil permet d'ajouter des objets dans le userform (boutons, champs...). Nommer ces objets dans leur propriété permet de le appeler ensuite :
MonFormulaire1.MonChamp1 = "Hello the world !"
Les principaux contrôles et leurs propriétés
modifierFrame
modifierCadre permettant de subdiviser le formulaire en plusieurs sous-parties.
Button
modifier- Name
- Backcolor
- Enabled
- Location
- Size
- TabIndex
- TabStop
- Tag
- Text
- Textalign
- Visible
Label
modifierLinkLabel
modifierHyperlien.
TextBox
modifierChamp pouvant être complété par l'utilisateur.
CheckBox
modifierCase à cocher pour questionnaire à choix multiple.
OptionButton
modifierLe bouton d'option (ou bouton radio) permet de ne choisir qu'une seule réponse dans une liste.
Pour définir le groupe de boutons dans lequel une seule case pourra être cochée (égale à True), il faut préciser son nom dans la propriété GroupName de chaque bouton.
ListBox
modifierMenu déroulant. La différence avec ComboBox est qu'elle n’est pas modifiable.
Image
modifierPictureBox
modifierLigne - Line
modifierForme géométrique - Shape
modifierExplorateur de disques
modifierExplorateur de dossiers
modifierExplorateur de fichiers
modifierUne fois tous les objets placés à leurs emplacements définitifs dans le formulaire, il faut ordonner leur paramètre Tab_Index (en commençant à 0) pour que l'utilisateur puisse les parcourir normalement en appuyant sur TAB. |
Exemple de code associé à un contrôle
modifierPour commencer à associer du code à un contrôle, il est pratique de double cliquer dessus car cela crée automatiquement l'en-tête de la fonction.
Celle ci-dessous affiche un bouton quand on coche une case, et le masque quand on la décoche :
Sub MaCasaCoche_Click()
If Me.MaCasaCoche = True Then
Me.MonBoutonCache.Visible = True
Else
Me.MonBoutonCache.Visible = False
End If
End Sub
Inventaire des composantes d'un formulaire
modifierPour lister tous les objets que contient un formulaire :
Dim ctrl As MSForms.Control
For Each ctrl In Me.Controls
MsgBox ctrl.Name
Next
Compiler un exécutable
modifierPour créer une application .exe standard avec Visual Basic, il faut réer un nouveau projet ActiveX EXE.
Les applications MDI permettent l’utilisation de sous-fenêtres, par opposition aux SDI (une seule fenêtre) aux TDI (plusieurs onglets).
Références
modifierAnnexes
modifierBibliographie
modifier- Amelot M., 2011, VBA Excel 2010, ENI, St Herblain
- Premium Consultants, 2010, VBA pour excel 2010 , Micro Application, Paris
- Jensen O.G., 2003, Initiation à la programmation VBA Word, KNOWWARE, Ecuelles
- Greg Harvey, 2013, Excel 2013 et VBA pour le nuls, Editions Générales First
- Henri Laugié , 2003, VBA Excel : entrainez vous à créer des applications professionnelles , Microsoft
- Mikael Bidault, 2013, Excel vba developpez des macros compatibles avec toutes les versions d excel , Pearson education
Liens internes
modifier- Formulaire simple : exercice simple sur boutons de formulaire
- Leçon VISUAL BASIC
- Leçon Tableur EXCEL
- Les formulaires VBA
Liens externes
modifier- Utiliser les formulaires VBA
- Utiliser les contrôles dans les formulaires VBA
- ActiveX
- Interfaces VBA
- un formulaire personnalisé
- Visual Basic .NET/Contrôles sur Wikilivres