OVH Cloud OVH Cloud

construire une référence en VBA

3 réponses
Avatar
Olivier B
Bonjour !

je cherche à progresser sur VBA et je souhaite optimiser un code qui
concerne la construction de liens "logiques"

à partir d'un bouton d'un userform, je désire faire référence à un ou
plusieurs fichiers externes.

Comment définir une fonction ou une procédure qui me donnerai plus simplement
Le Chemin du répertoire + le nom du fichier

Un truc du genre : WAVFile(litmoi as integer) qui me renvoi bien sous forme
de string Le Chemin du répertoire + le nom du fichier

Un post précédent m'a donné :
WAVFilechemin = ThisWorkbook.Path & "\" & WAVfile(litmoi)

mais aucune idée comment incrémenter WAVFile(litmoi) pour qu'à chaque valeur
de l'entier naturel "litmoi", il retourne une valeur donnée d'un nom de
fichier plus simplement qu'avec des if ... then ... elseif ... endif

Pour l'instant voilà comment je m'en sort :

--------------------------------------------------------

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
Sub PlayWAV(litmoi)
Dim WAVfil As String

If litmoi = 1 Then
WAVfil = "alles klar.wav"
ElseIf litmoi = 2 Then
WAVfil = "das da.wav"

... et ainsi de suite pour un grand nombre de noms de fichiers dont j'ai
obtenu la liste via vba...

End If

WAVFilechemin = ThisWorkbook.Path & "\" & WAVfil

Call PlaySound(WAVFilechemin, 0&, SND_ASYNC Or SND_FILENAME)

End Sub


--
olivier

3 réponses

Avatar
Patrick Penet
Va regarder du côté de la fonction Dir(sChemin).

La première fois que tu l'utilise elle te renvoie un fichier
selon les critères définis par sChemin.

Puis il suffit d'utiliser Dir() sans argument pour que
la fonction te renvoie le fichier suivant selon les mêmes
critères.

HTH
PP

"Olivier B" <benardo974(supprimer contenu des parenthèses)@hotmail.com> a écrit dans le message de news:


Bonjour !

je cherche à progresser sur VBA et je souhaite optimiser un code qui
concerne la construction de liens "logiques"

à partir d'un bouton d'un userform, je désire faire référence à un ou
plusieurs fichiers externes.

Comment définir une fonction ou une procédure qui me donnerai plus simplement
Le Chemin du répertoire + le nom du fichier

Un truc du genre : WAVFile(litmoi as integer) qui me renvoi bien sous forme
de string Le Chemin du répertoire + le nom du fichier

Un post précédent m'a donné :
WAVFilechemin = ThisWorkbook.Path & "" & WAVfile(litmoi)

mais aucune idée comment incrémenter WAVFile(litmoi) pour qu'à chaque valeur
de l'entier naturel "litmoi", il retourne une valeur donnée d'un nom de
fichier plus simplement qu'avec des if ... then ... elseif ... endif

Pour l'instant voilà comment je m'en sort :

--------------------------------------------------------

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
Sub PlayWAV(litmoi)
Dim WAVfil As String

If litmoi = 1 Then
WAVfil = "alles klar.wav"
ElseIf litmoi = 2 Then
WAVfil = "das da.wav"

... et ainsi de suite pour un grand nombre de noms de fichiers dont j'ai
obtenu la liste via vba...

End If

WAVFilechemin = ThisWorkbook.Path & "" & WAVfil

Call PlaySound(WAVFilechemin, 0&, SND_ASYNC Or SND_FILENAME)

End Sub


--
olivier


Avatar
lSteph
Bonjour,

Voici un exemple:

ATTENTION depuis excel fichier ouvrir
se positionner sur un répertoire contenant des .wav

Materiel Userform1, Combobox1, CommandButton1
Voici le code du userform:

Private Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As Long, ByVal dwFlags As Long) As Long


Private Function Alarm()
Dim WAVFile As String
Const SND_ASYNC = &H1
Const SND_FILENAME = &H20000
On Error GoTo ErrHandler

WAVFile = ComboBox1
Call PlaySound(WAVFile, 0&, SND_ASYNC Or SND_FILENAME)
Alarm = True
Exit Function

