OVH Cloud OVH Cloud

encoder un son

11 réponses
Avatar
Chokes
Bonsoir toutes et tous

J'ai téléchargé un son wave que je souhaiterai encoder
pour l'inclure dans une macro xl.

Qq un peut il me renseigner à ce sujet

Merci

10 réponses

1 2
Avatar
Fredo P
Bonsoir Chokes
Q'entends tu par encoder?
"Chokes" a écrit dans le message de
news:
Bonsoir toutes et tous

J'ai téléchargé un son wave que je souhaiterai encoder
pour l'inclure dans une macro xl.

Qq un peut il me renseigner à ce sujet

Merci


Avatar
Fredo P
De notre s/Chef à 3 plumes AV

Private Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As Long, ByVal dwFlags As Long) As Long
Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_FILENAME = &H20000

Private Sub Worksheet_Change(ByVal zz As Range)
If zz.Address <> "$A$1" Then Exit Sub
If [zz] = 1 Then jouer_SON
End Sub

Sub jouer_SON()
leSon = "C:WINDOWSMEDIAtada.wav"
Call PlaySound(leSon, 0&, SND_ASYNC Or SND_FILENAME)
End Sub

PS : vérifie/corrige le chemni d'accès au fichier ".wav"

AV
"Chokes" a écrit dans le message de
news:
Bonsoir toutes et tous

J'ai téléchargé un son wave que je souhaiterai encoder
pour l'inclure dans une macro xl.

Qq un peut il me renseigner à ce sujet

Merci


Avatar
Chokes
Bonjour Fredo,

Merci pour ta réponse,

Ce que j'entends par "encoder" c'est que j'ai un son wave que j'aimerai
inclure dans vba sous forme de code car mon fichier excel est sensé être
copié sur plusieurs pc de mes amis mais je ne garde le son dans le mien. en
fait je cherche à faire en sorte que lorsque j'envoie mon fichier vers
d'autres pc qu'il n'y ai juste que celui-ci et non pas un fichier xls + wave .

bonne journée


De notre s/Chef à 3 plumes AV

Private Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As Long, ByVal dwFlags As Long) As Long
Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_FILENAME = &H20000

Private Sub Worksheet_Change(ByVal zz As Range)
If zz.Address <> "$A$1" Then Exit Sub
If [zz] = 1 Then jouer_SON
End Sub

Sub jouer_SON()
leSon = "C:WINDOWSMEDIAtada.wav"
Call PlaySound(leSon, 0&, SND_ASYNC Or SND_FILENAME)
End Sub

PS : vérifie/corrige le chemni d'accès au fichier ".wav"

AV
"Chokes" a écrit dans le message de
news:
Bonsoir toutes et tous

J'ai téléchargé un son wave que je souhaiterai encoder
pour l'inclure dans une macro xl.

Qq un peut il me renseigner à ce sujet

Merci







Avatar
Michel Pierron
Bonjour Chokes;
Oui, c'est possible; l'idéal serait par exemple, d'encoder le fichier à
l'intérieur d'une propriété privée de la collection
CustomDocumentProperties, mais ce type de propriété n'accepte des longueurs
de chaîne que de 255 caractères. Le plus simple est d'encoder le fichier sur
une feuille éventuellement masquée, à condition que ce dernier soit de
taille modeste car comme il faudra le recopier en local sur le disque de
l'utilisateur avant de pouvoir l'utiliser, le temps de recopie pour un
fichier de taille importante risque d'être rédhibitoire. Je pense que la
taille raisonnable du fichier doît être inférieure au nombre de cellules
disponibles dans une colonne (c'est à dire environ 65 536 octets) pour que
cela reste transparent à l'utilisateur (les fichiers de type wav sont
généralement de taille inférieure) sinon, il faudra gérer les lignes et les
colonnes d'une feuille (1 677 7216 cellules) et au delà, gérer plusieurs
feuilles.

Pour encoder le fichier sur la feuille 2 par exemple, tu peux utiliser la
procédure suivante; cette procédure n'étant utilisée qu'une fois, la taille
du fichier n'est pas un problème pour l'encodage:

' Encodage fichier en colonne 1 de la feuille 2
' (la feuille 2 peut être masquée en VeryHidden)
Sub FileImport()
' Chemin complet du fichier binaire
Const sFile2$ = "c:MonFichier.wav"
Dim f&, bArray() As Byte
With ThisWorkbook.Sheets(2)
.Cells.Clear: f = FreeFile
Open sFile2 For Binary Access Read As #f
ReDim bArray(1 To LOF(f))
Get #f, , bArray: Close #f
For f = 1 To UBound(bArray)
.Cells(f, 1) = bArray(f)
Next f
Erase bArray
End With
End Sub

