Création et gestion d’un UserForm, Excel VBA

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.

S’abonner
Notifier de
2 Commentaires
le plus ancien
le plus récent le plus populaire
Inline Feedbacks
Voir tous les commentaires

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

Bonsoir,
Variable non définie pic dans ce code.
Comment le définir ?

Sub UserForm_ImageMozaique()
  Me.Caption = "mosaique"
  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

Cordialement.

USERFORM 44.PNG

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

2
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x