• Aucun résultat trouvé

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

Documents relatifs