Pour pouvoir utiliser le fichier, tu utilises la procédure évènementielle
liée à l'ouverture du classeur pour recopier en local sur le disque le
fichier encodé précedemment. Le plus simple est d'écrire le fichier dans le
même répertoire que le classeur qui le contient.
Dans le module ThisWorkbook:

Private Sub Workbook_Open()
If FileExport("Fichier.wav") Then
' Ici le reste de ton code
' ...

End If
End Sub

' Exportation sur disque avant utilisation
Private Function FileExport(ByVal iFile$) As Boolean
On Error GoTo 1
Dim f&, Buffer$
With ThisWorkbook.Sheets(2)
For f = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
Buffer = Buffer & Chr(.Cells(f, 1))
Next f
End With
f = FreeFile
Open ThisWorkbook.Path & "" & iFile For Output As #f
Print #f, Buffer: Close #f: Buffer = ""
FileExport = True
1: Exit Function
End Function

Et tu utilises la procédure évènementielle liée à la fermeture du classeur
pour détruire le fichier crée:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Kill ThisWorkbook.Path & "Click.wav"
End Sub

MP


"Chokes" a écrit dans le message de news:

Bonsoir toutes et tous

J'ai téléchargé un son wave que je souhaiterai encoder
pour l'inclure dans une macro xl.

Qq un peut il me renseigner à ce sujet

Merci


Avatar
Michel Pierron
Re Chokes;

Bien sur, il fallait lire Fichier.wav et non "Click.wav" dans la procédure
de destruction du fichier créé (le lecteur attentif aura corrigé de lui
même.)

MP


"Chokes" a écrit dans le message de
news:
Bonsoir toutes et tous

J'ai téléchargé un son wave que je souhaiterai encoder
pour l'inclure dans une macro xl.

Qq un peut il me renseigner à ce sujet

Merci


Avatar
Jacques93
Bonjour Chokes,

