13. USERFORMS
13.4 Contrôles sur formulaires
13.4.21 Contrôle Media Player
Nous allons ici nous intéresser à l'insertion d'un graphique Excel simple dans un Userform ce qui peut être très utils dans des logiciels comme Excel, Access ou particulièrement Project. Pour voir un exemple il faut d'abord ajouter le contrôle:
Windows Media Player
qui ajoutera le bouton suivant dans la Toolbox:
En jouant avec la hauteur du contrôle on peut le réduire à:
Afin de n'avoir qu'un lecteur de musique (mp3) typiquement.
Ensuite, il suffit au chargement du formulaire, ou sur clic d'un bouton, ou sur une listbox ou sur tout autre événement de votre choix, de mettre le code suivant:
WindowsMediaPlayer1.settings.AutoStart = False
WindowsMediaPlayer1.URL = "C:\Users\Isoz Vincent\Downloads\HubbleWMV.wmv"
'Pour spécifier le début de la séquence
WindowsMediaPlayer1.Controls.CurrentPosition = 5 'secondes
'Pour couper le son
WindowsMediaPlayer1.settings.Mute = True
'Régler le niveau du son ....Settings.Volume=50 'Pour jouer en boucle
WindowsMediaPlayer1.settings.setMode "loop", True
Formulaires (exercices)
'******************************* 'Créateur: Vincent ISOZ
'Dernière modification: 28.11.2003 'Nom procédure: -
'Commentaires: Utiliser l'ActiveX "Control Calendar 9.0" pour une saisie ergonomique des dates dans un userform
'*******************************
Pour accéder au Control Calendar faites un clique droit sur la palette d'outils (Control Toolbox) et choisissez Contrôles supplémentaires. Ensuite, cochez la case Contrôle
Calendar… et ajoutez ce contrôle et d'autres à un nouveau Userform tel que:
Ensuite, double cliquez sur le calendrier et saisissez-y le code suivante:
Private Sub Calendar1_Click()
TextBox1.Value = Calendar1.Value End Sub
Et voilà !
En tant qu'exercice, créez un bouton sur Userform 1 qui ouvre un nouvel Userform (Userform2) avec le calendrier. Lorsque l'utilisateur clique sur une date du calendrier se trouvant sur le Userform2, la date en question doit être retournée au TextBox1 de Userform1 (le code est très semblable).
'******************************* 'Créateur: Vincent ISOZ
'Dernière modification: 29.10.2003 'Nom procédure: copieword()
'Commentaires: Cettre procédure fonctionne avec le userform "listefeuilles" 'permettant une interaction dynamique entre la classeur et l'utilisateur 'et utilisant un liste à choix multiple
'*******************************
Dim chemin, dept As String Dim i As Long
chemin = ActiveWorkbook.Path
'Nous créeons un variable ainsi, au besoin nous pouvons demander 'dans une inputbox le chemin à l'utilisateur
chemin = chemin & "\dossierexcel"
'Il faut choisir une feuille du classeur dans laquelle mettre 'la liste des fichiers trouvés
Sheets("liste_fichiers").Select
'File search ne fonctionne plus depuis Excel 2007
With Application.FileSearch
'La ligne ci-dessous va permette (on ne sait jamais) 'de réinitialiser tout les paramètres de recherche 'd'une éventuelle recherche antérieur
.NewSearch
'l'endroit où doit cherche Excel (ou word)
.LookIn = chemin
'est-ce qu'il doit aller regarder aussi dans les sous-dossier
.SearchSubFolders = False
'types de fichiers (même principe que l'explorateur)
.Filename = "*.*"
'la méthode execute va permette de controler s'il y au moins 'une fichier de trouvé
If .Execute() > 0 Then
MsgBox "Il y a " & .FoundFiles.Count & " fichier(s) trouvé(s)." For i = 1 To .FoundFiles.Count
'nous affichons les extensions de fichiers
dept = Right(.FoundFiles(i), 3) Cells(i, "A") = .FoundFiles(i) Cells(i, "B") = dept
Next i Else
MsgBox "Pas de fichiers" End If
End With
End Sub
'*******************************
'Le userform utilisé précédemment (évidemment la ListBox peut être différente):
'et le code qui se trouve derrière
'on remplit la listbox qui se nomme "fc_listfeuil"
'nous aurions très bien pu faire cela sur l'événement Userform_intialize()
Private Sub UserForm_Activate() Dim z_cpt As Variant
fc_listfeuil.Clear
fc_listfeuil.MultiSelect = fmMultiSelectMulti For z_cpt = 1 To Sheets.Count
'Pour ajouter un Item manuellement taper: nomListebox.Additem("element")
fc_listfeuil.AddItem Sheets(z_cpt).Name Next z_cpt
End Sub
'le bouton Afficher Feuille se nomme "affeuil"
Private Sub afffeuil_Click() Dim z_cpt As Byte
Dim z_result As String
For z_cpt = 0 To fc_listfeuil.ListCount - 1 If fc_listfeuil.Selected(z_cpt) = True Then
z_message = "masquer " & fc_listfeuil.List(z_cpt)
z_result = MsgBox(z_message, vbOKCancel, "Affichage des feuilles")
If z_result = vbOK Then
Sheets(fc_listfeuil.List(z_cpt)).Visible = True End If
End If Next z_cpt End Sub
'le bouton Masquer Feuille se nomme "maskfeuil"
Private Sub fb_maskfeuil_Click() Dim z_cpt As Byte
Dim z_result As String
For z_cpt = 0 To fc_listfeuil.ListCount - 1 If fc_listfeuil.Selected(z_cpt) = True Then
z_message = "masquer " & fc_listfeuil.List(z_cpt) z_result = MsgBox(z_message, vbOKCancel, "Masquage des feuilles")
If z_result = vbOK Then
Sheets(fc_listfeuil.List(z_cpt)).Visible = False End If
End If Next z_cpt End Sub
'si l'utilisateur souhaite masquer le userform
Private Sub listesfeuilles_Click() listeFeuilles.Hide
Unload listeFeuilles End Sub
'******************************* 'Créateur: Vincent ISOZ
'Dernière modification: 29.10.2003
'Nom procédure: prc_class(), montre_user()
'Commentaires: les deux procédures suivantes sont nécessaires pour l'exemple du
'module de classe " ClsZoneLabel" qui utilise aussi le Userform "Class" 'Ce programme ne fait que de montrer comme une classe agit tel quel (comme une classe 'quoi…) sur une groupe de label figurant sur un formulaire '*******************************
'z_label est un tableau déclarant une nouvelle instance de la classe ClsZoneLabel
'il est obligatoire de définir cette variable en tant que variable globale
'ClsZoneLabel est le nom du module de Classe utilisé dans cet exemple
Dim z_label() As New ClsZoneLabel
'fait référence à la classe du même nom
Sub prc_class()
'il faut balayer l'ensemble des contrôles du formulaire, et en fonction 'de leur type, les affecter à la classe
Dim z_ctl As Control
'permet de compter les champs de type label
Dim z_labelcount As Integer z_labelcount = 0
For Each z_ctl In Class.Controls If TypeName(z_ctl) = "Label" Then z_labelcount = z_labelcount + 1
'on redimensionne la classe qui se comporte donc comme un tableau
ReDim Preserve z_label(1 To z_labelcount)
'on initiale le textbox en cours relativement à la classe
Set z_label(z_labelcount).LabelGroup = z_ctl End If
Next z_ctl End Sub
'La procédure a exécuter!
Sub montreuser() prc_class
'on ouvre le userform Class utilisant le module de classe Class.Show
End Sub
'*****************************
'Voici le contenu du module de classe utilisé ci-dessus 'Le module se nomme ClsZoneLabel
'*****************************
Option Explicit
'Nous déclarons de manière Public les événements sur les objets de type Label
'que nous groupons sous le nom LabelGroup
Public WithEvents LabelGroup As MSForms.Label
'Faire en sorte que n'importe quel type de label se déplace
Private Sub LabelGroup_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'si on clique avec le bouton droit de la souris sur un label
If Button = 1 Then LabelGroup.Left = LabelGroup.Left + 20 LabelGroup.Top = LabelGroup.Top + 20 End If End Sub '**********************
'Le formulaire nommé "Class" en question qui ne contient aucun code mis à part quelques labels créés au préalable pour l'exemple.
Autre chose, lorsque vous créez une listbox de type Control (Toolbox)sur une feuille MS Excel directement, voici le code événementiel nécessaire pour la remplir:
Private Sub Combox1_GotFocus()
'Attention à faire un clear avant de charger la liste
ComboBox1.AddItem "V.B.A." ComboxBox1.AddItem "VB.Net" ComboxBox1.AddItem "ASP.Net" ComboxBox1.AddItem "C#" End Sub