Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment capturer un formulaire dans le press papier ?

16 réponses
Avatar
FPinton
Bonjour à tous,

Je cherche à capturer dans le press papier un formulaire afficher à l'écran.
Quand je fais mes essais en appuyant sur les touches shift + Imprime écran,
je capture bien le formulaire qui est affiché car ensuite je peux le coller
dans word pour l'imprimer correctement.

Mon problème c'est que si je mets l'enregistreur de macro en route pour
créer le code de cette action, ça ne fonctionne pas et étant donné que je ne
sais pas comment commencer mon code VBA, je me retrouve dans la panade
encore une fois.

Pouvez vous me dire comment faire pour copier ce formulaire ?

et même peut être comment imprimer le contenu du presspapier sans rien collé
dans Word ?

Merci de votre aide à tous !

6 réponses

1 2
Avatar
Daniel.C
Bonjour.
Une idée comme ça... Pourquoi utiliser un userform et non pas une
feuille sur laquelle tu mets tes contrôles ?
Daniel

Bonjour MichDenis et merci de ta proposition.

Ton code me semble être sensiblement le même que celui de FFO en plus
complet, mais j'ai beau les essayer tout les 2, ils ne fonctionnepas très
bien chez moi.....
En fait quand je décompose l'action, je vois qu'il me crée bien une nouveau
classeur mais qu'il me colle sur la 1ere feuille non pas le formulaire, mais
ce que j'avais auparavant dans le presspapier, donc suivant le cas, un texte
ou une image ou tout autre chose que j'aurrais copier avant de lancer la
macro.
Par contre chose bizar (pour moi) je me retrouve ensuite avec la copie du
formulaire dans le presspapier ce qui fait que si je refait un collé (ctrl+c)
dans la feuille1 du nouveau classeur, j'ai bien mon formulaire qui se
pose...???

Aurais-je raté quelque chose ???

J'ai changé
keybd_event vbKeySnapshot, 0, 0&, 0&
par
keybd_event vbKeySnapshot, 1, 0&, 0&
comme le propose FFO, mais ça ne change rien.

@+


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

Bonjour FPinton,

Une procédure publiée sur ce forum par Michel Perron.

Dans le haut du formulaire : Déclaration des API

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 EmptyClipboard Lib "user32" () As Long

' La procédure d'impression dans l'UserForm:

'------------------------------------------
Private Sub CommandButton1_Click()
Dim BookName As String

Application.CutCopyMode = False
EmptyClipboard
Me.Repaint '* Relâche le bouton avant l'impression
keybd_event vbKeySnapshot, 0, 0&, 0&
Application.ScreenUpdating = False
Workbooks.Add
BookName = ActiveWorkbook.Name
ActiveWindow.Visible = False
Workbooks(BookName).Sheets(1).Paste
With Workbooks(BookName).Sheets(1).PageSetup
.RightFooter = Me.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait '* Vertical
'.Orientation = xlLandscape '* Horizontal
.PaperSize = xlPaperA4
.Zoom = 100 '* Mettre en remarque si impression ajustée
' * Ajuste l'impression (largeur & hauteur)
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
Application.ScreenUpdating = True
Windows(BookName).SelectedSheets.PrintOut Copies:=1
Workbooks(BookName).Close False

End Sub
'------------------------------------------





"FPinton" a écrit dans le message de groupe de discussion
:

Bonjour à tous,

Je cherche à capturer dans le press papier un formulaire afficher à
l'écran.
Quand je fais mes essais en appuyant sur les touches shift + Imprime écran,
je capture bien le formulaire qui est affiché car ensuite je peux le coller
dans word pour l'imprimer correctement.

Mon problème c'est que si je mets l'enregistreur de macro en route pour
créer le code de cette action, ça ne fonctionne pas et étant donné que je
ne
sais pas comment commencer mon code VBA, je me retrouve dans la panade
encore une fois.

Pouvez vous me dire comment faire pour copier ce formulaire ?

et même peut être comment imprimer le contenu du presspapier sans rien
collé
dans Word ?

Merci de votre aide à tous !





Avatar
FPinton
Bonjour,
Oui c'est vrai que ce serait plus simple pour l'impression, mais je me sert
de 9 userform différents qui se remplissent automatiquement avec les données
des différents classeurs qui sont créés ou simplement ouverts par la suite
suivant mes besoins.
Tout fonctionne bien et est automatisé sauf quand j'ai besoin de sortir une
impression pour archivage d'un de ces formulaire ou je suis obligé de faire
ça manuellement si je ne veux pas perdre certaines infos.

