OVH Cloud OVH Cloud

sendkeys

11 réponses
Avatar
galopin01
bonjour,
dans une petite appli j'aurais bien besoin d'utiliser cette macro :
Sub Collage()
SendKeys "{PRTSC}"
Range("A10").Select
ActiveSheet.Paste
With Selection.ShapeRange.PictureFormat
.CropTop = 70.5
.CropLeft = 6.75
.CropBottom = 434.2
.CropRight = 692.91
End With
Range("A1").Select
End Sub

Bien sur ça ne marche pas...
Comment contourner cette instruction qui plante :
SendKeys "{PRTSC}"
... sans obliger l'utilisateur à chercher la bonne touche.

Merci

10 réponses

1 2
Avatar
blaise cacramp
"galopin01" a écrit dans le message de
news:%
|| Comment contourner cette instruction qui plante :
| SendKeys "{PRTSC}"
| ... sans obliger l'utilisateur à chercher la bonne touche.
|

Non, cela ne fonctionne pas et c'est même indiqué dans l'aide !

J'ai eu le blème il y a quelques années et je me souvenais d'avoir dû
utiliser une api. Voilà ce que Google m'a trouvé

To capture the screen

Option Explicit

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Const VK_SNAPSHOT = &H2C

Sub PrintScreen()
keybd_event VK_SNAPSHOT, 1, 0, 0
End Sub

To capture the active window

Option Explicit

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12

Sub AltPrintScreen()
keybd_event VK_MENU, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
End Sub
Avatar
blaise cacramp
Et ca fonctionne !


Option Explicit

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Const VK_SNAPSHOT = &H2C

Sub PrintScreen()
keybd_event VK_SNAPSHOT, 1, 0, 0
End Sub


Sub Collage()
'//SendKeys "{PRTSC}"
PrintScreen
Range("A10").Select
ActiveSheet.Paste
With Selection.ShapeRange.PictureFormat
.CropTop = 70.5
.CropLeft = 6.75
.CropBottom = 434.2
.CropRight = 692.91
End With
Range("A1").Select
End Sub
Avatar
jps
bonjour blaise
peux-tu nous dire pourquoi ce "// devant Sendkeys?
cette ligne est en remarque ou bien...comme on dit en suisse?
jps

"blaise cacramp" a écrit dans le message de news:
44c1046f$0$10458$
Et ca fonctionne !


Option Explicit

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Const VK_SNAPSHOT = &H2C

Sub PrintScreen()
keybd_event VK_SNAPSHOT, 1, 0, 0
End Sub


Sub Collage()
'//SendKeys "{PRTSC}"
PrintScreen
Range("A10").Select
ActiveSheet.Paste
With Selection.ShapeRange.PictureFormat
.CropTop = 70.5
.CropLeft = 6.75
.CropBottom = 434.2
.CropRight = 692.91
End With
Range("A1").Select
End Sub





Avatar
blaise cacramp
"jps" a écrit dans le message de
news:%
| bonjour blaise
| peux-tu nous dire pourquoi ce "// devant Sendkeys?
| cette ligne est en remarque ou bien...comme on dit en suisse?
| jps
|

un réflexe php y a des jours où on mélange, surtout quand il fait
anormalement chaud ;-)

c'est bien une remarque.


Et bonne fête à mes concitoyens belches
Avatar
galopin01
On est sur la bonne piste...
Mais curieusement ça me produit 1 ou 2 erreurs d'éxécution avant de
fonctionner :
Je pense qu'il faut d'abord vider le "presse papier" avant de lancer la
commande sinon il colle n'importe quoi semble-t-il dans l'ordre ou il l'a eu
en mémoire.
As-tu une botte secrète pour vider le presse papier avant ?
Merci
Avatar
galopin01
On est sur la bonne piste...
Mais curieusement ça me produit 1 ou 2 erreurs d'éxécution avant de
fonctionner :
Je pense qu'il faut d'abord vider le "presse papier" avant de lancer la
commande sinon il colle n'importe quoi semble-t-il dans l'ordre ou il l'a eu
en mémoire.
As-tu une botte secrète pour vider le presse papier avant ?
Merci
Avatar
blaise cacramp
"galopin01" a écrit dans le message de
news:%
| On est sur la bonne piste...
| Mais curieusement ça me produit 1 ou 2 erreurs d'éxécution avant de
| fonctionner :
| Je pense qu'il faut d'abord vider le "presse papier" avant de lancer la
| commande sinon il colle n'importe quoi semble-t-il dans l'ordre ou il l'a
eu
| en mémoire.
| As-tu une botte secrète pour vider le presse papier avant ?
| Merci
|
|

ho ho... j'ai aussi eu une erreur à la première utilisation. Faut peut-être
introduire un délai entre le copier / coller...

qui a une idée ?
Avatar
galopin01
Décidement ça ne veut rien savoir. J'ai trouvé un truc pour vider le presse
papier, je pense que ça fonctionne bien
mais pour la suite je butte sur le ActiveSheet.Paste.
Voilà ou nous en sommes : (Excel 2002)


Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long

Private Const VK_SNAPSHOT = &H2C

Sub VidePP()
OpenClipboard 0
EmptyClipboard
CloseClipboard
End Sub

Sub PrintScreen()
keybd_event VK_SNAPSHOT, 1, 0, 0
End Sub


Sub Collage()
VidePP
PrintScreen
Range("A10").Select
ActiveSheet.Paste
With Selection.ShapeRange.PictureFormat
.CropTop = 70.5
.CropLeft = 6.75
.CropBottom = 434.2
.CropRight = 692.91
End With
Range("A1").Select
End Sub
Avatar
galopin01
Oui j'avais déjà derrière la tête cette idée de synchro...
J'ai rajouté une instruction wait et ça marche impec :

Sub Collage()
VidePP
PrintScreen
Application.Wait (Now + TimeValue("0:00:02"))
Range("A10").Select
ActiveSheet.Paste...

Merci !
Avatar
blaise cacramp
"galopin01" a écrit dans le message de
news:
| Oui j'avais déjà derrière la tête cette idée de synchro...
| J'ai rajouté une instruction wait et ça marche impec :
|
| Sub Collage()
| VidePP
| PrintScreen
| Application.Wait (Now + TimeValue("0:00:02"))
| Range("A10").Select
| ActiveSheet.Paste...
|
| Merci !
|
|

2 secondes ? mais c'est énorme. J'étais en train d'essayer avec 1/2 seconde
!

Enfin si cela ne te gène pas...
1 2