Access & Windows Media Player

Retour vers Access

Access & Windows Media Player - 22 Mars 2005 revu le 05 Jul 2013

But : Ouvrir Access au multimédia de qualité, clips vidéo (mpg, avi, asf, DivX) , mp3, fichiers midi etc...L'exemple suivant fournit une interface contenant windows média player et lui seul... "Quel intérêt ?" direz-vous, "je peux utiliser WMP directement sans passer par Access". Bien entendu, mais imaginez les possibilités de sonoriser votre base de données avec des commentaires vocaux différents pour chaque enregistrement... un petit film de votre produit, n'est-ce pas plus descriptif qu'une image immobile ? travailler en musique ? etc... J'avais déjà trouvé des consoles jouant les fichiers etc... mais franchement la qualité du son était exécrable....avec WMP, on obtient une qualité sonore idéale correspondant réellement à la qualité du fichier. Trêve de bavardages voyons le code

On commence par construire un formulaire indépendant de manière banale. Ensuite, il faut aller chercher un outil complémentaire dans la liste disponible, suivant l'image ci-dessous

Sous Access 2003

Contruction du formulaire sous 2003
Sous Access 2010
Contruction du formulaire sous 2010
Quand l'objet windows média player est posé sur le formulaire,on définit un fichier par défaut dans la propriété URL (une grande partie du secret est ici, cette propriété remplie provoque la lecture automatique du fichier lors de l'activation du formulaire). Remarquez le nom de l'objet Windows Média Player. On edite ensuite la propriété du formulaire "sur Activation" pour y régler la hauteur et la largeur du contrôle WMP car il a parfois tendance à se redimensionner sans demander la permission à son auteur. On charge aussi le chemin du fichier par défaut dans une textbox qui nous permet par la suite de changer de fichier. Si cette textbox est vide et que vous appuyez sur le bouton annuler dans la boîte de dialogue de sélection du prochain fichier, en clair si vous ne sélectionnez rien, une erreur se déclenche pour incompatibilité de type, ici si vous appuyez sur le bouton annuler, le fichier en cours redémarre simplement.

Private Sub Form_Current()
  DoCmd.Maximize
  WindowsMediaPlayer0.Height = 9000
  WindowsMediaPlayer0.Width = 14400
  'pour eviter une erreur si on clique sur le bouton annuler de la filedialogbox la première fois
  Me.Choix = Me![WindowsMediaPlayer0].URL
End Sub

Définition de la propriété URL

Déjà à ce stade, on peut profiter de notre formulaire, il est fonctionnel et pourrait ressembler à ceci
WMP joue le fichier désigné dans sa propriété URLC'est bien mais insuffisant, nous allons donc tenter de récupérer des noms de fichiers pour changer le fichier lu par WMP
1ère Méthode En réalisant un double clic dans une textbox indépendante que nous nommons [Choix]. Au double clic, le code suivant est exécuté

Private Sub Choix_DblClick(Cancel As Integer)
  Me![Choix] = ShowOpen
  Me.Refresh
  Me![WindowsMediaPlayer0].URL = [Choix]
End Sub

Ce code fait appel à un fonction que j'ai nommée "ShowOpen" qui va ouvrir une boîte de dialogue vers les disques durs et permet de choisir un fichier. Celui-ci doit bien entendu avoir une extension compatible avec Windows Média Player
Pour Access 2003, le code suivant était fonctionnel

Private Type OPENFILENAME
  lStructSize As Long
  hwndOwner As Long
  hInstance As Long
  lpstrFilter As String
  lpstrCustomFilter As String
  nMaxCustFilter As Long
  nFilterIndex As Long
  lpstrFile As String
  nMaxFile As Long
  lpstrFileTitle As String
  nMaxFileTitle As Long
  lpstrInitialDir As String
  lpstrTitle As String
  flags As Long
  nFileOffset As Integer
  nFileExtension As Integer
  lpstrDefExt As String
  lCustData As Long
  lpfnHook As Long
  lpTemplateName As String
End Type

Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long