@+

"Daniel.C" a écrit dans le message de news:
%
Bonjour.
Une idée comme ça... Pourquoi utiliser un userform et non pas une feuille
sur laquelle tu mets tes contrôles ?
Daniel

Bonjour MichDenis et merci de ta proposition.

Ton code me semble être sensiblement le même que celui de FFO en plus
complet, mais j'ai beau les essayer tout les 2, ils ne fonctionnepas très
bien chez moi.....
En fait quand je décompose l'action, je vois qu'il me crée bien une
nouveau classeur mais qu'il me colle sur la 1ere feuille non pas le
formulaire, mais ce que j'avais auparavant dans le presspapier, donc
suivant le cas, un texte ou une image ou tout autre chose que j'aurrais
copier avant de lancer la macro.
Par contre chose bizar (pour moi) je me retrouve ensuite avec la copie du
formulaire dans le presspapier ce qui fait que si je refait un collé
(ctrl+c) dans la feuille1 du nouveau classeur, j'ai bien mon formulaire
qui se pose...???

Aurais-je raté quelque chose ???

J'ai changé
keybd_event vbKeySnapshot, 0, 0&, 0&
par
keybd_event vbKeySnapshot, 1, 0&, 0&
comme le propose FFO, mais ça ne change rien.

@+


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

Bonjour FPinton,

Une procédure publiée sur ce forum par Michel Perron.

Dans le haut du formulaire : Déclaration des API

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 EmptyClipboard Lib "user32" () As Long

' La procédure d'impression dans l'UserForm:

'------------------------------------------
Private Sub CommandButton1_Click()
Dim BookName As String

Application.CutCopyMode = False
EmptyClipboard
Me.Repaint '* Relâche le bouton avant l'impression
keybd_event vbKeySnapshot, 0, 0&, 0&
Application.ScreenUpdating = False
Workbooks.Add
BookName = ActiveWorkbook.Name
ActiveWindow.Visible = False
Workbooks(BookName).Sheets(1).Paste
With Workbooks(BookName).Sheets(1).PageSetup
.RightFooter = Me.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait '* Vertical
'.Orientation = xlLandscape '* Horizontal
.PaperSize = xlPaperA4
.Zoom = 100 '* Mettre en remarque si impression ajustée
' * Ajuste l'impression (largeur & hauteur)
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
Application.ScreenUpdating = True
Windows(BookName).SelectedSheets.PrintOut Copies:=1
Workbooks(BookName).Close False

End Sub
'------------------------------------------





"FPinton" a écrit dans le message de groupe de
discussion :

Bonjour à tous,

Je cherche à capturer dans le press papier un formulaire afficher à
l'écran.
Quand je fais mes essais en appuyant sur les touches shift + Imprime
écran,
je capture bien le formulaire qui est affiché car ensuite je peux le
coller
dans word pour l'imprimer correctement.

Mon problème c'est que si je mets l'enregistreur de macro en route pour
créer le code de cette action, ça ne fonctionne pas et étant donné que
je ne
sais pas comment commencer mon code VBA, je me retrouve dans la panade
encore une fois.

Pouvez vous me dire comment faire pour copier ce formulaire ?

et même peut être comment imprimer le contenu du presspapier sans rien
collé
dans Word ?

Merci de votre aide à tous !









Avatar
MichDenis
Voici un fichier exemple : http://cjoint.com/?hlvuYZTUuF

Si la procédure génère une erreur, note la ligne de code
qui cause problème + le message d'erreur.



"FPinton" a écrit dans le message de groupe de discussion :

Bonjour MichDenis et merci de ta proposition.

Ton code me semble être sensiblement le même que celui de FFO en plus
complet, mais j'ai beau les essayer tout les 2, ils ne fonctionnepas très
bien chez moi.....
En fait quand je décompose l'action, je vois qu'il me crée bien une nouveau
classeur mais qu'il me colle sur la 1ere feuille non pas le formulaire, mais
ce que j'avais auparavant dans le presspapier, donc suivant le cas, un texte
ou une image ou tout autre chose que j'aurrais copier avant de lancer la
macro.
Par contre chose bizar (pour moi) je me retrouve ensuite avec la copie du
formulaire dans le presspapier ce qui fait que si je refait un collé
(ctrl+c) dans la feuille1 du nouveau classeur, j'ai bien mon formulaire qui
se pose...???

