VBA Excel : exécuter deux procédures en parallèle

Résolu
GrandJean -  
 GrandJean -
Bonsoir,

Dans un UF, j'utilise un webbrowser pour afficher un gif animé. En parallèle, je lance un son illustrant l'animation. Mon souci est que, pendant que le son est joué, l'animation du gif est bloquée. Y-a-t-il un moyen pour que les deux s'exécute en parallèle ? J'ai fait des recherches sur les forum, notamment du côté des multithread, mais sans trop comprendre si cela pouvait m'aider ou pas.
Pour info, voici le code type que j'utilise pour ces deux instructions, dans la même procédure :
WebBrowser1.Navigate "about:<html><CENTER><body scroll='no'>" & "<img src='" & ActiveWorkbook.Path & "\Images\Rep_Chrono.GIF'></img></body></html>"

DoEvents (j'ai mis doevents ici pour que l'affichage du gif se fasse avant l'exécution du son. Question d'esthétique.)
Application.ExecuteExcel4Macro "SOUND.PLAY(,""" & ActiveWorkbook.Path & "\Sons\test.wav"")"

Merci par avance pour vos idées.
GrandJean

4 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    Les macros XL4 sont bien pratiques mais souvent limitées

    essaies ceci à adapter
    Private Declare Function PlaySound32 Lib "winmm.dll" Alias "PlaySoundA" (ByVal IpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
    
    Const SND_SYNC = &H0
    Const SND_ASYNC = &H1
    Const SND_FILENAME = &H20000
    
    ' archives MPFE
    
    Sub PlayWAV()
    ' snd_async: son asynchrone (la musique n'arrete pas le programme) snd_sync: arrete le prog
    If Application.CanPlaySounds Then
        WAVFile = ThisWorkbook.Path & "\" & "coluche.wav"
        Call PlaySound32(WAVFile, 0&, SND_ASYNC Or SND_FILENAME)
    Else
        Exit Sub
    End If
    
    End Sub


    Michel
    0
  2. GrandJean
     
    Bonjour Michel,

    Merci d'avoir pris le temps de regarder ma question et de m'avoir apporté une réponse claire qui, en plus, fonctionne ! (humour du dimanche...)

    Je ne connaissais pas cette fonction. J'ai pu l'adapter sans problème. J'ai déclaré la fonction et les variables en public, dans un module, puisque je l'utiliserai dans plusieurs UF.

    Juste une question : c'est l'utilisateur qui décide ou non d'avoir du son. Cela donne une variable nommée ambiance.
    J'ai donc remplacé:
    "If Application.CanPlaySounds" par "if ambiance"
    Cela fonctionne mais y a t-il un risque ou ma condition peut-elle remplacer sans problème celle que tu avais indiqué ?

    Bon appétit
    Jean
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Cela fonctionne mais y a t-il un risque

    Je ne pense pas
    dim ambiance as boolean
    if ambiance then can.....
    0
  4. GrandJean
     
    Bien noté.

    Encore merci
    Bonne journée
    0