On peut également utiliser OleObjects. Pour insérer le .wav dans une
feuille (que l'on peut cacher ensuite) :

Insertion => Objet... => Séléctionner "Son wave"

Basculer sur l'onglet "Créer à partir du fichier" => Parcourir

ou indiquer le chemin, puis valider.

Pour jouer le wav :

Sheets("Feuil1").OLEObjects(1).Verb Verb:=xlPrimary

OK sous Ecxel 2003. Indépendamment de la taille du classeur, il n'y a
pas de limite de taille.

http://cjoint.com/data/einkotNNCu.htm

Bonsoir toutes et tous

J'ai téléchargé un son wave que je souhaiterai encoder
pour l'inclure dans une macro xl.

Qq un peut il me renseigner à ce sujet

Merci



--
Cordialement,

Jacques.

Avatar
Jacques93
Bonjour Michel Pierron,

Juste une petite chose, si je puis me permettre, il n'est pas
obligatoirement nécessaire d'enregistrer le .wav en local pour le jouer.
On peut transférer le contenu de la feuille dans un tableau de Byte et
le jouer directement à partir de la mémoire :

Private Const SND_SYNC = &H0
Private Const SND_LOOP = &H8
Private Const SND_MEMORY = &H4
Private Const SND_NODEFAULT = &H2
Private Declare Function sndPlaySound Lib _
"winmm.dll" Alias "sndPlaySoundA" _
(lpszSoundName As Any, ByVal uFlags As Long) As Long

Private Sub CommandButton1_Click()
Dim r As Long, l As Long
Dim m() As Byte

r = Range("A65536").End(xlUp).Row
ReDim m(0 To r - 1)
For l = 1 To r
m(l - 1) = Cells(l, 1)
Next l
PlaySoundAsByte m()
End Sub

Private Sub PlaySoundAsByte(m() As Byte)
Dim Flags As Long

Flags = SND_NODEFAULT Or SND_MEMORY Or SND_SYNC
sndPlaySound m(0), Flags
End Sub


Bonjour Chokes;
Oui, c'est possible; l'idéal serait par exemple, d'encoder le fichier à
l'intérieur d'une propriété privée de la collection
CustomDocumentProperties, mais ce type de propriété n'accepte des longueurs
de chaîne que de 255 caractères. Le plus simple est d'encoder le fichier sur
une feuille éventuellement masquée, à condition que ce dernier soit de
taille modeste car comme il faudra le recopier en local sur le disque de
l'utilisateur avant de pouvoir l'utiliser, le temps de recopie pour un
fichier de taille importante risque d'être rédhibitoire. Je pense que la
taille raisonnable du fichier doît être inférieure au nombre de cellules
disponibles dans une colonne (c'est à dire environ 65 536 octets) pour que
cela reste transparent à l'utilisateur (les fichiers de type wav sont
généralement de taille inférieure) sinon, il faudra gérer les lignes et les
colonnes d'une feuille (1 677 7216 cellules) et au delà, gérer plusieurs
feuilles.

Pour encoder le fichier sur la feuille 2 par exemple, tu peux utiliser la
procédure suivante; cette procédure n'étant utilisée qu'une fois, la taille
du fichier n'est pas un problème pour l'encodage:

' Encodage fichier en colonne 1 de la feuille 2
' (la feuille 2 peut être masquée en VeryHidden)
Sub FileImport()
' Chemin complet du fichier binaire
Const sFile2$ = "c:MonFichier.wav"
Dim f&, bArray() As Byte
With ThisWorkbook.Sheets(2)
.Cells.Clear: f = FreeFile
Open sFile2 For Binary Access Read As #f
ReDim bArray(1 To LOF(f))
Get #f, , bArray: Close #f
For f = 1 To UBound(bArray)
.Cells(f, 1) = bArray(f)
Next f
Erase bArray
End With
End Sub

Pour pouvoir utiliser le fichier, tu utilises la procédure évènementielle
liée à l'ouverture du classeur pour recopier en local sur le disque le
fichier encodé précedemment. Le plus simple est d'écrire le fichier dans le
même répertoire que le classeur qui le contient.
Dans le module ThisWorkbook:

Private Sub Workbook_Open()
If FileExport("Fichier.wav") Then
' Ici le reste de ton code
' ...

End If
End Sub

' Exportation sur disque avant utilisation
Private Function FileExport(ByVal iFile$) As Boolean
On Error GoTo 1
Dim f&, Buffer$
With ThisWorkbook.Sheets(2)
For f = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
Buffer = Buffer & Chr(.Cells(f, 1))
Next f
End With
f = FreeFile
Open ThisWorkbook.Path & "" & iFile For Output As #f
Print #f, Buffer: Close #f: Buffer = ""
FileExport = True
1: Exit Function
End Function

Et tu utilises la procédure évènementielle liée à la fermeture du classeur
pour détruire le fichier crée:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Kill ThisWorkbook.Path & "Click.wav"
End Sub

MP


"Chokes" a écrit dans le message de news:

Bonsoir toutes et tous

J'ai téléchargé un son wave que je souhaiterai encoder
pour l'inclure dans une macro xl.

Qq un peut il me renseigner à ce sujet

Merci






--
Cordialement,

Jacques.


Avatar
Michel Pierron
Bonjour Jacques;
En effet Jacques; bonne remarque dans le cas d'un fichier de ce type.
Cependant, la procédure reste valable pour n'importe quel fichier binaire
annexe de taille modeste et non spécifiquement un fichier wav.

MP

"Jacques93" a écrit dans le message de news:
%
Bonjour Michel Pierron,

Juste une petite chose, si je puis me permettre, il n'est pas
obligatoirement nécessaire d'enregistrer le .wav en local pour le jouer.
On peut transférer le contenu de la feuille dans un tableau de Byte et le
jouer directement à partir de la mémoire :

Private Const SND_SYNC = &H0
Private Const SND_LOOP = &H8
Private Const SND_MEMORY = &H4
Private Const SND_NODEFAULT = &H2
Private Declare Function sndPlaySound Lib _
"winmm.dll" Alias "sndPlaySoundA" _
(lpszSoundName As Any, ByVal uFlags As Long) As Long

Private Sub CommandButton1_Click()
Dim r As Long, l As Long
Dim m() As Byte

r = Range("A65536").End(xlUp).Row
ReDim m(0 To r - 1)
For l = 1 To r
m(l - 1) = Cells(l, 1)
Next l
PlaySoundAsByte m()
End Sub

Private Sub PlaySoundAsByte(m() As Byte)
Dim Flags As Long

Flags = SND_NODEFAULT Or SND_MEMORY Or SND_SYNC
sndPlaySound m(0), Flags
End Sub


Bonjour Chokes;
Oui, c'est possible; l'idéal serait par exemple, d'encoder le fichier à
l'intérieur d'une propriété privée de la collection
CustomDocumentProperties, mais ce type de propriété n'accepte des
longueurs de chaîne que de 255 caractères. Le plus simple est d'encoder
le fichier sur une feuille éventuellement masquée, à condition que ce
dernier soit de taille modeste car comme il faudra le recopier en local
sur le disque de l'utilisateur avant de pouvoir l'utiliser, le temps de
recopie pour un fichier de taille importante risque d'être rédhibitoire.
Je pense que la taille raisonnable du fichier doît être inférieure au
nombre de cellules disponibles dans une colonne (c'est à dire environ 65
536 octets) pour que cela reste transparent à l'utilisateur (les fichiers
de type wav sont généralement de taille inférieure) sinon, il faudra
gérer les lignes et les colonnes d'une feuille (1 677 7216 cellules) et
au delà, gérer plusieurs feuilles.

