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

Résolu
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. Contributeur
    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
    1. 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
      1. Contributeur
        Cela fonctionne mais y a t-il un risque

        Je ne pense pas
        dim ambiance as boolean
        if ambiance then can.....