Voulez-vous que vos applications soient conviviales et faciles à utiliser ? Dans ce chapitre, nous explorerons les éléments qui vous permettront de créer une interface personnalisée pour vos projets. Cela permettra aux applications d’être flexibles, de refléter autant que possible la logique métier du projet et d’offrir une convivialité optimale.
Un formulaire personnalisé ou UserForm est une boîte de dialogue dans laquelle vous placez les différents contrôles dont votre application a besoin. Vous pouvez réfléchir à l’interface de votre projet de manière à ce qu’elle contienne non pas un, mais plusieurs formulaires. De plus, l’ensemble de contrôles ne servira qu’à accomplir cette tâche spécifique. Dans tous les cas, l’utilisation de formulaires donnera à votre projet un aspect individuel, facilitera au maximum le traitement des différentes données applicatives et réduira également le temps passé à effectuer les opérations nécessaires à leur traitement.
1 A propos des UserForm
1.1 Créer un UserForm
La première étape de la création d’un UserForm consiste à en insérer un dans Visual Basic Editor. Pour ce faire, appuyez sur Alt + F11 pour accéder au VBE et sélectionnez le nom de votre classeur dans l’Explorateur de projet, comme illustré à la figure suivante.
Le nom du classeur étant sélectionné, dans la barre de menus, cliquez sur Insertion/ UserForm comme illustré à la figure suivante.
Un nouveau UserForm s’ouvre dans sa fenêtre de conception, comme illustré à la Figure suivante.
1.2 Personnaliser un UserForm
Les UserForms ont une variété de propriétés. Vous pouvez afficher la fenêtre Propriétés pour l’UserForm en cliquant sur Affichage/Fenêtre Propriété, comme le montre la figure suivante ou en cliquant sur son icône Propriétés.
Sous l’Explorateur de projet, vous verrez la fenêtre Propriétés, partiellement visible dans la figure suivante.
Pour le premier UserForm du classeur, VBA attribue une valeur par défaut de UserForm1 à ses propriétés Name et Caption, comme vous pouvez le voir dans la figure suivante. Si vous deviez créer un deuxième UserForm, ses propriétés Name et Caption par défaut seraient UserForm2 et ainsi de suite. Pour faire la distinction entre les propriétés Name et Caption, la figure suivante montre où la propriété Name a été remplacée par frmEmployes et la propriété Caption, qui s’affiche dans la barre de titre de UserForm, a été remplacée par Employes.
REMARQUE
Lorsque vous nommez un UserForm, ou tout autre objet d’ailleurs, il est préférable d’attribuer un nom correspondant au thème de l’objet. Lorsque vous nommez un UserForm, il est souhaitable d’utiliser le préfixe frm (pour UserForm) suivi d’un terme simple et intuitif (tel que Employes dans cet exemple) qui représente l’idée de base de l’objet UserForm.
2 Ajout de contrôles à un formulaire personnalisé
Comme nous l’avons vu dans le chapitre précèdent, un contrôle est un objet tel qu’un Label, TextBox, OptionButton ou CheckBox dans un UserForm ou incorporé dans une feuille de calcul qui permet aux utilisateurs d’afficher ou de manipuler des informations. VBA prend en charge ces contrôles et d’autres, qui vous sont accessibles à partir de la boîte à outils VBE. Pour afficher la boîte à outils afin que vous puissiez facilement saisir les commandes que vous voulez, vous pouvez cliquer sur l’icône Boîte à outils, ou cliquer sur Afficher la boîte à outils comme illustré à la figure suivante.
Figure : Afficher la boîte à outils
Les contrôles que vous placez sur votre UserForm dépendent de son objectif. Si vous souhaitez concevoir un formulaire simple pour recueillir des informations sur les employés de votre entreprise, vous voudrez au moins connaître les noms des employés et leurs titres. Il serait utile d’afficher une zone de texte pour entrer le nom de l’employé, puis une liste des titres de poste de l’entreprise afin que l’utilisateur puisse en sélectionner un sans effort. La figure suivante montre la boîte à outils avec la souris survolant l’icône de contrôle Intitulé.
Vous placez un contrôle sur votre UserForm en dessinant le contrôle sur la zone de création de votre UserForm. Tout ce que vous avez à faire est de cliquer sur l’icône de contrôle Toolbox que vous souhaitez ajouter à UserForm et de la dessiner comme vous dessineriez un objet Shape sur une feuille de calcul. La figure suivante montre un contrôle Intitulé (Label) qui vient d’être dessiné, montrant sa légende par défaut de Label1.
Notez dans la Figure que la propriété Légende de l’Intitulé est sélectionnée dans la fenêtre Propriétés, de sorte qu’une légende plus significative peut être ajoutée à l’étiquette. Étant donné que le libellé sera directement au-dessus de la zone de texte et que le but de la zone de texte est de saisir un nom d’employé, la légende de l’étiquette est remplacée par le nom de l’employé, comme illustré à la figure suivante. Notez en outre dans la figure 14.10 que l’icône TextBox est sur le point d’être sélectionnée dans la boîte à outils, car vous vous préparez à dessiner un contrôle Zone de texte (TextBox) sur le formulaire utilisateur sous l’étiquette.
Après avoir cliqué sur l’icône TextBox de la boîte à outils, vous ajoutez un contrôle TextBox en le dessinant sur la zone de création de l’UserForm, comme vous l’avez fait lorsque vous avez ajouté le contrôle Label. La figure suivante montre la zone de texte dessinée, positionnée sous l’étiquette, et ayant une largeur raisonnablement suffisante pour accepter et afficher le nom d’une personne. Pendant ce temps, comme vous pouvez le voir sur la figure suivante, l’icône Cadre (Frame) est sur le point d’être sélectionnée en vue de placer un contrôle Cadre (Frame) sur votre UserForm.
La figure suivante montre votre contrôle Frame qui vient d’être dessiné avec sa légende par défaut Frame1. Les cadres sont un bon moyen de regrouper visuellement d’autres contrôles par confinement, généralement avec un thème sous-jacent. Dans le cas de cet exemple UserForm, les titres de poste de l’entreprise seront contenus de telle manière que l’utilisateur ne puisse en sélectionner qu’un.
La légende (Caption) d’un contrôle Frame est un moyen efficace de décrire un Frame. Dans Figure, la propriété Caption de votre nouveau Frame est sélectionnée afin que vous puissiez changer la légende par défaut (Frame1) en une description plus utile. Dans la Figure suivante, la légende par défaut de Frame1 a été remplacée par Titres de poste. Maintenant que la légende du cadre est prise en charge, la figure suivante montre également que l’icône Bouton d’option (OptionButton) dans la boîte à outils est sur le point d’être sélectionnée. Étant donné qu’un employé ne détiendrait qu’un seul titre de poste, vous pouvez organiser une série de boutons d’options à l’intérieur du cadre pour représenter les différents titres de poste de l’entreprise, où un seul peut être sélectionné.
Dans la figure suivante, deux boutons de commande (CommandButton ) ont été ajoutés, ce qui complète la conception de l’interface de UserForm. L’un des boutons de commande est intitulé OK, qui est une légende courante et intuitive permettant aux utilisateurs de cliquer sur leur confirmation des entrées de données. L’autre CommandButton est un bouton Annuler pour permettre aux utilisateurs de quitter complètement l’UserForm, s’ils le souhaitent.
3 Propriétés, méthodes et évènements des UserForms
3.1 Propriétés du formulaire UserForm
Le formulaire possède un large éventail de propriétés qui vous permettent de contrôler à la fois son apparence et ses paramètres de fonctionnement. Bien entendu, les propriétés de formulaire les plus couramment utilisées sont celles qui spécifient le nom du formulaire et le texte affiché dans la barre de titre. La table suivante répertorie les principales propriétés du formulaire.
Propriété | La description |
Name | Nom de l’Useform |
ActiveControl | Renvoie une référence au contrôle qui a reçu le focus |
BackColor | Couleur de l’arrière plan |
BorderColor | Couleur de la bordure |
BorderStyle | Style de bordure. Les valeurs valides sont les constantes suivantes: fmBorderStyleNone et fmBorderStyleSingle |
CanPaste | Définit si un objet peut être collé à partir du presse-papiers |
CanRedo | Définit si possible de répéter une opération |
CanUndo | Définit si l’opération d’annulation est possible |
Caption | En-tête de formulaire |
Cycle | Spécifie les actions des éléments situés dans les objets conteneurs Frame et Page lorsque le focus est perdu |
DrawBuffer | Définit la taille de la mémoire utilisée lors de la redéfinition d’une image |
Enabled | Détermine si le formulaire est disponible pour l’utilisateur |
ForeColor | Spécifie la couleur de premier plan |
Height, Width |
Hauteur et largeur du formulaire |
HelpContextID | Lien vers le chapitre du fichier d’aide |
InsideHeight, InsideWidth | La hauteur et la largeur de la partie personnalisée du formulaire, c’est-à-dire sans la barre de titre et l’épaisseur de la bordure |
KeepScrollBarsVisible | Affiche les barres de défilement. Les valeurs valides sont les constantes suivantes: fmScrollBarsNone, fmScrollBarsHorizontal, fmScrollBarsVertical et fmScrollBarsBoth |
Left, Top | Les coordonnées du coin supérieur gauche du formulaire |
MouseIcon | Attribue un pointeur de souris personnalisé |
MousePointer | Spécifie le type de pointeur de la souris |
Picture | Spécifie un lien vers un fichier avec un bitmap utilisé comme arrière-plan |
PictureAlignment | Spécifie l’alignement d’un bitmap utilisé comme arrière-plan |
PictureSizeMode | Détermine si l’image doit être mise à l’échelle |
ScrollHeight, ScrollWidth | Définit la hauteur et la largeur de la zone de défilement |
ScrollLeft, ScrollTop | Définit la coordonnée du coin supérieur gauche de la zone de défilement |
SpecialEffect | Définit l’apparence du formulaire |
StartUpPosition | Spécifie l’emplacement de départ du formulaire |
Tag | Spécifie le paramètre utilisé pour identifier un formulaire spécifique |
VerticalScrollbarSide | Détermine de quel côté du formulaire les barres de défilement sont affichées |
Visible | Définit la visibilité du formulaire |
WhatsThisButton | Spécifie l’affichage d’un bouton avec un point d’interrogation |
Zoom | Spécifie le niveau de redimensionnement de l’élément affichable |
3.2 Méthodes de formulaire
Un formulaire a de nombreuses méthodes qui vous permettent d’effectuer un large éventail d’opérations.
Méthode | La description |
Copy | Copie le contenu de l’objet dans le presse-papiers |
Cut | Copie et supprime le contenu de l’objet dans le presse-papiers |
Hide | Cache le formulaire sans le supprimer de la mémoire |
Load | Charge un objet en mémoire sans l’afficher |
Move | Déplace le formulaire |
Paste | Colle le contenu du presse-papiers |
PrintForm | Imprime une image de formulaire |
RedoAction | Répéter la dernière commande Répéter |
Repaint | Actualise l’image du formulaire |
Scroll | Fait défiler l’image |
SetDefaultTabOrder | Définit l’ordre de parcours par défaut pour les contrôles clés <Tab> |
Show | Affiche le formulaire |
UndoAction | Répète la dernière commande d’annulation |
Unload | Supprime un objet de la mémoire |
WhatsThisMode | Affiche un pointeur avec un point d’interrogation |
3.3 Événements de formulaire
Les événements vous permettent de créer des programmes qui vous permettent de contrôler l’ensemble du cycle de vie d’un formulaire, de son initialisation à sa fermeture.
Evenement | Description |
Activate, Deactivate | Se produit lorsque le formulaire est activé et désactivé |
AddControl | Se produit lorsqu’un contrôle est ajouté |
BeforeDragOver | Se produit lors du remorquage des données |
BeforeDropOrPaste | Se produit avant l’insertion des données remorquées |
Click | Se produit lorsque l’utilisateur clique sur le formulaire |
DblClick | Se produit lorsque l’utilisateur double-clique sur le formulaire |
Error | Se produit lorsqu’un formulaire rencontre une erreur mais ne peut pas envoyer de message |
Initialize | Se produit lorsque le formulaire est initialisé |
Layout | Se produit lorsque l’emplacement du formulaire change |
KeyDown, KeyUp | Se produit lorsque l’utilisateur appuie et relâche une touche et que le formulaire a le focus |
KeyPress | Se produit lorsque l’utilisateur appuie sur une touche autre que les touches de fonction, les touches de curseur et les touches de service et que le formulaire a le focus |
MouseDown, MouseUp | Se produit lorsque l’utilisateur appuie et relâche un bouton de la souris |
MouseMove | Se produit lorsque l’utilisateur déplace le pointeur de la souris sur le formulaire |
QueryClose | Se produit avant la fermeture de la fenêtre |
RemoveControl | Se produit lorsqu’un contrôle est supprimé |
Resize | Se produit lorsque le contrôle est redimensionné |
Scroll | Se produit lors du défilement |
Terminate | Se produit lorsque le formulaire est fermé |
Zoom | Se produit lorsque l’échelle du formulaire change |
4 Animer un Userform
4.1 Affichage d’un UserForm
Pour afficher un UserForm, vous exécutez la méthode Show dans une instruction avec la syntaxe NonDuFormulaire.Show. Par exemple, si vous avez effectué les mêmes étapes que vous avez vues dans les sections précédente pour créer le UserForm frmEmployees, vous pouvez avoir une simple macro comme celle-ci pour appeler le UserForm:
Sub EmployeeFormulaire() frmEmployees.Show End Sub
Si vous souhaitez voir à quoi ressemble l’UserForm lorsqu’il est appelé dans l’environnement de feuille de calcul réel, sans avoir à écrire une macro formelle pour vous-même, vous pouvez taper frmEmployees.Show dans la fenêtre Exécution et appuyer sur Entrée. La Figure suivante montre comment vous et vos utilisateurs voyez l’exemple UserForm.
4.2 Où va le code de UserForm?
Un UserForm est une classe d’objets VBA qui possède son propre module. Semblable à la notion que chaque feuille de calcul a son propre module, chaque UserForm que vous ajoutez à votre classeur est automatiquement créé avec son propre module. L’accès au module d’un UserForm est facile: dans le VBE, vous pouvez double-cliquer sur le UserForm lui-même dans le volet de conception; ou dans le projet Explorer, vous pouvez cliquer avec le bouton droit sur le nom UserForm et sélectionner Afficher le code, comme illustré à la figure suivante.
4.3 Fermer un UserForm
Vous avez deux façons de fermer un UserForm. Une façon est avec la méthode Unload (Décharger) et l’autre avec la méthode Hide (Masquer). Bien que les deux méthodes donnent l’impression que l’UserForm a disparu, elles exécutent chacune des instructions différentes. Cela peut être un point de confusion pour les programmeurs débutants, il est donc important de comprendre la distinction entre Décharger et Masquer.
4.4 Décharger un UserForm
Lorsque vous déchargez un UserForm, le formulaire se ferme et ses entrées sont effacées de la mémoire. Dans la plupart des cas, c’est ce que vous voulez: que les données entrées soient enregistrées d’une manière ou d’une autre, ou transmises à des variables publiques, puis fermées. L’instruction qui décharge un UserForm est simplement Unload Me, et elle est généralement associée à un CommandButton à cette fin, tel que le bouton Annuler qui a été placé sur l’exempl,e UserForm de cette leçon.
Supposons que vous souhaitiez décharger le UserForm lorsque vous cliquez sur le bouton Annuler. Un moyen rapide et facile de le faire est de double-cliquer sur le bouton de commande dans la conception de l’UserForm, comme le montre la figure suivante.
Lorsque vous double-cliquez sur le bouton de commande, vous voyez ces lignes de code dans le module UserForm:
Private Sub CommandButton2_Click() End Sub
Pour terminer la procédure Click, tapez Unload Me. Lorsque vous cliquez sur le bouton Annuler, l’UserForm se décharge – c’est-à-dire qu’il se ferme et libère de la mémoire les données qui ont été saisies – avec cet événement Click pour ce bouton:
Private Sub CommandButton2_Click() Unload Me End Sub
4.5 Masquer un UserForm
La méthode Hide rend le UserForm invisible, mais les données qui étaient dans l’UserForm sont toujours là, restant en mémoire et peuvent être affichées lorsque le formulaire est à nouveau affiché. Dans certaines situations, vous souhaiterez que ce soit le cas, par exemple si vous interagissez avec deux ou plusieurs UserForms et que vous souhaitez que l’utilisateur se concentre sur un seul formulaire à la fois. L’instruction pour masquer un UserForm est Me.Hide.
REMARQUE
Pour résumer la différence entre Unload et Hide, la méthode que vous choisissez dépend de la raison pour laquelle vous ne voulez pas que le UserForm soit vu. La plupart du temps, vous souhaiterez que le formulaire soit effacé de la mémoire, mais parfois, les informations entrées dans le formulaire doivent être référencées la prochaine fois que vous affichez le formulaire alors que le classeur est resté ouvert. La fermeture du classeur décharge automatiquement un UserForm uniquement s’il était masqué.
4.6 Comment exécuter un UserForm?
Pour tester le fonctionnement du code associé au formulaire, vous n’avez pas vraiment besoin de créer des contrôles sur la feuille de calcul et de leur associer le formulaire. Après avoir construit le formulaire et écrit le code dans le module UserForm, il suffit de sélectionner la commande Exécuter dans la barre de menu et ensuite cliquer sur Exécuter Sub / UserForm ou appuyez sur la touche <F5> ou sur le bouton Exécuter une macro dans la barre d’outils Standard et le formulaire apparaîtra en haut de la feuille de calcul active.
4.7 Fermer le formulaire en appuyant sur la touche <Echap>
Il est possible de fermer le formulaire personnalisé en appuyant sur n’importe quelle touche comme <Echap>. Pour ce faire, il vous suffit d’écrire le code qui gère l’événement KeyDown et d’identifier explicitement la clé requise et de fermer le formulaire à l’aide de l’opérateur Unload ou End. L’évènement KeyDown a deux paramètres. Le premier renvoie le code de la touche enfoncée et le second identifie la touche de modification enfoncée. VBA a une constante spéciale vbKeyEscape pour le code de clé <Echap>. Le code suivant du module de formulaire personnalisé ferme la fenêtre lorsque la touche <Echap> est enfoncée.
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _ ByVal Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub
Commentaires
■ Les évenements KeyDown et KeyUp se produisent successivement quand vous appuyez puis relâchez une touche. L’événement KeyDown se produit quand vous appuyez sur une touche. L’événement KeyUp se produit quand vous relâchez une touche. Les Syntaxes sont :
– Private Sub Object_KeyDown (ByVal keycode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)
– Private Sub Object_KeyUp (ByVal keycode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)
La syntaxe des événements KeyDown et KeyUp comprend les éléments suivants :
Élément | Description |
Object | Obligatoire. Nom d’un objet valide. |
KeyCode | Obligatoire. Entier représentant le code de la touche enfoncée ou relâchée. |
Shift | Obligatoire. État des touches Maj, Ctrl et Alt. |
Les paramètres de Shift sont représentés dans le tableau 15.4 suivants :
Tableau: Les paramètres de Shift
Constante | Valeur | Description |
fmShiftMask | 1 | La touche Maj a été enfoncée. |
fmCtrlMask | 2 | La touche Ctrl a été enfoncée. |
fmAltMask | 4 | La touche Alt a été enfoncée. |
■ Vous pouvez utiliser les constantes Keycode suivantes n’importe où dans votre code à la place des valeurs réelles.
Constante | Valeur | Description |
VbKeyLButton | 0x1 | Bouton gauche de la souris |
VbKeyRButton | 0x2 | Bouton droit de la souris |
VbKeyCancel | 0x3 | Touche Annuler |
VbKeyMButton | 0x4 | Bouton central de la souris |
VbKeyBack | 0x8 | Touche Retour arrière |
VbKeyTab | 0x9 | Touche de tabulation |
VbKeyClear | 0Xc | Touche Effacer |
VbKeyReturn | 0Xd | Touche Entrée |
VbKeyShift | 0x10 | Touche Maj |
VbKeyControl | 0x11 | Touche Ctrl |
VbKeyMenu | 0x12 | Touche Menu |
VbKeyPause | 0x13 | Touche Pause |
VbKeyCapital | 0x14 | Touche Verr. Maj |
VbKeyEscape | 0x1B | Touche Échap |
VbKeySpace | 0x20 | Touche Espace |
VbKeyPageUp | 0x21 | Touche Pg. Préc |
vbKeyPageDown | 0x22 | Touche Pg. Suiv |
VbKeyEnd | 0x23 | Touche Fin |
VbKeyHome | 0x24 | Touche Début |
VbKeyLeft | 0x25 | Touche Gauche |
VbKeyUp | 0x26 | Touche Haut |
VbKeyRight | 0x27 | Touche Droite |
VbKeyDown | 0x28 | Touche Bas |
VbKeySelect | 0x29 | Touche de sélection |
VbKeyPrint | 0x2A | Touche Impr. Écran |
VbKeyExecute | 0x2B | Touche d’exécution |
VbKeySnapshot | 0x2C | Touche Instantané |
VbKeyInsert | 0x2D | Touche Inser |
VbKeyDelete | 0x2E | Touche Suppr |
VbKeyHelp | 0x2F | Touche Aide |
VbKeyNumlock | 0x90 | Touche Verr. Num |
4.8 Confirmation de la fermeture de la fenêtre
Dans les projets, une situation survient souvent lorsqu’une confirmation de l’utilisateur est requise avant de fermer un formulaire. Cet effet peut être évité en utilisant la procédure de gestion des événements QueryClose, qui est générée juste avant la fermeture de la fenêtre. Cette procédure a deux paramètres. Si le premier prend la valeur –1, alors la fermeture n’a pas lieu, mais s’il prend la valeur 0, la fenêtre est fermée. Le deuxième paramètre identifie la raison qui a provoqué la fermeture de la fenêtre. Par exemple, dans le code suivant lorsque vous fermez la fenêtre utilisateur, une boîte de dialogue apparaît avec deux boutons : Oui et Non, qui nécessite une confirmation de l’utilisateur. S’il clique sur Oui, la fenêtre est fermée, et si Non, elle ne se ferme pas.
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Select Case MsgBox("Fermer une fenêtre?", vbYesNo + vbQuestion) Case vbYes : Cancel = 0 Case vbNo : Cancel = -1 End Select End Sub
4.9 Définir l’emplacement du formulaire
L’emplacement initial du formulaire est défini par la propriété StartUpPosition. Les valeurs valides sont répertoriées dans le tableau suivante.
Tableau. Valeurs de la propriété StartUpPosition
Valeur | La description |
0 | La coordonnée du coin supérieur gauche du formulaire est définie à l’aide des propriétés Top et Left |
1 | Centre de la fenêtre |
2 | Centré sur la fenêtre d’écran |
3 | Dans le coin supérieur gauche de l’écran |
Par exemple, le code suivant rend la forme de sorte que son coin supérieur gauche soit au point (100, 100).
Private Sub UserForm_Initialize() Me.StartUpPosition = 0 Me.Top = 100 Me.Left = 100 End Sub
4.10 Fenêtre modale
Une fenêtre monomodale est une fenêtre qui ne peut pas être fermée sans afficher une autre fenêtre. Par défaut, une fenêtre personnalisée dans VBA est monomodale. Vous pouvez définir le type de fenêtre (monomodal ou polymodal) à l’aide du paramètre de style facultatif de la méthode Show.
Show style
Le paramètre style a deux types de valeurs valides: vbModal ou 1 pour une forme monomodale, vbModeless ou 0 pour une forme polymodale.
Par exemple, avec l’instruction suivante, la fenêtre de formulaire est affichée sur la feuille de calcul en mode polymodal et, par conséquent, lorsque la fenêtre est ouverte, l’utilisateur a accès aux cellules de la feuille de calcul.
UserForm1.Show vbModeless
Lorsque la fenêtre est lancée avec l’instruction suivante, elle est en mode monomodal, et par conséquent les cellules de la feuille de calcul sont inaccessibles à l’utilisateur jusqu’à ce qu’il ferme la fenêtre.
UserForm1.Show vbModal
4.11 Utiliser plusieurs formulaires personnalisé
Il peut y avoir plusieurs formulaires personnalisés dans un projet. Lors du remplacement d’un formulaire par une autre, il est nécessaire de prendre en compte dans quel mode (monomodal ou polymodal) elle est ouverte. Par exemple, ajoutez deux formulaires UserForm1 et UserForm2 à votre projet. Créez un bouton sur la feuille de calcul. Définissez la valeur de sa propriété Name sur cmdForm1. Lorsque vous appuyez sur ce bouton, la première fenêtre de formulaire s’affiche à l’écran.
Les deux macros suivantes montrent comment les codes pour invoquer le second formulaire lorsque le premier est cliqué doivent différer, selon que le type de fenêtre est monomodal ou polymodal.
En mode monomodal, avant d’afficher le deuxième formulaire, vous devez fermer le premier dans le code. Dans ce cas, un seul formulaire est toujours affiché à l’écran – le premier ou le second.
En mode polymodal, il n’est pas nécessaire de fermer le premier formulaire, et après avoir cliqué sur le premier formulaire, les deux formulaires sont affichés à l’écran. Pour que les deux formulaires soient visibles en même temps, le deuxième formulaire est retiré avec un léger décalage par rapport au premier. Mode monomodal : Code du module de feuille de calcul
Private Sub cmdForm1_Click() UserForm1.Show vbModal End Sub
Mode monomodal : Code du module UserForm1
Private Sub UserForm_Click() Unload UserForm1 UserForm2.Show End Sub
Mode polymodal : Code du module de feuille de calcul
Private Sub cmdForm1_Click() UserForm1.Show vbModeless End Sub
Mode polymodal : Code du module UserForm1
Private Sub UserForm_Click() UserForm2.StartUpPosition = 0 UserForm2.Top = UserForm1.Top + 20 UserForm2.Left = UserForm1.Left + 20 UserForm2.Show End Sub
5 Quelques exemples avec les images
5.1 Formulaire avec arrière-plan modifiable
Une image en arrière-plan peut être incorporée dans un formulaire à l’aide de la propriété Picture. Cette propriété affiche l’image à ses dimensions d’origine. Si vous souhaitez que l’image occupe tout le côté client du formulaire ou toute sa largeur ou sa hauteur, utilisez la propriété PictureSizeMode. La propriété PictureAlignment place l’image dans la zone cliente du formulaire, par exemple, centrée ou contre les côtés spécifiés du formulaire.
Construisons un projet d’un formulaire dans laquelle une image est affichée en arrière-plan. Lorsque vous cliquez sur le formulaire, deux image se remplaceront alternativement.
Pour implémenter le projet, vous devez disposer de deux images. Dans ce cas, il s’agit de C: \ image1.jpg et C: \ image2.jpg. Alors, construisez un formulaire et, à l’aide de la fenêtre Propriétés, définissez ses valeurs de propriété comme indiqué dans le tableau suivante.
Tableau. Valeurs de propriété définies dans la fenêtre Propriétés
Objet | Propriété | Valeur |
Formulaire ou UserForm
|
Picture | Lien vers le fichier bitmap C:\image1.jpg |
PictureSizeMode | FmPictureSizeModeStretch | |
Caption | Arrière plans modifiables |
Double-cliquez sur le bouton gauche de la souris sur le formulaire et dans le module UserForm ouvert tapez le code suivant :
Private Sub UserForm_Click() Static flag As Boolean Dim nomfichier As String If Not flag Then nomfichier = "C:\image1.jpg" Me.Picture = LoadPicture(nomfichier) Me.PictureSizeMode = fmPictureSizeModeStretch Me.Caption = "Images d'arrière-plan modifiables" & nomfichier Else nomfichier = "C:\image2.jpg" Me.Picture = LoadPicture(nomfichier) Me.PictureSizeMode = fmPictureSizeModeZoom Me.PictureAlignment = fmPictureAlignmentTopLeft Me.Caption = "Images d'arrière-plan modifiables" & nomfichier End If Me.Repaint flag = Not flag End Sub
Figure Une image en arrière-plan d’un UserForm
Commentaires
Maintenant, lorsque vous cliquez, les images D: \ image1.jpg et D: \ image2.jpg se remplaceront alternativement sur le formulaire.
■ Le chargement d’une image à partir d’un fichier dans le code est effectué par la fonction LoadPicture, dont la valeur de paramètre est le nom du fichier source.
■ Puisque la valeur de la propriété PictureSizeMode pour l’image D: \ image1.jpg est égale à fmPictureSizeModeStretch, elle s’étire ou se rétrécit hors de proportion afin d’occuper toute la zone cliente du formulaire.
■ La valeur de la propriété PictureSizeMode pour l’image D: \ image2.jpg est égale à fmPictureSizeModeZoom, elle est donc étirée ou rétrécie proportionnellement pour occuper soit toute la largeur, soit la hauteur de la zone cliente du formulaire.
■ La propriété PictureAlignment, définie sur fmPictureAlignmentTopLeft, fait correspondre les coins supérieurs gauche de l’image et la zone de formulaire du client.
NOTE
Pour charger une image, il n’était pas du tout nécessaire de définir les valeurs des propriétés Picture et PictureSizeMode du formulaire. Il suffisait d’ajouter un code au module UserForm qui, à l’étape d’initialisation du formulaire, appelle la procédure de gestion de l’événement Click du formulaire, dans lequel se déroule l’affichage:
Private Sub UserForm_Initialize() UserForm_Click End Sub
Dans la fenêtre Propriétés, l’image est supprimée en plaçant le curseur dans le champ Image et en appuyant sur la touche <Supprimer>. Dans le code, cela est réalisé en affectant la valeur de la propriété Picture à LoadPicture (« »). Par exemple:
Me.Picture = LoadPicture (« »)
5.2 Formulaire avec un arrière-plan en mosaïque
Une image dans un formulaire peut être affichée non seulement comme une image entière, mais aussi comme une mosaïque. Dans ce cas, la valeur de la propriété PictureTiling doit être définie sur True. Bien sûr, vous devez également prendre soin de la propriété PictureAlignment, qui définit l’emplacement de l’image initiale, à partir de laquelle toute la couverture mosaïque est construite.
Les valeurs des propriétés de formulaire peuvent être définies à l’aide de la fenêtre Propriétés ou dans le code. Dans ce dernier cas, cela se fait généralement dans la procédure de gestion de l’événement Initialize du formulaire, qui est généré lorsque le formulaire est initialisé mais avant qu’il ne s’affiche à l’écran. À titre d’exemple, construisons un formulaire avec un arrière-plan en mosaïque et définissons ses propriétés dans le code au stade de l’initialisation du formulaire.
Figure : Une image mosaïque d’un UserForm
Alors, créez un formulaire et dans le module formulaire tapez le code suivant. Assurez-vous également que le répertoire que Excel utilise par défaut contient le fichier graphique requis que vous souhaitez afficher en tant qu’arrière-plan en mosaïque.
Private Sub UserForm_Initialize() Me.Caption = "mosaïque" Me.BorderStyle = fmBorderStyleNone Dim imageA As String imageA = "image1.jpg" If Len(Dir(imageA)) > 0 Then Me.Picture = LoadPicture(pic) Me.PictureAlignment = fmImageAtureAlignmentTopLeft Me.PictureTiling = True Else MsgBox "Pas de fichier" & CurDir & "\" & "me.bmp" End If End Sub
Commentaires
■ Pour savoir quel répertoire vous avez défini par défaut, allez dans l’onglet Fichier du ruban et cliquez sur le bouton Options. Dans la fenêtre Options Excel qui s’ouvre, sélectionnez la catégorie Enregistrer à gauche, et à droite, dans le groupe Enregistrer le classeur, dans le champ Emplacement du fichier, le répertoire actuel sera affiché par défaut. Si nécessaire, il peut être modifié.
■ Cette application vérifie l’existence d’un fichier bitmap dans le répertoire donné à l’aide de la fonction Dir (). S’il ne se trouve pas dans le répertoire de travail, lorsque l’application est lancée, le formulaire s’affiche sans fond de mosaïque. La fonction Dir () renvoie le nom d’un répertoire ou d’un fichier qui correspond au modèle spécifié comme argument de cette fonction.
■ S’il n’y a pas de répertoire ou de fichier approprié, la fonction Dir () renvoie une chaîne vide. Par conséquent, la vérification de l’existence d’un fichier se réduit simplement à la vérification de la longueur de la chaîne retournée par la fonction Dir (). S’il est de longueur nulle, alors il n’y a pas de fichier.
très bon cours avec des captures de pratiques qui rassure l’apprenant où il va et ce qu’il doit au final etre capable de réaliser…Merci, vous êtes les meilleurs