Pour encoder le fichier sur la feuille 2 par exemple, tu peux utiliser la
procédure suivante; cette procédure n'étant utilisée qu'une fois, la
taille du fichier n'est pas un problème pour l'encodage:

' Encodage fichier en colonne 1 de la feuille 2
' (la feuille 2 peut être masquée en VeryHidden)
Sub FileImport()
' Chemin complet du fichier binaire
Const sFile2$ = "c:MonFichier.wav"
Dim f&, bArray() As Byte
With ThisWorkbook.Sheets(2)
.Cells.Clear: f = FreeFile
Open sFile2 For Binary Access Read As #f
ReDim bArray(1 To LOF(f))
Get #f, , bArray: Close #f
For f = 1 To UBound(bArray)
.Cells(f, 1) = bArray(f)
Next f
Erase bArray
End With
End Sub

Pour pouvoir utiliser le fichier, tu utilises la procédure évènementielle
liée à l'ouverture du classeur pour recopier en local sur le disque le
fichier encodé précedemment. Le plus simple est d'écrire le fichier dans
le même répertoire que le classeur qui le contient.
Dans le module ThisWorkbook:

Private Sub Workbook_Open()
If FileExport("Fichier.wav") Then
' Ici le reste de ton code
' ...

End If
End Sub

' Exportation sur disque avant utilisation
Private Function FileExport(ByVal iFile$) As Boolean
On Error GoTo 1
Dim f&, Buffer$
With ThisWorkbook.Sheets(2)
For f = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
Buffer = Buffer & Chr(.Cells(f, 1))
Next f
End With
f = FreeFile
Open ThisWorkbook.Path & "" & iFile For Output As #f
Print #f, Buffer: Close #f: Buffer = ""
FileExport = True
1: Exit Function
End Function

Et tu utilises la procédure évènementielle liée à la fermeture du
classeur pour détruire le fichier crée:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Kill ThisWorkbook.Path & "Click.wav"
End Sub

MP


"Chokes" a écrit dans le message de
news:
Bonsoir toutes et tous

J'ai téléchargé un son wave que je souhaiterai encoder
pour l'inclure dans une macro xl.

Qq un peut il me renseigner à ce sujet

Merci






--
Cordialement,

Jacques.




Avatar
Fredo P
Ohfvingt dieux!! Jacques, je n'ai pas regarder le code ,mais c'est
sensationnelle, tu nous envois Arlette chez nous!, c'est bien quand ça fait
longtemps que l'on ne l'a pas entendu, mais dans quelques temps...

"Jacques93" a écrit dans le message de
news:
Bonjour Chokes,

On peut également utiliser OleObjects. Pour insérer le .wav dans une
feuille (que l'on peut cacher ensuite) :

Insertion => Objet... => Séléctionner "Son wave"

Basculer sur l'onglet "Créer à partir du fichier" => Parcourir

ou indiquer le chemin, puis valider.

Pour jouer le wav :

Sheets("Feuil1").OLEObjects(1).Verb Verb:=xlPrimary

OK sous Ecxel 2003. Indépendamment de la taille du classeur, il n'y a
pas de limite de taille.

http://cjoint.com/data/einkotNNCu.htm

Bonsoir toutes et tous

J'ai téléchargé un son wave que je souhaiterai encoder
pour l'inclure dans une macro xl.

Qq un peut il me renseigner à ce sujet

Merci



--
Cordialement,

Jacques.



Avatar
Chokes
Bonjour Messieurs,

Que de réponses que je vais m'empresser de d'exploiter et ne manquerai pas
de vos informer.

Je vous souhaite un très bon dimanche

A bientôt
1 2