Aurais-je raté quelque chose ???

J'ai changé
keybd_event vbKeySnapshot, 0, 0&, 0&
par
keybd_event vbKeySnapshot, 1, 0&, 0&
comme le propose FFO, mais ça ne change rien.

@+


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

Bonjour FPinton,

Une procédure publiée sur ce forum par Michel Perron.

Dans le haut du formulaire : Déclaration des API

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 EmptyClipboard Lib "user32" () As Long

' La procédure d'impression dans l'UserForm:

'------------------------------------------
Private Sub CommandButton1_Click()
Dim BookName As String

Application.CutCopyMode = False
EmptyClipboard
Me.Repaint '* Relâche le bouton avant l'impression
keybd_event vbKeySnapshot, 0, 0&, 0&
Application.ScreenUpdating = False
Workbooks.Add
BookName = ActiveWorkbook.Name
ActiveWindow.Visible = False
Workbooks(BookName).Sheets(1).Paste
With Workbooks(BookName).Sheets(1).PageSetup
.RightFooter = Me.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait '* Vertical
'.Orientation = xlLandscape '* Horizontal
.PaperSize = xlPaperA4
.Zoom = 100 '* Mettre en remarque si impression ajustée
' * Ajuste l'impression (largeur & hauteur)
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
Application.ScreenUpdating = True
Windows(BookName).SelectedSheets.PrintOut Copies:=1
Workbooks(BookName).Close False

End Sub
'------------------------------------------





"FPinton" a écrit dans le message de groupe de
discussion :

Bonjour à tous,

Je cherche à capturer dans le press papier un formulaire afficher à
l'écran.
Quand je fais mes essais en appuyant sur les touches shift + Imprime
écran,
je capture bien le formulaire qui est affiché car ensuite je peux le
coller
dans word pour l'imprimer correctement.

Mon problème c'est que si je mets l'enregistreur de macro en route pour
créer le code de cette action, ça ne fonctionne pas et étant donné que je
ne
sais pas comment commencer mon code VBA, je me retrouve dans la panade
encore une fois.

Pouvez vous me dire comment faire pour copier ce formulaire ?

et même peut être comment imprimer le contenu du presspapier sans rien
collé
dans Word ?

Merci de votre aide à tous !



Avatar
FPinton
Je viens de tester l'exemple que tu me propose et je ne rencontre pas
d'erreur. Le code fonctionne sans besoin de débaugage cependant il fait ce
toujours ce que j'ai expliqué à savoir qu'il ne colle pas sur le nouveau
classeur la capture du formulaire.
Voici ce que j'ai fait pour le tester:
J'ai tout d'abord ouvert Word et inscrit le mot "Test" que j'ai copié pour
avoir quelque chose dans le presspapier.
ensuite j'ai ouvert le fichier excel que tu m'as proposé,
J'ai cliqué sur le bouton "Créer un formulaire"
Quand le formulaire s'est affiché à l'écran,
J'ai cliqué sur "Imprimer-formulaire"
l'imprimante s'est mise en route et m'a imprimé :
"Test" au milieu de la page
et en bas de page la ligne "UserForm1 le 12/07/2009 Page 1/1"
Je suis ensuite revenu sur Word pour faire un clic droit "Collé" et voir ce
que j'avais désormais dans le presspapier. Cette fois le formulaire qui
avait été créé dans Excel s'est bien collé sur la page.

De plus pour pouvoir capturer ce formulaire,
J''ai remplacé le 1er 0 par un 1 dans la ligne suivante :
keybd_event vbKeySnapshot, 0, 0&, 0& (cette commande me capturait l'écran
complet)
ce qui a fait
keybd_event vbKeySnapshot, 1, 0&, 0& (avec ce paramètre modifié, ça capture
que le formulaire)

J'espère avoir été clair et que ces quelques explications te permettront de
trouver le problème.

Bon Dimanche !

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

Voici un fichier exemple : http://cjoint.com/?hlvuYZTUuF

Si la procédure génère une erreur, note la ligne de code
qui cause problème + le message d'erreur.