ErrHandler:
Alarm = False
End Function

Private Sub CommandButton1_Click()
Alarm
End Sub

Private Sub UserForm_Initialize()

Dim cpt As Long
Dim f As String
cpt = 1
f = Dir("*.wav")
ComboBox1.Clear
Do While Len(f) > 0
cpt = cpt + 1
ComboBox1.AddItem f
f = Dir
Loop


End Sub



'Cordialement.
'lSteph



Olivier B vient de nous annoncer :
Bonjour !

je cherche à progresser sur VBA et je souhaite optimiser un code qui
concerne la construction de liens "logiques"

à partir d'un bouton d'un userform, je désire faire référence à un ou
plusieurs fichiers externes.

Comment définir une fonction ou une procédure qui me donnerai plus simplement
Le Chemin du répertoire + le nom du fichier

Un truc du genre : WAVFile(litmoi as integer) qui me renvoi bien sous forme
de string Le Chemin du répertoire + le nom du fichier

Un post précédent m'a donné :
WAVFilechemin = ThisWorkbook.Path & "" & WAVfile(litmoi)

mais aucune idée comment incrémenter WAVFile(litmoi) pour qu'à chaque valeur
de l'entier naturel "litmoi", il retourne une valeur donnée d'un nom de
fichier plus simplement qu'avec des if ... then ... elseif ... endif

Pour l'instant voilà comment je m'en sort :

--------------------------------------------------------

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
Sub PlayWAV(litmoi)
Dim WAVfil As String

If litmoi = 1 Then
WAVfil = "alles klar.wav"
ElseIf litmoi = 2 Then
WAVfil = "das da.wav"

... et ainsi de suite pour un grand nombre de noms de fichiers dont j'ai
obtenu la liste via vba...

End If

WAVFilechemin = ThisWorkbook.Path & "" & WAVfil

Call PlaySound(WAVFilechemin, 0&, SND_ASYNC Or SND_FILENAME)

End Sub


--
- -

Avatar
lSteph
Re,
outre l'exemple donné pour
mais aucune idée comment incrémenter WAVFile(


peut-être revenir à
l'objet:
construire une référence en VBA
C'est un string

donc il y a .fullname qui donne le nom complet
et correspond à .path & "/" & .name

Le problème c'est de les stocker pour les utiliser
et que les boucles vont commencer à friser si tu dois te taper n
répertoires.
Une alternative un peu lourdingue serait via Démarrer
executer
cmd
cd
dir *.wav/s/b>listsons.txt
...patienter
exit

et de récupèrer la liste dans excel

Ou + simple amha, mais tout dépend de l'objectif final
serait d'avoir un répertoire "Sons" où tu mets tout les sons que tu
veux.

Cordialement.

lSteph


Bonjour !

je cherche à progresser sur VBA et je souhaite optimiser un code qui
concerne la construction de liens "logiques"

à partir d'un bouton d'un userform, je désire faire référence à un ou
plusieurs fichiers externes.

Comment définir une fonction ou une procédure qui me donnerai plus simplement
Le Chemin du répertoire + le nom du fichier

Un truc du genre : WAVFile(litmoi as integer) qui me renvoi bien sous forme
de string Le Chemin du répertoire + le nom du fichier

Un post précédent m'a donné :
WAVFilechemin = ThisWorkbook.Path & "" & WAVfile(litmoi)

mais aucune idée comment incrémenter WAVFile(litmoi) pour qu'à chaque valeur
de l'entier naturel "litmoi", il retourne une valeur donnée d'un nom de
fichier plus simplement qu'avec des if ... then ... elseif ... endif

Pour l'instant voilà comment je m'en sort :

--------------------------------------------------------

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
Sub PlayWAV(litmoi)
Dim WAVfil As String

If litmoi = 1 Then
WAVfil = "alles klar.wav"
ElseIf litmoi = 2 Then
WAVfil = "das da.wav"

... et ainsi de suite pour un grand nombre de noms de fichiers dont j'ai
obtenu la liste via vba...

End If

WAVFilechemin = ThisWorkbook.Path & "" & WAVfil

Call PlaySound(WAVFilechemin, 0&, SND_ASYNC Or SND_FILENAME)

End Sub


--
- -