Function ShowOpen() As String
  Dim OFName As OPENFILENAME, OldName As String
  OFName.lStructSize = Len(OFName)
  OFName.hwndOwner = Form_F_Cinema.Hwnd
  OFName.hInstance = Application.hWndAccessApp
  OFName.lpstrFilter = "Tous les fichiers (*.*)" + Chr$(0) + "*.*" + Chr$(0)
  OFName.lpstrFile = Space$(254)
  OFName.nMaxFile = 255
  OFName.lpstrFileTitle = Space$(254)
  OFName.nMaxFileTitle = 255
  OFName.lpstrInitialDir = "D:\"
  OFName.lpstrTitle = "Ouvrir..."
  OFName.flags = 0
  If Form_F_Cinema.Choix <> "" Then
    OldName = Form_F_Cinema.Choix
  End If
  If GetOpenFileName(OFName) Then
    ShowOpen = Trim$(OFName.lpstrFile)
  Else
    ShowOpen = OldName
  End If
End Function

Sous Access 2010, nous remplaçons tout cela par

Sub ShowOpen()
  Dim fd As Office.FileDialog
  ' Créer un objet FileDialog
  Set fd = Application.FileDialog(msoFileDialogOpen)

  ' Titre de la boîte de dialogue
  fd.title = "Sélectionnez un fichier..."

  ' Ne pas autoriser la sélection multiple
  ' (donc 1 seul fichier est sélectionnable à la fois)
  fd.AllowMultiSelect = False
  ' Définir les types de fichiers autorisés
  fd.Filters.Clear
'
  fd.Filters.Add "Video", "*.mp4; *.mpg; *.avi; *.wmv"
  fd.Filters.Add "Audio", "*.mp3; *.wma"
  fd.Filters.Add "Tous les fichiers", "*.*"
  ' Afficher la boîte de dialogue
  If fd.show() Then
    Form_F_Cinema.Choix = fd.SelectedItems(1)
  End If
  Set fd = Nothing
End Sub

Une fois le chemin et le nom de fichier dans la textbox, la lecture démarre automatiquement
Lecture d'un Mp3
2ème Méthode : Utilisation d'une liste déroulante qui va chercher ses informations dans une table. Cette table aura été remplie avec les noms des fichiers d'un dossier que l'on désignera...
Créons d'abord la table T_Fichiers avec un champ nommé [Url] ...Remarquez le type du champ et sa taille poussée au maximum ( 255 caractères ) pour éviter des problèmes avec la longueur du nom de vos dossiers et fichiers...
Sur le formulaire on pose une zone de liste déroulante qui pointe tout à fait classiquement vers le champ [Url] de la T_Fichiers.
Construction de la table
On pose un bouton de commande qui va appeler la routine qui remplira la table avec le code suivant

Private Sub Commande6_Click()
 Call AjoutDansTable
End Sub
Sub AjoutDansTable()
  'Déclarations obligatoires et préalables
  Dim db As DAO.Database
  Dim rs1 As DAO.Recordset
  Dim Fichier, Chemin As String
  'on vide la table préalablement
  Call EffacerTable
  'Variables qui placent le recordset en mémoire vive
  Set db = Application.CurrentDb
  Set rs1 = db.OpenRecordset("Select * from T_Fichiers")

  Chemin = InputBox(Prompt:="Quel répertoire voulez-vous ajouter ?")
  Chemin = Chemin + "\"

  Fichier = Dir(Chemin)

  Do While ((Len(Fichier) - Len(Chemin)) <> 0)
    'il faut ne charger que les fichiers qui sont compatibles, à vous de les personnaliser
    If Right(Fichier, 3) = "mp4" Or Right(Fichier, 3) = "wmv" Or Right(Fichier, 3) = "mpg" Then
      rs1.AddNew
      rs1("URL") = Fichier
      rs1.Update
    End If
  Fichier = Chemin + Dir()
  Loop
End Sub
Sub EffacerTable()
  Dim Demande As String

  Demande = MsgBox("Voulez-vous supprimer la sélection actuelle ?", vbYesNo, "Demande...")
  If Demande = vbYes Then
    'Empêche les demande de confirmation de s'afficher
    DoCmd.SetWarnings False
    'Efface le contenu de la table
    DoCmd.RunSQL "DELETE * FROM T_Fichiers;"
    'Retablit les confirmations
    DoCmd.SetWarnings True
  End If
End Sub

Quand la zone de liste est remplie, il suffit alors de sélectionner un item. Pour que WMP lise ce fichier, nous transmettons son nom via la propriété AfterUpdate de la zone de liste avec le code

Private Sub Modifiable4_AfterUpdate()
  Me![WindowsMediaPlayer0].URL = [Modifiable4]
End Sub

Bon amusement !! - Résultat final
Résultat final
Cliquez ici pour télécharger le fichier zip WindowsMediaPlayer
N'oubliez pas de personnaliser la propriété URL de la vidéo par défaut

Fin