"FPinton" a écrit dans le message de groupe de
discussion :

Bonjour MichDenis et merci de ta proposition.

Ton code me semble être sensiblement le même que celui de FFO en plus
complet, mais j'ai beau les essayer tout les 2, ils ne fonctionnepas très
bien chez moi.....
En fait quand je décompose l'action, je vois qu'il me crée bien une
nouveau
classeur mais qu'il me colle sur la 1ere feuille non pas le formulaire,
mais
ce que j'avais auparavant dans le presspapier, donc suivant le cas, un
texte
ou une image ou tout autre chose que j'aurrais copier avant de lancer la
macro.
Par contre chose bizar (pour moi) je me retrouve ensuite avec la copie du
formulaire dans le presspapier ce qui fait que si je refait un collé
(ctrl+c) dans la feuille1 du nouveau classeur, j'ai bien mon formulaire
qui
se pose...???

Aurais-je raté quelque chose ???

J'ai changé
keybd_event vbKeySnapshot, 0, 0&, 0&
par
keybd_event vbKeySnapshot, 1, 0&, 0&
comme le propose FFO, mais ça ne change rien.

@+


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

Bonjour FPinton,

Une procédure publiée sur ce forum par Michel Perron.

Dans le haut du formulaire : Déclaration des API

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 EmptyClipboard Lib "user32" () As Long

' La procédure d'impression dans l'UserForm:

'------------------------------------------
Private Sub CommandButton1_Click()
Dim BookName As String

Application.CutCopyMode = False
EmptyClipboard
Me.Repaint '* Relâche le bouton avant l'impression
keybd_event vbKeySnapshot, 0, 0&, 0&
Application.ScreenUpdating = False
Workbooks.Add
BookName = ActiveWorkbook.Name
ActiveWindow.Visible = False
Workbooks(BookName).Sheets(1).Paste
With Workbooks(BookName).Sheets(1).PageSetup
.RightFooter = Me.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait '* Vertical
'.Orientation = xlLandscape '* Horizontal
.PaperSize = xlPaperA4
.Zoom = 100 '* Mettre en remarque si impression ajustée
' * Ajuste l'impression (largeur & hauteur)
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
Application.ScreenUpdating = True
Windows(BookName).SelectedSheets.PrintOut Copies:=1
Workbooks(BookName).Close False

End Sub
'------------------------------------------





"FPinton" a écrit dans le message de groupe de
discussion :

Bonjour à tous,

Je cherche à capturer dans le press papier un formulaire afficher à
l'écran.
Quand je fais mes essais en appuyant sur les touches shift + Imprime
écran,
je capture bien le formulaire qui est affiché car ensuite je peux le
coller
dans word pour l'imprimer correctement.

Mon problème c'est que si je mets l'enregistreur de macro en route pour
créer le code de cette action, ça ne fonctionne pas et étant donné que je
ne
sais pas comment commencer mon code VBA, je me retrouve dans la panade
encore une fois.

Pouvez vous me dire comment faire pour copier ce formulaire ?

et même peut être comment imprimer le contenu du presspapier sans rien
collé
dans Word ?

Merci de votre aide à tous !






Avatar
MichDenis
Voici une version légèrement modifiée du fichier :

http://cjoint.com/?hmoFxuVvfp

Dans le module standard du classeur, il y a ceci comme code :
J'avoue que je ne comprends pas très bien ce que vient faire
l'application Word dans le fait de vouloir imprimer un formulaire.

Dans mes tests, le plus loin que je me suis rendu est la visualisation
de l'écran "aperçu avant impression".
Dans la procédure "Imprimer", tu devras modifier la commande
Windows(BookName).SelectedSheets.PrintPreview 'Copies:=1
Pour
Windows(BookName).SelectedSheets.PrintOut Copies:=1

