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.
"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)
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
"galopin01" <roger.mazurczak@laposte.fr> a écrit dans le message de
news:%23NX8YaNrGHA.4512@TK2MSFTNGP04.phx.gbl...
|| 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)
"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)
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
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
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
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
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
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" <blaise@cacramp.be> a écrit dans le message de news:
44c1046f$0$10458$ba620e4c@news.skynet.be...
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
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
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
"jps" <vaderetrosp@mas> a écrit dans le message de
news:%23MlaMdOrGHA.4512@TK2MSFTNGP04.phx.gbl...
| 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 ;-)
"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
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
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
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
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
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
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
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 ?
"galopin01" <roger.mazurczak@laposte.fr> a écrit dans le message de
news:%23vG0fpOrGHA.3380@TK2MSFTNGP04.phx.gbl...
| 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...
"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 ?
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
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
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
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 !
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...
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 !
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...
"galopin01" <roger.mazurczak@laposte.fr> a écrit dans le message de
news:OnMBz6OrGHA.2052@TK2MSFTNGP02.phx.gbl...
| 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
!
"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 !