cs_Asmaria
Messages postés6Date d'inscriptiondimanche 4 mars 2007StatutMembreDernière intervention21 janvier 2008
-
20 janv. 2008 à 23:03
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
21 janv. 2008 à 02:09
Bonjour !
Lorsque j'ouvre mon fichier Excel, un UserForm apparaît.
Je voudrais que l'apparition de ce UserForm soit accompagné d'un son, joué une seule fois.
Comment pourrais-je faire ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 21 janv. 2008 à 02:09
Salut
Le VB de Excel est du VBA --> Modif catégorie de la question
Jouer un son, ce ne sont pas le sources VB6 qui manquent, mais si n'a pas VB6, difficile de trouver ton bonheur.
Voilà le code qui te permettra de jouer des fichiers AVI, MID, ou WAV grace aux APIs système, donc indépendant du langage.
Tu colles ce code dans un Module à côté de ta UserForm et quand tu veux jouer le son (dans le UserForm_Load par exemple), tu n'as plus qu'à lancer une de ces commandes
Call JouerFichierMid("C:\Fichier.MID")
Call JouerFichierWav("C:\Fichier.WAV")
Call JouerFichierAvi("C:\Fichier.AVI")
Le code
Option Explicit
'---- Pour AVI et MID
Private Declare Function mciSendString Lib "winmm.dll" Alias _
"mciSendStringA" (ByVal lpstrCommand As String, ByVal _
lpstrReturnString As Any, ByVal uReturnLength As Long, ByVal _
hwndCallback As Long) As Long
'---- Pour son WAV
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" ( _
ByVal lpszSoundName As String, _
ByVal uFlags As Long) As Long
Private Declare Function sndPlaySoundmem Lib "winmm.dll" Alias "PlaySoundA" ( _
ByVal lpszName As Long, _
ByVal hModule As Long, _
ByVal dwFlags As Long) As Long
' Joue le fichier de manière synchrone (attend la fin de la lecture pour rendre la main).
Private Const SND_SYNC = &H0
' Joue le fichier de manière asynchrone (rend la main immédiatement).
Private Const SND_ASYNC = &H1
' N'attend pas si le driver son est occupé.
Private Const SND_NOWAIT = &H2000
'
Public Sub JouerFichierAvi(stFichier As String, blFenetre As Boolean)
Dim lgRet As Long
Dim stPlay As String
If blFenetre Then
' Si on est en mode fenêtre simple
stPlay = "play """ & stFichier & """"
Else
' sinon, on est en plein écran
stPlay = "play """ & stFichier & """ fullscreen "
End If
' Execute la commande
lgRet = mciSendString(stPlay, 0&, 0, 0&)
End Sub
Public Sub JouerFichierMid(stFichier As String)
Dim lgRet As Long
' Ouverture du fichier, on utilise un alias 'midsong' pour manipuler le son
lgRet = mciSendString("open """ & stFichier & """ type sequencer alias midsong", _
0&, 0, 0)
' Indique qu'il faut jouer le fichier en entier avant de rendre la main
lgRet = mciSendString("play midsong wait", 0&, 0, 0)
' Ferme le fichier
lgRet = mciSendString("close midsong", 0&, 0, 0)
End Sub
Public Sub JouerFichierWav(stFichier As String)
' Joue le fichier son envoyé en paramêtre si le driver est disponible.
Call sndPlaySound(stFichier, SND_ASYNC Or SND_NOWAIT)
End Sub
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)