'-----------------------------------------
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
'-----------------------------------------
Sub Afficher_Formulaire()
UserForm1.Show 0
End Sub
'-----------------------------------------
Sub Vider_presse_Papier()
OpenClipboard 0
EmptyClipboard
CloseClipboard
End Sub
'-----------------------------------------
' La procédure d'impression dans l'UserForm:
Sub Imprimer()
Dim BookName As String
Vider_presse_Papier
UserForm1.Repaint '* Relâche le bouton avant l'impression
keybd_event vbKeySnapshot, 1, 0&, 0&
Application.ScreenUpdating = False
Workbooks.Add
BookName = ActiveWorkbook.Name
ActiveWindow.Visible = False
Application.Wait (Now + TimeValue("0:00:01"))
Workbooks(BookName).Sheets(1).Paste
With Workbooks(BookName).Sheets(1).PageSetup
.RightFooter = UserForm1.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait '* Vertical
'.Orientation = xlLandscape '* Horizontal
.PaperSize = xlPaperA4
.Zoom = 100 '* Mettre en remarque si impression ajustée
' * Ajuste l'impression (largeur & hauteur)
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
Application.ScreenUpdating = True
Windows(BookName).SelectedSheets.PrintPreview 'Copies:=1
Workbooks(BookName).Close False
End Sub
'-----------------------------------------







"FPinton" a écrit dans le message de groupe de discussion :

Je viens de tester l'exemple que tu me propose et je ne rencontre pas
d'erreur. Le code fonctionne sans besoin de débaugage cependant il fait ce
toujours ce que j'ai expliqué à savoir qu'il ne colle pas sur le nouveau
classeur la capture du formulaire.
Voici ce que j'ai fait pour le tester:
J'ai tout d'abord ouvert Word et inscrit le mot "Test" que j'ai copié pour
avoir quelque chose dans le presspapier.
ensuite j'ai ouvert le fichier excel que tu m'as proposé,
J'ai cliqué sur le bouton "Créer un formulaire"
Quand le formulaire s'est affiché à l'écran,
J'ai cliqué sur "Imprimer-formulaire"
l'imprimante s'est mise en route et m'a imprimé :
"Test" au milieu de la page
et en bas de page la ligne "UserForm1 le 12/07/2009 Page 1/1"
Je suis ensuite revenu sur Word pour faire un clic droit "Collé" et voir ce
que j'avais désormais dans le presspapier. Cette fois le formulaire qui
avait été créé dans Excel s'est bien collé sur la page.

De plus pour pouvoir capturer ce formulaire,
J''ai remplacé le 1er 0 par un 1 dans la ligne suivante :
keybd_event vbKeySnapshot, 0, 0&, 0& (cette commande me capturait l'écran
complet)
ce qui a fait
keybd_event vbKeySnapshot, 1, 0&, 0& (avec ce paramètre modifié, ça capture
que le formulaire)

J'espère avoir été clair et que ces quelques explications te permettront de
trouver le problème.

Bon Dimanche !

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

Voici un fichier exemple : http://cjoint.com/?hlvuYZTUuF

Si la procédure génère une erreur, note la ligne de code
qui cause problème + le message d'erreur.



"FPinton" a écrit dans le message de groupe de
discussion :

Bonjour MichDenis et merci de ta proposition.

Ton code me semble être sensiblement le même que celui de FFO en plus
complet, mais j'ai beau les essayer tout les 2, ils ne fonctionnepas très
bien chez moi.....
En fait quand je décompose l'action, je vois qu'il me crée bien une
nouveau
classeur mais qu'il me colle sur la 1ere feuille non pas le formulaire,
mais
ce que j'avais auparavant dans le presspapier, donc suivant le cas, un
texte
ou une image ou tout autre chose que j'aurrais copier avant de lancer la
macro.
Par contre chose bizar (pour moi) je me retrouve ensuite avec la copie du
formulaire dans le presspapier ce qui fait que si je refait un collé
(ctrl+c) dans la feuille1 du nouveau classeur, j'ai bien mon formulaire
qui
se pose...???

Aurais-je raté quelque chose ???

J'ai changé
keybd_event vbKeySnapshot, 0, 0&, 0&
par
keybd_event vbKeySnapshot, 1, 0&, 0&
comme le propose FFO, mais ça ne change rien.

@+


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

Bonjour FPinton,

Une procédure publiée sur ce forum par Michel Perron.

Dans le haut du formulaire : Déclaration des API

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 EmptyClipboard Lib "user32" () As Long

' La procédure d'impression dans l'UserForm:

'------------------------------------------
Private Sub CommandButton1_Click()
Dim BookName As String

