Utilisation de Sendkeys

Bonjour a tous! j'ai une petite application qui est lancé par mon VBA sous excel. Cette application possede un shortkey "control Q" qui permet de fermer cette application. J'aimerais pouvoir utiliser sendkey dans mon VBA pour pouvoir fermer l'application. J'ai essayé mais j'ai le message "permission refusée". Avez vous une idée pourquoi. Noter que la fenetre active est l'application en question.

Je vous envoi une capture d'écran.

Merci.

If Not Application.Intersect(target, Range("F3:F600")) Is Nothing And edit = False Then  'clic dans une cellule de colonne F

     Dim strArray() As String
     Dim hour As String: hour = "0"
     Dim min As String: min = "0"
     Dim sec As String: sec = "0"
     Dim totalSeconds As Integer: totalSeconds = 0

      'AppActivate "Z80 Simulator IDE"
      'Sleep 30
     SendKeys ("^Q"), True 'pour fermer l'application VLC si ouvert
     strArray = Split(ActiveCell.Value, ":")

     If UBound(strArray) = 1 Then
            min = strArray(0)
            sec = strArray(1)
     Else
            hour = strArray(0)
            min = strArray(1)
            sec = strArray(2)
     End If

     totalSeconds = totalSeconds + 3600 * CInt(hour)
     totalSeconds = totalSeconds + 60 * CInt(min)
     totalSeconds = totalSeconds + sec

     Call Shell("""C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"" ""C:\Users\michel\Desktop\donnees récupérées\musique\musique audacity\multipiste piano 1.wav"" --start-time=" & totalSeconds, 1)
End If
2016 12 28 1

Bonjour,

Ta syntaxe est correcte, le problème est un problème de sécurité !

Essaie d'ajouter ceci :

Dim WshShell As Object
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^Q"

Salut Steelson! je n'ai plus de message d'erreur, cependant la fenetre ne se ferme pas. Je crois comprendre pouquoi: en cliquant sur une nouvelle cellule d'excel afin de fermer la fenetre qui contient l'application de lecture du fichier de musique, je me trouve a activer excel, et donc l'application ne se ferme pas. Y aurait-il moyen de dire a mon code VBA de fermer l'application meme si elle n'est plus active? par exemple quelque chose comme activate application, le temps de fermer cette application?

Alors là je ne sais pas ! il faut sans doute aller ré-activer cette fenêtre ouverte. Avec la commande Shell (je suppose).

En effet SendKeys va envoyer le code vers celle qui est ouverte et en fait le message d'erreur provenait du fait que c'était excel qui voulait se fermer.

Donc une fois résolu, tu pourras revenir à ton ancien code. Mais là je suis sec pour le moment !

Proposition :

Simuler un Alt+Tab avant de simuler Ctrl+Q ?

Ah oui !! pas con, il faudrait tester ...

    
Application.SendKeys("%{TAB}")
Application.SendKeys("^Q")

ou bien s'il faut faire 2 tabulations ...

Sub test()

Application.SendKeys ("%{TAB 2}")
Application.SendKeys ("^Q")

End Sub

J'ai essayé plusieurs combinaison: 1 tab, 2 tab avec WshShell, sans WshShell, et la 2 ieme application ne se ferme toujours pas. A chaque fois que je clic sur une cellule, les pieces musicales se chevauchent.

J'ai essayé également ceci mais j'ai une erreur:

 AppActivate "VLC media player"
Application.SendKeys ("^Q") 'pour fermer l'application

On ne doit pas etre loin de la solution.

Je suis friand de connaître la solution finale ... de mon côté je n'ai pas pu chercher beaucoup aujourd'hui.

J'en suis à regarder du côté d' AutoItque j'ai utilisé récemment et qui permet de faire dialoguer excel avec d'autre appli (entre autres). Mais c'est vraiment si aucune autre solution n'est possible (encore que ce soit pas si complexe que cela à utiliser.

Ceci fonctionne très bien chez moi !!

Sub RefermerAutreAppli()

AppActivate "Sans titre - Bloc-notes"
Application.SendKeys ("%{F4}") 'pour fermer l'application

End Sub

MAIS il faut bien connaître le nom de l'appli ou plutôt de la fenêtre ... : elle m'a été donnée via AutoIt (*note en bas)

capture d ecran 71

Regarde s'il ne faut pas ajouter le titre à VLC media player : "Mon Album - VLC media player" (et utiliser Alt-F4 ?)


(*) j'ai trouvé aussi un code VBA qui donne les noms des applis, voir ci-joint, et que tu peux faire tourner pour trouver le nom !

216fermerautreappli.xlsm (18.83 Ko)

Rebonjour Steelson

AutoIt,, je vais regarder ca de pret, car il m'arrive de vouloir communiquer de mon VBA vers d'autres applications mais avec un taux de réussite moyen.

J'ai essayé ton code, et j'ai l'impression que mon nom d'application n'est pas bon, je vais donc chercher de ce coté la.

Merci de te pencher sur mon probleme et je te redonne des nouvelles bientot!

Capucin.

CAPUCIN a écrit :

J'ai essayé ton code, et j'ai l'impression que mon nom d'application n'est pas bon, je vais donc chercher de ce coté la.

Fais tourner la macro WinList et regarde les appli visible=VRAI

@Capucin ... as-tu fait tourner WinList (macro incluse dans le fichier que je t'ai envoyé) ? as-tu résolu ton problème ?

Salut! désolé, j'ai mis mon résultat final dans mon sujet Lecture d'un fichier Wave par Excel Vba.

Je voulais te répondre bien sur! Voci ce que mon fils a fait et moi avons fait:

Je n'était pas en mesure d'ouvrir le fichier que tu m'a envoyé car je roule sur Excel 2003. On a essayé de faire rouler l'application avec quelques lignes de codes placer dans Power shell, mais il se passait une chose bizarre: il arrivait que lorsque je cliquais sur une cellules contenant une position en heure minute seconde autre que 0 0 0, c'était la piece a 0 0 0 qui jouait! Alors on a décider d'utiliser VLC média player et ca marche tres bien. Le code est bien sur différent mais tres court. En gros, une ligne dans mon VBA pour appeler VLC a partir du code écrit dans le bloc note et une autre qui attend que l'application soit fermé avant de lancer de nouveau l'application.

Donc a chaque nouveau clic sur une nouvelle cellule contenant une position différente, si VLC est ouvert, il se ferme puis est relancé.

Ca fonctionne tres bien. Regarde les 2 dernieres lignes de code VBA ainsi que le code écrit dans le bloc note.

If Not Application.Intersect(target, Range("F3:F600")) Is Nothing And edit = False Then  'clic dans une cellule de colonne F

     Dim strArray() As String
     Dim hour As String: hour = "0"
     Dim min As String: min = "0"
     Dim sec As String: sec = "0"
     Dim totalSeconds As Integer: totalSeconds = 0

     Range("F3:F600").Interior.ColorIndex = xlColorIndexNone  'on enleve toute trace de couleur dans la colonne
     target.Interior.Color = RGB(255, 128, 64)         'permet de réperer la location active

     strArray = Split(ActiveCell.Value, ":")
     If UBound(strArray) = 1 Then
        min = strArray(0)
        sec = strArray(1)
     Else
        hour = strArray(0)
        min = strArray(1)
        sec = strArray(2)
     End If

     totalSeconds = totalSeconds + 3600 * CInt(hour)
     totalSeconds = totalSeconds + 60 * CInt(min)
     totalSeconds = totalSeconds + sec

     Dim wsh As Object
     Set wsh = VBA.CreateObject("WScript.Shell")
     Dim errorCode As Integer
     Dim waitForReturn As Boolean: waitForReturn = True

     errorCode = wsh.Run("powershell.exe -File ""C:\Users\stop_vlc_process.ps1""", 6, waitForReturn)
     Call Shell("""C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"" ""C:\Users\musique_ piano\multipiste_piano_v1.WAV"" --start-time=" & totalSeconds, 6)

 End If

code dans le bloc note:

Write-Host "Stopping VLC processes..."
Get-Process | Where-Object {$_.ProcessName -eq 'vlc'} | Stop-Process
Write-Host "Done"

Merci pour ce retour; c'est d'un très haut niveau !

Rechercher des sujets similaires à "utilisation sendkeys"