Académique Documents
Professionnel Documents
Culture Documents
UserForm PDF
UserForm PDF
I - Prambule
II - Crer un UserForm
III - Quelques mthodes et proprits
III-A - Afficher l'UserForm
III-A-1 - Affichage Modal
III-A-2 - Affichage non Modal
III-A-3 - Afficher un UserForm dont le nom est contenu dans une variable
III-B - Masquer l'UserForm
III-C - Fermer l'UserForm
III-D - Dfinir la Position de l'UserForm l'cran
III-E - Imprimer un UserForm
III-F - Effectuer l'aperu avant impression d'une feuille de calcul depuis un UserForm
III-G - Mettre jour l'affichage du UserForm
III-H - Insrer une image de fond
III-I - Modifier durablement les proprits d'un UserForm
IV - Les vnements dans un UserForm
IV-A - UserForm_Initialize
IV-B - UserForm_Activate
IV-C - UserForm_KeyPress
IV-D - UserForm_KeyDown et UserForm_KeyUp
IV-E - UserForm_MouseMove
IV-F - UserForm_MouseDown et UserForm_MouseUp
IV-G - UserForm_Click
IV-H - UserForm_AddControl
IV-I - UserForm_RemoveControl
IV-J - UserForm_Layout
IV-K - UserForm_QueryClose
IV-L - UserForm_Terminate
V - Quelques exemples particuliers
V-A - Personnaliser l'affichage des UserForm
V-B - Afficher un UserForm temporairement
V-C - Lister le nom des USF contenus dans le classeur
V-D - Rcuprer le Handle d'un Userform
V-E - Dclencher une procdure vnementielle
VI - Conclusion
VII - Tlchargement
-2Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
I - Prambule
Ce document propose une description gnrale des UserForm.
-3Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
II - Crer un UserForm
Pour insrer un UserForm dans votre projet:
Vous devez tout d'abord afficher l'diteur de macros (Alt + F11), puis
Cliquez sur votre fichier dans l'explorateur de projets.
Ensuite,
Slectionnez le Menu Insertion / UserForm
Ds que l'UserForm est cr, il est possible d'effectuer un affichage rapide en appuyant sur le bouton "Excuter
Sub/UserForm", ou sur la touche raccourci F5.
Vous pouvez modifier la taille de la boite de dialogue en utilisant les poignes de redimensionnement.
Utilisez la fentre de proprits pour personnaliser l'USF manuellement: Changer le nom, une fonctionnalit,
l'apparence du formulaire...etc...
Si cette fentre n'est pas affiche par dfaut:
Slectionnez le Menu Afficher/Fentre proprits ou Slectionnez votre UserForm et appuyez sur la touche raccourci
F4.
-4Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Proprit
(Name)
BackColor
BorderColor
BorderStyle
Caption
Cycle
DrawBuffer
Enabled
DrawBuffer
Forecolor
Height
HelpContextID
KeepScrollBarsVisible
Left
MouseIcon
MousePointer
Picture
PictureAlignment
PictureSizeMode
PictureTiling
RightToLeft
ScrollBars
ScrollHeight
ScrollLeft
ScollTop
ScrollWidth
ShowModal
SpecialEffect
StartUpPosition
Description
Renvoie le nom de l'objet
Spcifie la couleur de fond
Spcifie la couleur de bordure
Spcifie le style de bordure
Spcifie le texte affich dans la barre de titre
Spcifie l'action effectuer lorsque
l'utilisateur quitte le dernier contrle
Spcifie le nombre de pixels de la
mmoire tampon vido utilise pour le
rafraichissement de l'image
Spcifie si l'objet peut recevoir le focus et
rpondre aux vnements gnrs par
l'utilisateur
Spcifie le nombre de pixels de la
mmoire tampon vido utilise pour le
rafraichissement de l'image
Dfinit la couleur de la police
Dfinit la dimension verticale
Spcifie la rubrique d'un fichier d'aide
Spcifie si les barres de dfilement sont
visibles
Dfinit la position par rapport au bord
gauche de l'application
Affecte un icne personnalis
Spcifie le type de pointeur
Spcifie l'image de fond dans l'UserForm
Spcifie l'alignement de l'image de fond
Spcifie comment afficher une image de
fond
Permet d'afficher l'image en mosaque
Indique le sens d'affichage du texte et
contrle l'apparence visuelle sur un systme
bidirectionnel.
Indiquee si les barres de dfilement
verticales et horizontales doivent tre
affiches
Spcifie la hauteur de la zone totale pouvant
tre affiche en dplaant la barre de
dfilement
Spcifie la distance, du bord gauche de la
partie visible, partir du bord gauche du
UserForm
Spcifie la distance, du bord suprieur de la
partie visible, partir du bord suprieur du
UserForm
Spcifie la largeur de la zone totale pouvant
tre affiche en dplaant la barre de
dfilement
Indique si la bote de dialogue est modale
Spcifie l'aspect du UserForm l'cran
-5Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Tag
Top
WhatsThisButton
WhatsThisHelp
Width
Zoom
Visible
-6Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Lorsque l'UserForm est affich, vous ne pouvez plus accder aux feuilles de calcul. Dans ce cas l'UserForm est
dit modal.
UserForm1 est le nom dfini dans la proprit (Name).
Vba
UserForm1.Show False
Vba
UserForm1.Show vbModeless
Nota:
Vous devrez utiliser des APIs pour afficher les UserForms non modaux dans Excel97.
III-A-3 - Afficher un UserForm dont le nom est contenu dans une variable
-7Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
Sub lancementUSF()
Dim sVariable As String
sVariable = "UserForm1"
VBA.UserForms.Add(sVariable).Show
End Sub
Lorsqu'un UserForm est masqu, l'utilisateur n'a plus aucune interaction avec celui ci mais La boite de dialogue et
les objets qu'elle contient restent accessibles par programmation.
Lorsqu'un objet est dcharg, il est supprim de la mmoire et toute la mmoire qui lui tait associe est libre.
Si la procdure de fermeture est place dans l'UserForm, il est aussi possible d'crire:
Vba
Unload Me
Pour fermer en une seule fois tous les UserForm en cours d'affichage, utilisez:
-8Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
Private Sub CommandButton1_Click()
End
End Sub
Paramtre
0
CenterOwner
CenterScreen
WindowsDefault
Description
Aucune valeur initiale n'est
indique.
Centre l'objet UserForm au
sein de l'lment auquel il
appartient.
Centre l'objet par rapport
l'cran.
Place l'objet dans l'angle
suprieur gauche de l'cran.
Cet exemple affiche un USF en haut et dans le coin suprieur gauche de l'cran.
Vba
Private Sub UserForm_Initialize()
Me.StartUpPosition = 3
End Sub
Vous pouvez aussi utiliser les proprits Left et Top pour personnaliser la position de la boite de dialogue.
Left: Dfinit la distance du bord gauche du UserForm par rapport au bord gauche de l'application.
Top: Dfinit la distance du bord suprieur du UserForm par rapport au bord suprieur de l'application.
-9Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
- 10 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
Private Sub CommandButton1_Click()
Me.PrintForm
End Sub
L'image du UserForm est automatiquement place dans le coin suprieur gauche de la page imprime.
Il n'existe pas d'option pour centrer ou repositionner l'impression. La seule solution palliative consiste faire une
copie d'cran de la boite de dialogue. Ensuite vous faites un collage dans la feuille de calcul en tant qu'image, pour
la manipuler votre guise.
III-F - Effectuer l'aperu avant impression d'une feuille de calcul depuis un UserForm
Lorsque vous souhaitez effectuer un aperu avant impression d'une feuille de calcul, depuis un UserForm, utilisez:
Vba
Private Sub CommandButton1_Click()
Me.Hide
'Aperu avant impression de la Feuil1
Feuil1.PrintPreview
Me.Show
- 11 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
End Sub
Cette procdure charge une image de fond dans l'UserForm lors de l'vnement Click sur un CommandButton.
L'image sera automatiquement dcharge lors de la fermeture de la bote de dialogue.
Vba
Private Sub CommandButton1_Click()
UserForm1.Picture = LoadPicture("C:\monFichier.jpg")
End Sub
- 12 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
'Change la couleur de fond du UserForm
ThisWorkbook.VBProject.VBComponents("UserForm1"). _
Properties("backcolor") = RGB(125, 125, 125)
- 13 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vous pouvez accder aux procdures vnementielles en double cliquant sur l'UserForm depuis l'diteur de macros.
Le menu droulant de droite vous donne ensuite accs la liste des vnements disponibles.
IV-A - UserForm_Initialize
Cet vnement est important car il permet de dfinir les proprits des objets et les valeurs par dfaut des variables,
lors du lancement du Userform.
Exemple :
Vba
Private Sub UserForm_Initialize()
maVariable = "x"
CheckBox1 = False
CheckBox2 = True
TextBox1 = "mon texte"
TextBox2 = Range("A1")
End Sub
IV-B - UserForm_Activate
Cet vnement est dclench lorsque l'UserForm est activ, ds que la boite de dialogue prend le focus.
IV-C - UserForm_KeyPress
Cet vnement est dclench lorsque vous appuyez sur une touche du clavier alors que l'UserForm a le focus.
L'argument KeyAscii renvoie un nombre reprsentant la touche du clavier dans le jeu de caractres alpha numrique.
- 14 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
MsgBox Chr(KeyAscii)
End Sub
KeyCode: Renvoie un nombre reprsentant la touche du clavier dans le jeu de caractres alpha numrique.
Vba
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Shift = 0 Then
Range("A1") = Chr(KeyCode)
Else
- 15 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
Select Case Shift
Case 1: Range("A1")
Case 2: Range("A1")
Case 3: Range("A1")
Case 4: Range("A1")
'
'...
'
End Select
End If
End Sub
=
=
=
=
"Shift"
"Ctrl"
"Touches Ctrl & Shift"
"Alt"
IV-E - UserForm_MouseMove
Cet vnement permet d'intercepter les mouvements de la souris dans l'UserForm.
- 16 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
Option Explicit
Private Sub UserForm_Activate()
Feuil1.Activate
Feuil1.Range("A1").Select
End Sub
- 17 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
.Top = Tableau(j, 1)
End With
'DoEvents
Next j
For k = 2 To 16
Feuil1.Shapes(k).Delete
Next k
End Sub
Lancez la procdure "afficher_USF" depuis la feuille de calcul, puis dplacez le curseur de la souris sur le bord
gauche de la boite de dialogue...;o)
Cet exemple identifie le moment ou vous relchez le bouton, suite un clic droit dans un UserForm:
Vba
Private Sub UserForm_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button And 2 Then MsgBox "Bouton droit relch"
End Sub
- 18 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
IV-G - UserForm_Click
L'vnement Click est dclench lorsque vous cliquez sur l'UserForm.
IV-H - UserForm_AddControl
L'vnement AddControl survient lorsque vous ajoutez un contrle dynamiquement dans l'UserForm.
Il est dclench immdiatement aprs la ligne Me.Controls.Add.
Vba
'--- Cette procdure permet d'ajouter un TextBox dans l'USF. --Private Sub CommandButton1_Click()
Dim Obj As Control
Set Obj = Me.Controls.Add("forms.Textbox.1")
With Obj
.Name = "monTextBox"
.Left = 140
.Top = 30
.Width = 50
.Height = 20
End With
MsgBox Obj.Name & " ajout dans l'UserForm."
End Sub
'---
Pour plus d'informations au sujet des contrles crs dynamiquement, consultez l'article Manipuler l'diteur de
macros ... par macro.
IV-I - UserForm_RemoveControl
L'vnement RemoveControl identifie la suppression des contrles dans l'UserForm.
- 19 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
'Suppression du contrle.
Private Sub CommandButton2_Click()
Me.Controls.Remove "monTextBox"
End Sub
'--- Identifie la suppression du contrle --Private Sub UserForm_RemoveControl(ByVal Control As MSForms.Control)
MsgBox Control.Name & " supprim."
End Sub
IV-J - UserForm_Layout
L'vnement Layout est dclench lorsque vous changez la position du UserForm.
Vba
Private Sub UserForm_Layout()
Application.ScreenUpdating = False
'Dfinit la position horizontale de l'USF
Me.Left = 200
'Dfinit la position verticale de l'USF
Me.Top = 50
Application.ScreenUpdating = True
End Sub
IV-K - UserForm_QueryClose
- 20 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Cet vnement est dclench lors de la fermeture du UserForm. A ce stade il est encore possible d'annuler l'opration
de fermeture grce l'argument Cancel = True. L'argument CloseMode permet d'identifier l'action qui est l'origine
de la fermeture.
Paramtre
0
vbFormCode
vbAppWindows
vbAppTaskManager
Description
L'ordre de fermeture provient
de la Croix du UserForm
L'ordre de fermeture provient
d'une macro
L'ordre provient de la
fermeture de la session
Windows
L'ordre de fermeture provient
d'une instruction du Task
Manager
IV-L - UserForm_Terminate
Terminate est le dernier vnement, dclench lors de la fermeture d'un UserForm. A ce stade, l'annulation de la
fermeture est impossible contrairement l'vnement QueryClose.
- 21 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
- 22 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
Vba
Private Sub UserForm_Activate()
Me.Repaint 'pour afficher les objets de l'USF
End Sub
La procdure doit imprativement tre lance depuis la feuille de calcul et en mode non modal. Un message
d'erreur survient si l'USF est lanc depuis l'diteur de macros.
Placez cette dernire procdure dans un module standard puis lancez la macro:
Vba
Sub LancerUSF()
'Le mode non modal est impratif
'sinon vous obtiendrez un message d'erreur
UserForm1.Show 0
End Sub
Vba
End Sub
Vba
Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Sub UserForm_Initialize()
Dim MeHwnd As Long
MeHwnd = FindWindowA(vbNullString, Me.Caption)
MsgBox "le Handle de l'Userform " & Me.Caption & " est : 0x" & Hex(MeHwnd)
End Sub
Vba
Sub EssaiDeclenchementProcedureUSF()
CallByName UserForm1, "CommandButton1_Click", VbMethod
End Sub
- 24 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
VI - Conclusion
Les exemples prsents dans ce document ne sont qu'une partie infime des options offertes par l'objet UserForm.
Les possiblits d'utilisation sont trs diversifies.
Un Userform est trs simple manipuler et facilement modulable, ce qui en fait un outil indispensable pour de
nombreux projets VBA.
- 25 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
VII - Tlchargement
- 26 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/
- 27 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://silkyroad.developpez.com/VBA/UserForm/