Application.CutCopyMode = False
EmptyClipboard
Me.Repaint '* Relâche le bouton avant l'impression
keybd_event vbKeySnapshot, 0, 0&, 0&
Application.ScreenUpdating = False
Workbooks.Add
BookName = ActiveWorkbook.Name
ActiveWindow.Visible = False
Workbooks(BookName).Sheets(1).Paste
With Workbooks(BookName).Sheets(1).PageSetup
.RightFooter = Me.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait '* Vertical
'.Orientation = xlLandscape '* Horizontal
.PaperSize = xlPaperA4
.Zoom = 100 '* Mettre en remarque si impression ajustée
' * Ajuste l'impression (largeur & hauteur)
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
Application.ScreenUpdating = True
Windows(BookName).SelectedSheets.PrintOut Copies:=1
Workbooks(BookName).Close False

End Sub
'------------------------------------------





"FPinton" a écrit dans le message de groupe de
discussion :

Bonjour à tous,

Je cherche à capturer dans le press papier un formulaire afficher à
l'écran.
Quand je fais mes essais en appuyant sur les touches shift + Imprime
écran,
je capture bien le formulaire qui est affiché car ensuite je peux le
coller
dans word pour l'imprimer correctement.

Mon problème c'est que si je mets l'enregistreur de macro en route pour
créer le code de cette action, ça ne fonctionne pas et étant donné que je
ne
sais pas comment commencer mon code VBA, je me retrouve dans la panade
encore une fois.

Pouvez vous me dire comment faire pour copier ce formulaire ?

et même peut être comment imprimer le contenu du presspapier sans rien
collé
dans Word ?

Merci de votre aide à tous !






Avatar
FPinton
Cette fois tout est OK, l'impression se fait sans soucis. Tout est
maintenant automatisé grace à ton code.
Encore merci pour ton aide.

Ps : Word ne me servais à rien d'autre qu'à vérifier ce que j'avais dans le
presse-papier.

Bonne journée à toi !


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

Voici une version légèrement modifiée du fichier :

http://cjoint.com/?hmoFxuVvfp

Dans le module standard du classeur, il y a ceci comme code :
J'avoue que je ne comprends pas très bien ce que vient faire
l'application Word dans le fait de vouloir imprimer un formulaire.

Dans mes tests, le plus loin que je me suis rendu est la visualisation
de l'écran "aperçu avant impression".
Dans la procédure "Imprimer", tu devras modifier la commande
Windows(BookName).SelectedSheets.PrintPreview 'Copies:=1
Pour
Windows(BookName).SelectedSheets.PrintOut Copies:=1

'-----------------------------------------
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
'-----------------------------------------
Sub Afficher_Formulaire()
UserForm1.Show 0
End Sub
'-----------------------------------------
Sub Vider_presse_Papier()
OpenClipboard 0
EmptyClipboard
CloseClipboard
End Sub
'-----------------------------------------
' La procédure d'impression dans l'UserForm:
Sub Imprimer()
Dim BookName As String
Vider_presse_Papier
UserForm1.Repaint '* Relâche le bouton avant l'impression
keybd_event vbKeySnapshot, 1, 0&, 0&
Application.ScreenUpdating = False
Workbooks.Add
BookName = ActiveWorkbook.Name
ActiveWindow.Visible = False
Application.Wait (Now + TimeValue("0:00:01"))
Workbooks(BookName).Sheets(1).Paste
With Workbooks(BookName).Sheets(1).PageSetup
.RightFooter = UserForm1.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait '* Vertical
'.Orientation = xlLandscape '* Horizontal
.PaperSize = xlPaperA4
.Zoom = 100 '* Mettre en remarque si impression ajustée
' * Ajuste l'impression (largeur & hauteur)
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
Application.ScreenUpdating = True
Windows(BookName).SelectedSheets.PrintPreview 'Copies:=1
Workbooks(BookName).Close False
End Sub
'-----------------------------------------







"FPinton" a écrit dans le message de groupe de
discussion :

Je viens de tester l'exemple que tu me propose et je ne rencontre pas
d'erreur. Le code fonctionne sans besoin de débaugage cependant il fait ce
toujours ce que j'ai expliqué à savoir qu'il ne colle pas sur le nouveau
classeur la capture du formulaire.
Voici ce que j'ai fait pour le tester:
J'ai tout d'abord ouvert Word et inscrit le mot "Test" que j'ai copié pour
avoir quelque chose dans le presspapier.
ensuite j'ai ouvert le fichier excel que tu m'as proposé,
J'ai cliqué sur le bouton "Créer un formulaire"
Quand le formulaire s'est affiché à l'écran,
J'ai cliqué sur "Imprimer-formulaire"
l'imprimante s'est mise en route et m'a imprimé :
"Test" au milieu de la page
et en bas de page la ligne "UserForm1 le 12/07/2009 Page 1/1"
Je suis ensuite revenu sur Word pour faire un clic droit "Collé" et voir
ce
que j'avais désormais dans le presspapier. Cette fois le formulaire qui
avait été créé dans Excel s'est bien collé sur la page.

