OVH Cloud OVH Cloud

ouvrir calculatrice

3 réponses
Avatar
andre
Bonsoir,
j'ai ecrit une sub qui m'ouvre la calculatrice de windows
Sub ouvrir_calculett()
Dim calc
On Error GoTo badexe
calc = Shell("calc.exe", 1)
On Error GoTo 0
sortie:
Exit Sub
badexe:
MsgBox "Impossible de trouver la calculatrice de windows", vbCritical,
"!!!!!"
Resume sortie
End Sub
pourquoi dit on qu'il n'y a aucun synchro entre l'application executant
l'instruction shell et l'appli executee par shell
pouvez vous m'expliquez cet asynchrone de shell
vaut il mieux utiliser appactivate du genre :
appid = shell("c:\windows\calc.exe", 1)
appactivate appid
par la suite je me servirai de sendkeys pour envoyer des sequences de
touches (je bosse dessus)
merci

--
andre

3 réponses

Avatar
MichDenis
En direct de l'aide de la méthode Sendkeys dans l'aide de VBA d'excel

'--------------------------------------
Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ' Exécute l'application Calculatrice.
AppActivate ReturnValue ' Active l'application Calculatrice.
For I = 1 To 100 ' Configure la boucle de comptage.
SendKeys I & "{+}", True ' Envoie des frappes de touches
Next I ' à l'application Calculatrice pour
' ajouter chaque valeur de I.
SendKeys "=", True ' Fait le total général.
SendKeys "%{F4}", True ' Envoie la combinaison ALT+F4 pour fermer
' l'application Calculatrice.
'--------------------------------------

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

Bonsoir,
j'ai ecrit une sub qui m'ouvre la calculatrice de windows
Sub ouvrir_calculett()
Dim calc
On Error GoTo badexe
calc = Shell("calc.exe", 1)
On Error GoTo 0
sortie:
Exit Sub
badexe:
MsgBox "Impossible de trouver la calculatrice de windows", vbCritical,
"!!!!!"
Resume sortie
End Sub
pourquoi dit on qu'il n'y a aucun synchro entre l'application executant
l'instruction shell et l'appli executee par shell
pouvez vous m'expliquez cet asynchrone de shell
vaut il mieux utiliser appactivate du genre :
appid = shell("c:windowscalc.exe", 1)
appactivate appid
par la suite je me servirai de sendkeys pour envoyer des sequences de
touches (je bosse dessus)
merci

--
andre
Avatar
andre
merci michdenis
je retiens ton code
j'etais en train de l'ecrire un peu differement
mais en fait c'est la 1ere partie de la question qui m'interresse
a+
'--------------------------------------
Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ' Exécute l'application Calculatrice.
AppActivate ReturnValue ' Active l'application Calculatrice.
For I = 1 To 100 ' Configure la boucle de comptage.
SendKeys I & "{+}", True ' Envoie des frappes de touches
Next I ' à l'application Calculatrice pour
' ajouter chaque valeur de I.
SendKeys "=", True ' Fait le total général.
SendKeys "%{F4}", True ' Envoie la combinaison ALT+F4 pour fermer
' l'application Calculatrice.
'--------------------------------------



--
andre

Avatar
MichDenis
Supposons que tu veuilles faire attendre la macro pendant que
l'application calculatrice demeure ouverte... essaie ceci :

Et probablement plus d'informations à cette adresse :
(en supposant qu'elle soit toujours valide)
http://longre.free.fr/pages/api/terminaison.htm

''---------------------------
'utilsation de fonctions API : à copie dans le haut d'un module standard
Declare Function WaitForSingleObject Lib "Kernel32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Declare Function OpenProcess Lib "Kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Public Const INFINITE = &HFFFF
'---------------------------
Function LanceEtAttendLaFin(ByVal CheminComplet As String) As Long
Dim ProcessHandle As Long
Dim ProcessId As Long, ret&

ProcessId = Shell(CheminComplet, vbNormalFocus)
ProcessHandle = OpenProcess(&H1F0000, 0, ProcessId)
LanceEtAttendLaFin = WaitForSingleObject(ProcessHandle, INFINITE)

End Function
'---------------------------
Sub AttendFinCalculatrice()
chemin = "c:Windowssystem32Calc.exe"
If LanceEtAttendLaFin(chemin) = 0 Then MsgBox "coucou"
End Sub
'---------------------------



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

merci michdenis
je retiens ton code
j'etais en train de l'ecrire un peu differement
mais en fait c'est la 1ere partie de la question qui m'interresse
a+
'--------------------------------------
Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ' Exécute l'application Calculatrice.
AppActivate ReturnValue ' Active l'application Calculatrice.
For I = 1 To 100 ' Configure la boucle de comptage.
SendKeys I & "{+}", True ' Envoie des frappes de touches
Next I ' à l'application Calculatrice pour
' ajouter chaque valeur de I.
SendKeys "=", True ' Fait le total général.
SendKeys "%{F4}", True ' Envoie la combinaison ALT+F4 pour fermer
' l'application Calculatrice.
'--------------------------------------



--
andre