![]() |
|
Forum
|
|
|
#1 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 748
|
bonjour
vous trouverez ci joint quelques exemples pour piloter Windows Media Player depuis Excel la source utilisée : http://msdn.microsoft.com/library/de...vexcontrol.asp (il s'agit de codes JScript que j'ai essayé d'adapter ) Testé avec Excel2002 et Windows Média Player 10.0 necessite d'activer la reference Windows Media Player le document comporte 4 parties : Piloter une séquence musicale spécifique Piloter une playList ( gestion de plusieurs séquences musicales dans une session) Visualiser une séquence vidéo ( un seul exemple tres simple ) L'objet Windows Media Player inséré dans une feuille ou dans un UserForm remarque : si vous faites une fausse manip et qu'une macro plante , il est possible que vous ne puissiez pas arrêter la séquence musicale avant la fin . dans ce cas , sauvegardez vos données et fermer Excel : tout devrait rentrer dans l'ordre @@@@@ Gérer une séquence musicale @@@@@ Démarrer et arreter une séquence musicale Option Explicit Dim Wmp As WindowsMediaPlayer 'necessite d'activer la reference Windows Media Player 'michelxld le 06.08.2005 'pour le forum http://www.excel-downloads.com Sub jouerMediaPlayer() Set Wmp = CreateObject('WMPlayer.OCX.7') Wmp.URL = 'C:\\monFichier.mp3' Wmp.Controls.Play End Sub Les procédures qui suivent supposent que la macro 'jouerMediaPlayer' a préalablement été lancée et se trouve active Fermer la session Windows Media Player en cours Sub arreterMediaPlayer() If Wmp Is Nothing Then Exit Sub Wmp.Controls.stop End Sub Afficher la durée de la séquence musicale en cours Sub dureeSequence() Dim ValMin As Double, ValSec As Double, S As Double S = Wmp.currentMedia.Duration ValMin = Application.WorksheetFunction.RoundDown((S / 60), 0) ValSec = Application.WorksheetFunction.RoundDown(S, 0) - (ValMin * 60) MsgBox Format(ValMin, '00') & ':' & Format(ValSec, '00') End Sub Effectuer une pause de 5 secondes dans la séquence musicale Sub pauseMediaPlayer() Dim t As Date If Wmp Is Nothing Then Exit Sub Wmp.Controls.Pause ' 'temporisation de 5 secondes t = Timer + 5: Do Until Timer > t: DoEvents: Loop 'pour relancer Wmp.Controls.Play End Sub vérifier si l'action 'Pause' peut etre appliquée ( renvoie Vrai ou faux ) Sub verfieStatut_Pause() 'vérifie si l'action 'pause' peut etre appliquée ( renvoie Vrai ou Faux ) MsgBox Wmp.Controls.isAvailable('Pause') End Sub Afficher le statut de Windows Media Player Sub afficheStatutWMP() If Wmp Is Nothing Then Exit Sub MsgBox Wmp.Status End Sub Afficher le statut de Windows Media Player ( un autre exemple ) Sub statut_WMP() Select Case Wmp.playState Case 0: MsgBox 'Undefined' Case 1: MsgBox 'Stopped' Case 2: MsgBox 'Paused' Case 3: MsgBox 'Playing' Case 4: MsgBox 'ScanForward' 'fast forwarding Case 5: MsgBox 'ScanReverse' 'fast rewinding Case 6: MsgBox 'Buffering' Case 7: MsgBox 'Waiting' Case 8: MsgBox 'MediaEnded' Case 9: MsgBox 'Transitioning' 'Preparing new media item Case 10: MsgBox 'Ready' Case 11: MsgBox 'Reconnecting' End Select End Sub Désactiver ou Activer le son Sub desactiverLeSonWMP() If Wmp Is Nothing Then Exit Sub Wmp.settings.mute = True End Sub Sub activerLeSonWMP() If Wmp Is Nothing Then Exit Sub Wmp.settings.mute = False End Sub Afficher la version de Windows Media player installée Sub afficherVersion_WMP() If Wmp Is Nothing Then Exit Sub MsgBox Wmp.versionInfo End Sub Effectuer une avance rapide sur la séquence , pendant 3 secondes Sub accelererVitessseSequence_WMP() Dim t As Date If Wmp Is Nothing Then Exit Sub If Wmp.Controls.isAvailable('FastForward') Then Wmp.Controls.fastForward ' 'temporisation de 3 secondes t = Timer + 3: Do Until Timer > t: DoEvents: Loop 'pour revenir à la vitesse normale Wmp.Controls.Play End Sub Le nom du fichier en cours de lecture Sub nomFichierEnCourslecture() Dim Cm As Object Set Cm = Wmp.currentMedia MsgBox Cm.Name End Sub Informations sur la séquence en cours Sub informationSequenceEnCours() MsgBox Wmp.currentMedia.getItemInfo('author') MsgBox Wmp.currentMedia.getItemInfo('Title') MsgBox Wmp.currentMedia.getItemInfo('Album') MsgBox Wmp.currentMedia.getItemInfo('copyright') MsgBox Wmp.currentMedia.getItemInfo('Artist') MsgBox Wmp.currentMedia.getItemInfo('Genre') MsgBox Wmp.currentMedia.getItemInfo('Bitrate') / 1000 & ' kbps' MsgBox Wmp.currentMedia.getItemInfo('Abstract') MsgBox Wmp.currentMedia.getItemInfo('bitRate') MsgBox Wmp.currentMedia.getItemInfo('duration') End Sub une autre solution qui liste toutes les informations : Sub informationsSequence_WMP() Dim Resultat As String Dim i As Integer Dim Cm As WMPLib.IWMPMedia Set Cm = Wmp.currentMedia For i = 0 To Cm.attributeCount - 1 If Cm.getItemInfo(Cm.getAttributeName(i)) <> '' Then _ Resultat = Resultat & Cm.getAttributeName(i) & ' : ' & _ Cm.getItemInfo(Cm.getAttributeName(i)) & vbLf Next MsgBox Resultat End Sub Modifier le volume sonore (valeurs de 0 à 100 % ) Sub modifierVolumeSon() Wmp.settings.volume = 50 End Sub @@@@@ La gestion des PlayList @@@@@ Créer une PlayList de plusieurs séquences et les jouer à la suite Option Explicit Dim Wmp As WindowsMediaPlayer 'necessite d'activer la reference Windows Media Player 'michelxld le 06.08.2005 'pour le forum http://www.excel-downloads.com Sub ajout_PlusieurSequences_PlayList_Et_Lance_Sequence () Dim Xwmp As IWMPMedia Set Wmp = CreateObject('WMPlayer.OCX.7') Wmp.currentPlaylist.Clear Set Xwmp = Wmp.newMedia('C:\\essai.mid') 'adapter les noms de fichiers Wmp.currentPlaylist.insertItem 0, Xwmp Set Xwmp = Wmp.newMedia('C:\\maMusique.mp3') Wmp.currentPlaylist.insertItem 1, Xwmp Set Xwmp = Wmp.newMedia('C:\\Jumbalaya.mid') Wmp.currentPlaylist.insertItem 2, Xwmp Wmp.Controls.Play End Sub nota: ------- ne pas oublier de créer un bouton pour arreter la boucle Sub arreterMediaPlayer() If Wmp Is Nothing Then Exit Sub Wmp.Controls.stop End Sub Les procédures qui suivent supposent que la macro 'ajout_PlusieurSequences_PlayList_Et_Lance_Sequenc e' a préalablement été lancée et se trouve active Pour passer à la séquence suivante ou précédente Sub passerSequenceSuivante() Wmp.Controls.Next End Sub Sub passerSequencePrecedente() Wmp.Controls.Previous End Sub Supprimer la deuxieme séquence dans la playlist remarque : l'index du premier élément = 0 Sub supprimer_SequenceDansPlayList() Dim It As Object Set It = Wmp.currentPlaylist.Item(1) Wmp.currentPlaylist.RemoveItem It End Sub Lancer une séquence spécifique de la playlist ( exemple le 3 eme item ) Sub JouerUneSequenceSpecifique() Dim It As Object Set It = Wmp.currentPlaylist.Item(2) Wmp.Controls.playItem It End Sub Lister le nom des séquences contenues dans la PlayList Sub Lister_NomDesSequences_DansLaPlayList() Dim Pl As IWMPPlaylist Dim j As Integer, i As Integer Set Pl = Wmp.currentPlaylist j = Pl.Count If Not j > 0 Then MsgBox 'il n'y a pas d'éléments dans la playlist' For i = 0 To j - 1 MsgBox Pl.Item(i).Name ' 'pour afficher la source : 'MsgBox Pl.Item(i).sourceURL ' Next i End Sub Ajouter une séquence musicale dans la PlayList ( la séquence est automatiquement placée à la suite des items existants ) Sub ajouterSequence_dans_playList() Dim Adx As IWMPMedia Set Adx = Wmp.newMedia('C:\\maMusique.mp3') 'adapter le chemin Wmp.currentPlaylist.appendItem Adx End Sub Insérer 3 séquences dans la PlayList et en jouer une au hasard ( sans lien direct avec les exemples précédents ) Sub lancerSequenceAleatoire() Dim NombreItem As Integer, Aleat As Integer Dim Xwmp As IWMPMedia Set Wmp = CreateObject('WMPlayer.OCX.7') Wmp.currentPlaylist.Clear Set Xwmp = Wmp.newMedia('C:\\fragancia.mid') Wmp.currentPlaylist.insertItem 0, Xwmp Set Xwmp = Wmp.newMedia('C:\\maMusique.mp3') Wmp.currentPlaylist.insertItem 1, Xwmp Set Xwmp = Wmp.newMedia('C:\\Jumbalaya.mid') Wmp.currentPlaylist.insertItem 2, Xwmp '------------------------------------------------------ NombreItem = Wmp.currentPlaylist.Count Randomize Aleat = Int((NombreItem * Rnd) + 1) '------------------------------------------------------ Wmp.currentMedia = Wmp.currentPlaylist.Item(Aleat - 1) Wmp.Controls.Play End Sub @@@@@ Lancer une séquence video et Divers @@@@@ Lancer une video ( sans lien avec les exemples précédents ) Sub lancerUneVideo() Dim Wmp As WindowsMediaPlayer Set Wmp = CreateObject('WMPlayer.OCX.7') Wmp.openPlayer 'C:\\monFilm.mpg' End Sub Lister les lecteurs de CD et de DVD installés Sub listeLecteurs_CD_DVD() Dim Wmp As WindowsMediaPlayer Dim iNumDrives As Integer, i As Integer Dim oThisDrive As IWMPCdrom Set Wmp = CreateObject('WMPlayer.OCX.7') iNumDrives = Wmp.cdromCollection.Count If Not iNumDrives > 0 Then MsgBox 'il n'y a pas de lecteur de CD ou DVD installés .' For i = 0 To iNumDrives - 1 Set oThisDrive = Wmp.cdromCollection.Item(i) MsgBox oThisDrive.driveSpecifier Next i End Sub @@@@@ L'objet Windows Media Player inséré dans une feuille ou dans un UserForm @@@@@ Si vous utilisez Windows Média Player apres avoir inséré l'objet dans la feuille ( ou dans un UserForm) , vous pourrez facilement adapter les procédures vues précédemment par exemple pour lire ou arreter un séquence musicale : Sub jouerMediaPlayer() Feuil1.WindowsMediaPlayer1.URL = 'C:\\maMusique.mp3' Feuil1.WindowsMediaPlayer1.Controls.Play End Sub Sub arreterMediaPlayer() Feuil1.WindowsMediaPlayer1.Controls.stop End Sub Voila , plus rien ne vous empeche de créer votre lecteur multi média personnalisé ...;o) bonne journée MichelXld Message édité par: MichelXld, à: 07/08/2005 06:37 |
|
|
|
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 099
|
Bonjour Michel, le Forum
Pendant qu'il y en a qui vont en boite de nuit, ou encore des concert de rock... Il y en a un qui va essayer de faire marcher un truc depuis un autre truc qui n'a jamais été prévu pour ça !!! IL est très fou !!! Mais on l'adore !!! Bonne Nuit à toi Michel !! [ol]@+Thierry[/ol] |
|
|
|
|
|
#3 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: mars 2005
Messages: 133
|
Bonjour MichelXld, _Thierry, le forum,
Que dire de plus, merci est encore trop faible. Encore une solution complètement développée, qui nous est donnée avant la venue du problème et qui donne envie de l'exploiter. Si ça continue Excel va concurrencer Windows, car s'agit-il encore d'une application ? Professionnellement, nous avons cessé d'utiliser VBA pour diffuser des applications, car les DLL doivent être enregistrées et il faut des droits d'administrateur pour les installer. En reprenant le code tel quel en VBA (plus quelques modifications mineures), plus aucun problème pour diffuser ces applications, par messagerie. D'autant plus qu'il y a deux niveaux de programmation sous Excel : le VBA et le MichelXld, de niveau supérieur. |
|
|
|
|
|
#4 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Localisation: Sortie ouest Le mans 6 km
Version Excel : Excel 2000 (PC)
Messages: 7 539
|
Bonjour MichelXld, _Thierry, JJM, le forum,
Ben, sur ce coup, Billou va exploser. Mettez vos versions d'Excel à l'abri car il risque de les retirer de la vente... Ou alors elles vaudront de l'or car il va augmenter le prix des licences. Perso, je pense plutôt à cette dernière solution.... :woohoo: En tous cas, un Grand Merci à toi Michel. Bon dimanche à tous Jean-Pierre
__________________
En toutes circonstances, il faut savoir juger jusqu'où on peut aller trop loin. Si vous êtes satisfait des réponses qui vous sont données. Si vous souhaitez que cette énorme base de connaissance Excel puisse vous accompagner longtemps encore.... Aidez-la. C'est ici : http://www.excel-downloads.com/forum...orter-xld.html |
|
|
|
|
|
#5 (permalink) |
|
XLDnaute Accro
Date d'inscription: février 2005
Localisation: Maurecourt
Version Excel : Excel 2003 (PC)
Messages: 1 528
|
Bonsoir,
Justement je m'etais lancé dans un petit player de MP3 sous excel pour être tranquille et ne pas avoir à basculer de l'un à l'autre. Je cherchais de l'info sur le code et voila que tu tombes à pique Michel !!! Merci ++ Creepy
__________________
|
|
|
|
|
|
#6 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 748
|
bonsoir à tous
merci pour vos messages tres sympa ...voila à quoi j'en suis réduit , faute d'obtenir des places pour aller aux concerts ...;o) Creepy , si ça t'interesse , j'avais aussi fait un lecteur de CD audio (tracks) , il y a quelques temps http://www.excel-downloads.com/html/...23722&t=123722 bonne soiree MichelXld |
|
|
|
|
|
#7 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Localisation: Saint-Etienne
Version Excel : Excel XP (PC)
Messages: 4 432
|
Bonsoir tout le monde
Michel, nous t'interdisons expressément d'aller dans des concerts, tu es bien mieux chez toi à nous préparer des posts comme celui-là. crois-moi Encore merci de nous faire profiter de ton savoir. salut |
|
|
|
|
|
#8 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: mars 2005
Messages: 133
|
Bonjour à tous,
C'est absolument super, je n'ai pas encore tout testé mais ce que j'ai essayé fonctionne à la perfection, y compris la macro complémentaire pour jouer des CD. Il ne reste plus qu'a adapter pour créer un vrai utilitaire (dommage que j'aie déjà un projet en cours pour mon 100ème post : un jeu de Nim graphique imbattable en application ne ressemblant pas à Excel). P.S. : les concerts c'est vraiment nul, rien ne vaut Excel... eh eh eh... Au fait... hum... - et pour afficher les notes de musique ? - et les paroles de la chanson ? - et pour composer des musiques à l'aide d'un synthétiseur ? - et pour créer automatiquement des tubes avec Excel ? A demain, j'espère, pour ces solutions... (j'espère que personne ne me prend au sérieux). |
|
|
|
|
|
#9 (permalink) |
|
Guest
Messages: n/a
|
Bonjour à tous et spécialement à Michelxld,
Je tiens à te remercier pour tes précieux renseignements sur la méthode à utiliser pour jouer la musique de cette façon. Quand j'utilise des fichiers MP3 individuels, la méthode est super. Mais cela ne fonctionne pas sur un fichier MP3 contenant toutes les chansons d'un album donné (au lieu d'avoir 12 fichiers MP3, j'en ai seulement qu'un qui contient toutes ces chansons). Te reste-t=il des lignes de programmation supplémentaires pour pouvoir gérer ce type de fichier? (avancer, reculer, choix de chansons à l'intérieur du fichier MP3 même). Merci beaucoup de ton aide et encore une fois merci pour tous ces petits trucs. Michel C |
|
|
|
#10 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 748
|
bonjour à tous , bonjour Michel_C
Michel , peux tu préciser comment tu passes actuellement d'une plage à une autre lorsque tu lis ton fichier MP3 'manuellement' ? ton lecteur affiche la liste des différentes séquences ? pour ma part je ne connais pas la solution à ce cas de figure bon week end MichelXld |
|
|
|
|
|
#11 (permalink) |
|
Guest
Messages: n/a
|
Bonjour à tous et Michelxld
J'avais oublié de te mentionner ce petit détail. C'était la raison pour laquelle je te demandais des lignes supplémentaires de programmation. Je te remercie beaucoup tout de même de t'avoir penché sur mon problème. À la prochaine, Michel C |
|
|
|
#12 (permalink) |
|
Guest
Messages: n/a
|
Bonjour à tous,
Bonjour Michelxld, Je tiens à te remercier pour tous les codes spécifiés. Ceci m'a beaucoup aidé à monter mon petit programme. Le fichier musical comprend le chemin à prendre pour faire jouer la musique (ex,: c:\\...etc). J'ai copié le tout (programme et fichiers musique) sur un CD. Le CD fonctionne bien sur mon ordinateur. Le problème survient lorsque je fais jouer le CD sur un autre ordi. Mon lecteur CD est le drive E:, par contre sur un autre ordi, la lettre peut changer. Comment puis-je faire reconnaître le lecteur à mon programme et quelle serait la ligne de code pour indiquer le chemin des fichiers musicaux sur le CD? Je m'explique plus précisément sur le chemin des fichiers musicaux. Dans le programnme, j'indique E:\\bla bla... sur mon ordi, mais cette même ligne de code devrait se modifier elle-même si je fais jouer le CD sur un autre ordi. Michel C |
|
|
|
#13 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 748
|
bonjour Michel
merci pour ton message Cet exemple permet de boucler sur tous les lecteurs du poste afin de récupérer la lettre associée . Si oThisDrive.Playlist.Count est supérieur à 0 cela signifie qu'il y a un CD ou un DVD d'installé Sub listeLecteurs_CD_DVD() Dim Wmp As WindowsMediaPlayer Dim iNumDrives As Integer, i As Integer Dim oThisDrive As IWMPCdrom Set Wmp = CreateObject('WMPlayer.OCX.7') iNumDrives = Wmp.cdromCollection.Count If iNumDrives = 0 Then MsgBox 'il n'y a pas de lecteur de CD ou DVD installés .' For i = 0 To iNumDrives - 1 Set oThisDrive = Wmp.cdromCollection.Item(i) MsgBox oThisDrive.driveSpecifier & vbLf & oThisDrive.Playlist.Count Next i End Sub bonne journée MichelXld |
|
|
|
|
|
#14 (permalink) |
|
Guest
Messages: n/a
|
Bonjour à tous,
Bonjour Michelxld, Merci pour ces lignes car le programme identifie bien quel lecteur possède les fichiers musicaux. De ce fait, j'ai donc retiré la lettre de mes autres lignes. ex.: Set Xwmp = Wmp.newMedia('C:maMusique.mp3') Wmp.currentPlaylist.insertItem 1, Xwmp est devenu Set Xwmp = Wmp.newMedia('maMusique.mp3') Wmp.currentPlaylist.insertItem 1, Xwmp En retirant tout simplement la lettre, je croyais que le programme irait chercher les fichiers musicaux dans le bon lecteur, ce qui n'est pas le cas. Y a-t-il quelque chose que je fais de travers? Je te remercie de m'aider, Michel C |
|
|
| ANNONCES | |
![]() |
| Liens sociaux |
| Outils de la discussion | |
|
|