De plus pour pouvoir capturer ce formulaire,
J''ai remplacé le 1er 0 par un 1 dans la ligne suivante :
keybd_event vbKeySnapshot, 0, 0&, 0& (cette commande me capturait l'écran
complet)
ce qui a fait
keybd_event vbKeySnapshot, 1, 0&, 0& (avec ce paramètre modifié, ça
capture
que le formulaire)

J'espère avoir été clair et que ces quelques explications te permettront
de
trouver le problème.

Bon Dimanche !

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

Voici un fichier exemple : http://cjoint.com/?hlvuYZTUuF

Si la procédure génère une erreur, note la ligne de code
qui cause problème + le message d'erreur.



"FPinton" a écrit dans le message de groupe de
discussion :

Bonjour MichDenis et merci de ta proposition.

Ton code me semble être sensiblement le même que celui de FFO en plus
complet, mais j'ai beau les essayer tout les 2, ils ne fonctionnepas très
bien chez moi.....
En fait quand je décompose l'action, je vois qu'il me crée bien une
nouveau
classeur mais qu'il me colle sur la 1ere feuille non pas le formulaire,
mais
ce que j'avais auparavant dans le presspapier, donc suivant le cas, un
texte
ou une image ou tout autre chose que j'aurrais copier avant de lancer la
macro.
Par contre chose bizar (pour moi) je me retrouve ensuite avec la copie du
formulaire dans le presspapier ce qui fait que si je refait un collé
(ctrl+c) dans la feuille1 du nouveau classeur, j'ai bien mon formulaire
qui
se pose...???

Aurais-je raté quelque chose ???

J'ai changé
keybd_event vbKeySnapshot, 0, 0&, 0&
par
keybd_event vbKeySnapshot, 1, 0&, 0&
comme le propose FFO, mais ça ne change rien.

@+


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

Bonjour FPinton,

Une procédure publiée sur ce forum par Michel Perron.

Dans le haut du formulaire : Déclaration des API

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 EmptyClipboard Lib "user32" () As Long

' La procédure d'impression dans l'UserForm:

'------------------------------------------
Private Sub CommandButton1_Click()
Dim BookName As String

Application.CutCopyMode = False
EmptyClipboard
Me.Repaint '* Relâche le bouton avant l'impression
keybd_event vbKeySnapshot, 0, 0&, 0&
Application.ScreenUpdating = False
Workbooks.Add
BookName = ActiveWorkbook.Name
ActiveWindow.Visible = False
Workbooks(BookName).Sheets(1).Paste
With Workbooks(BookName).Sheets(1).PageSetup
.RightFooter = Me.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait '* Vertical
'.Orientation = xlLandscape '* Horizontal
.PaperSize = xlPaperA4
.Zoom = 100 '* Mettre en remarque si impression ajustée
' * Ajuste l'impression (largeur & hauteur)
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
Application.ScreenUpdating = True
Windows(BookName).SelectedSheets.PrintOut Copies:=1
Workbooks(BookName).Close False

End Sub
'------------------------------------------





"FPinton" a écrit dans le message de groupe de
discussion :

Bonjour à tous,

Je cherche à capturer dans le press papier un formulaire afficher à
l'écran.
Quand je fais mes essais en appuyant sur les touches shift + Imprime
écran,
je capture bien le formulaire qui est affiché car ensuite je peux le
coller
dans word pour l'imprimer correctement.

Mon problème c'est que si je mets l'enregistreur de macro en route pour
créer le code de cette action, ça ne fonctionne pas et étant donné que
je
ne
sais pas comment commencer mon code VBA, je me retrouve dans la panade
encore une fois.

Pouvez vous me dire comment faire pour copier ce formulaire ?

et même peut être comment imprimer le contenu du presspapier sans rien
collé
dans Word ?

Merci de votre aide à tous !









1 2