OVH Cloud OVH Cloud

Imprimer grille

14 réponses
Avatar
LeSteph
Bonsoir à tous,
j'ai déja posté un message dans ce sens je voudrais pouvoir imprimer la
grille,
Isabelle a voulu m'aider mais cela ne m'avance guère,
j'ai bien téléchargé le JWalk Enhanced Data Form qui est
très bien mais je n'ai rien trouvé dedans pour l'imprimer.
Il y a probablement un truc que j'ai loupé.
J'ai essayé d'aller voir dans le code mais il faut payer ce qui est
contraire à ma religion.
Et du moment que l'auteur l'a souhaité je ne tenterais pas de le déplomber.
Mais en vérité nombreux , je le vois bien sur ce forum, cherchent à faire
des UF perso
qui bien souvent sont gros consommateurs de mémoire, alors que
celui déjà prévu dans excel est très bien, sauf qu'on ne peut pas
l'imprimer.
Ce serait tellement pratique ...

:-!?

LeSteph

10 réponses

1 2
Avatar
LeSteph
oublié un détail très important.
Merci d'avance.
"LeSteph" a écrit dans le message de
news:40d9d714$0$30720$
Bonsoir à tous,
j'ai déja posté un message dans ce sens je voudrais pouvoir imprimer la
grille,
Isabelle a voulu m'aider mais cela ne m'avance guère,
j'ai bien téléchargé le JWalk Enhanced Data Form qui est
très bien mais je n'ai rien trouvé dedans pour l'imprimer.
Il y a probablement un truc que j'ai loupé.
J'ai essayé d'aller voir dans le code mais il faut payer ce qui est
contraire à ma religion.
Et du moment que l'auteur l'a souhaité je ne tenterais pas de le
déplomber.

Mais en vérité nombreux , je le vois bien sur ce forum, cherchent à faire
des UF perso
qui bien souvent sont gros consommateurs de mémoire, alors que
celui déjà prévu dans excel est très bien, sauf qu'on ne peut pas
l'imprimer.
Ce serait tellement pratique ...

:-!?

LeSteph




Avatar
Alain CROS
Bonjour.

Si j'ai bien compris, tu cherche a imprimer la grille accessible par Données Grille... ou Formulaire... sur XL2002.

Le code suivant rajoute un bouton Imprimer à cette grille.
Lorsque l'on clique sur ce bouton, l'image de la grille est copiée dans le presse papier,
une nouvelle instance d'XL est lancée, l'image est collée sur la feuille active puis cette feuille est imprimée.

Attention, il faut manier ça avec prudence car un hook est actif en permanence sur la feuille contenant les données de la grille.
Il faudra toujours activer une autre feuille avant de quitter ou adapter dans le Workbook_BeforeClose.

Dans le module de la feuille :

Private Sub Worksheet_Activate()
MiseEnPlace
End Sub

Private Sub Worksheet_Deactivate()
Arret
End Sub

Dans un module standard :

Private Declare Function GetCurrentThreadId& Lib "kernel32" ()

Private Declare Function SetWindowsHookEx& Lib "user32" Alias "SetWindowsHookExA" _
(ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&)

Private Declare Function GetWindowText& Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd&, ByVal lpString$, ByVal cch&)

Private Declare Function UnhookWindowsHookEx& Lib "user32" _
(ByVal hHook&)

Private Declare Function CreateWindowEx& Lib "user32" Alias "CreateWindowExA" _
(ByVal dwExStyle&, ByVal lpClassName$, ByVal lpWindowName$, ByVal dwStyle&, _
ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal hWndParent&, _
ByVal hMenu&, ByVal hInstance&, lpParam As Any)

Private Declare Function GetClientRect& Lib "user32" _
(ByVal hwnd&, lpRect As RECT)

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function SetWindowText& Lib "user32" Alias "SetWindowTextA" _
(ByVal hwnd&, ByVal lpString$)

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

Private Declare Function EmptyClipboard& Lib "user32" ()

Private lgHook&, PbHwnd&

Sub MiseEnPlace()
LeHook True
End Sub

Sub Arret()
LeHook
End Sub

Sub LeHook(Optional cache As Boolean)
Const WH_CBT& = &H5
If cache Then
#If VBA6 Then
lgHook = SetWindowsHookEx(WH_CBT, AddressOf WinHook, _
0&, GetCurrentThreadId)
#Else
lgHook = SetWindowsHookEx(WH_CBT, AddrOf("WinHook"), _
0&, GetCurrentThreadId)
#End If
Else
UnhookWindowsHookEx lgHook
End If
End Sub'AC

Private Function WinHook&(ByVal lMsg&, ByVal wParam&, ByRef lParam&)
Const HCBT_ACTIVATE& = &H5, HCBT_SETFOCUS& = 9&
Const WS_CHILD& = &H40000000, WS_VISIBLE& = &H10000000
Dim MYSTR$, LeNom$, Taille&, Rtc As RECT
If lMsg = HCBT_SETFOCUS Then
If wParam = PbHwnd Then
EmptyClipboard
keybd_event vbKeySnapshot, 0&, 0&, 0&
LeHook
Dim Xlapp As New Excel.Application
With Xlapp
.Workbooks.Add
.ActiveSheet.Paste
.ActiveSheet.PrintOut
.ActiveWorkbook.Close False
End With
Set Xlapp = Nothing
LeHook True
Exit Function
End If
End If
If lMsg = HCBT_ACTIVATE Then
LeNom = ActiveSheet.Name
Taille = Len(LeNom) + 1&
MYSTR = Space$(Taille)
MYSTR = Left$(MYSTR, GetWindowText(wParam, MYSTR, Taille))
If MYSTR = LeNom Then
GetClientRect wParam, Rtc
With Rtc
PbHwnd = CreateWindowEx(0&, "Button", "", WS_CHILD Or WS_VISIBLE, _
.Right - 100&, .Bottom - 30&, 80&, 20&, wParam, 0&, 0&, 0&)
SetWindowText PbHwnd, "Imprimer"
End With
End If
End If
End Function'AC

Alain CROS

"LeSteph" a écrit dans le message de news: 40d9f3fc$0$30732$
oublié un détail très important.
Merci d'avance.


Avatar
LeSteph
Bonsoir Alain ,

Tu m'avais déjà bien aidé la dernière fois avec le module de classe, mais
là je suis comblé.
Je comprends que je n'y arrivais pas, ce n'étais pas vraiment simple, tu
manipules tout cela
comme si tu étais tombé dedans étant petit . Chapeau bas Monsieur Alain CROS
tu es un vrai pro.
Je m'en vais l'essayer et je te remercie vraiment. En plus, cela va me
faire faire des progrès
énormes si j'arrive à tout comprendre
Encore merci, mille fois.

:-)

LeSteph
"Alain CROS" a écrit dans le message de
news:%
Bonjour.

Si j'ai bien compris, tu cherche a imprimer la grille accessible par
Données Grille... ou Formulaire... sur XL2002.


Le code suivant rajoute un bouton Imprimer à cette grille.
Lorsque l'on clique sur ce bouton, l'image de la grille est copiée dans le
presse papier,

une nouvelle instance d'XL est lancée, l'image est collée sur la feuille
active puis cette feuille est imprimée.


Attention, il faut manier ça avec prudence car un hook est actif en
permanence sur la feuille contenant les données de la grille.

Il faudra toujours activer une autre feuille avant de quitter ou adapter
dans le Workbook_BeforeClose.


Dans le module de la feuille :

Private Sub Worksheet_Activate()
MiseEnPlace
End Sub

Private Sub Worksheet_Deactivate()
Arret
End Sub

Dans un module standard :

Private Declare Function GetCurrentThreadId& Lib "kernel32" ()

Private Declare Function SetWindowsHookEx& Lib "user32" Alias
"SetWindowsHookExA" _

(ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&)

Private Declare Function GetWindowText& Lib "user32" Alias
"GetWindowTextA" _

(ByVal hwnd&, ByVal lpString$, ByVal cch&)

Private Declare Function UnhookWindowsHookEx& Lib "user32" _
(ByVal hHook&)

Private Declare Function CreateWindowEx& Lib "user32" Alias
"CreateWindowExA" _

(ByVal dwExStyle&, ByVal lpClassName$, ByVal lpWindowName$, ByVal
dwStyle&, _

ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal hWndParent&,
_

ByVal hMenu&, ByVal hInstance&, lpParam As Any)

Private Declare Function GetClientRect& Lib "user32" _
(ByVal hwnd&, lpRect As RECT)

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function SetWindowText& Lib "user32" Alias
"SetWindowTextA" _

(ByVal hwnd&, ByVal lpString$)

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


Private Declare Function EmptyClipboard& Lib "user32" ()

Private lgHook&, PbHwnd&

Sub MiseEnPlace()
LeHook True
End Sub

Sub Arret()
LeHook
End Sub

Sub LeHook(Optional cache As Boolean)
Const WH_CBT& = &H5
If cache Then
#If VBA6 Then
lgHook = SetWindowsHookEx(WH_CBT, AddressOf WinHook, _
0&, GetCurrentThreadId)
#Else
lgHook = SetWindowsHookEx(WH_CBT, AddrOf("WinHook"), _
0&, GetCurrentThreadId)
#End If
Else
UnhookWindowsHookEx lgHook
End If
End Sub'AC

Private Function WinHook&(ByVal lMsg&, ByVal wParam&, ByRef lParam&)
Const HCBT_ACTIVATE& = &H5, HCBT_SETFOCUS& = 9&
Const WS_CHILD& = &H40000000, WS_VISIBLE& = &H10000000
Dim MYSTR$, LeNom$, Taille&, Rtc As RECT
If lMsg = HCBT_SETFOCUS Then
If wParam = PbHwnd Then
EmptyClipboard
keybd_event vbKeySnapshot, 0&, 0&, 0&
LeHook
Dim Xlapp As New Excel.Application
With Xlapp
.Workbooks.Add
.ActiveSheet.Paste
.ActiveSheet.PrintOut
.ActiveWorkbook.Close False
End With
Set Xlapp = Nothing
LeHook True
Exit Function
End If
End If
If lMsg = HCBT_ACTIVATE Then
LeNom = ActiveSheet.Name
Taille = Len(LeNom) + 1&
MYSTR = Space$(Taille)
MYSTR = Left$(MYSTR, GetWindowText(wParam, MYSTR, Taille))
If MYSTR = LeNom Then
GetClientRect wParam, Rtc
With Rtc
PbHwnd = CreateWindowEx(0&, "Button", "", WS_CHILD Or
WS_VISIBLE, _

.Right - 100&, .Bottom - 30&, 80&, 20&, wParam, 0&,
0&, 0&)

SetWindowText PbHwnd, "Imprimer"
End With
End If
End If
End Function'AC

Alain CROS

"LeSteph" a écrit dans le message de news:
40d9f3fc$0$30732$

oublié un détail très important.
Merci d'avance.






Avatar
LeSteph
Re bonsoir,
Peut être je m'y prends mal
J'ai bien collé distinctement
les deux appels dans le module code Feuille (celle qui contient les datas)
Les autres procs dans module (normal)
J'obtiens une copie écran en deux pages
il n'y a pas de nouvelle instance
le hook sans doute, cela me dépasse et de loin!
Je vais essayer de comprendre mais j'en ai pour .....

En cas d'idée...Merci

Suis en XP puisque tu utilises l' API Win
"Alain CROS" a écrit dans le message de
news:%
Bonjour.

Si j'ai bien compris, tu cherche a imprimer la grille accessible par
Données Grille... ou Formulaire... sur XL2002.


Le code suivant rajoute un bouton Imprimer à cette grille.
Lorsque l'on clique sur ce bouton, l'image de la grille est copiée dans le
presse papier,

une nouvelle instance d'XL est lancée, l'image est collée sur la feuille
active puis cette feuille est imprimée.


Attention, il faut manier ça avec prudence car un hook est actif en
permanence sur la feuille contenant les données de la grille.

Il faudra toujours activer une autre feuille avant de quitter ou adapter
dans le Workbook_BeforeClose.


Dans le module de la feuille :

Private Sub Worksheet_Activate()
MiseEnPlace
End Sub

Private Sub Worksheet_Deactivate()
Arret
End Sub

Dans un module standard :

Private Declare Function GetCurrentThreadId& Lib "kernel32" ()

Private Declare Function SetWindowsHookEx& Lib "user32" Alias
"SetWindowsHookExA" _

(ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&)

Private Declare Function GetWindowText& Lib "user32" Alias
"GetWindowTextA" _

(ByVal hwnd&, ByVal lpString$, ByVal cch&)

Private Declare Function UnhookWindowsHookEx& Lib "user32" _
(ByVal hHook&)

Private Declare Function CreateWindowEx& Lib "user32" Alias
"CreateWindowExA" _

(ByVal dwExStyle&, ByVal lpClassName$, ByVal lpWindowName$, ByVal
dwStyle&, _

ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal hWndParent&,
_

ByVal hMenu&, ByVal hInstance&, lpParam As Any)

Private Declare Function GetClientRect& Lib "user32" _
(ByVal hwnd&, lpRect As RECT)

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function SetWindowText& Lib "user32" Alias
"SetWindowTextA" _

(ByVal hwnd&, ByVal lpString$)

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


Private Declare Function EmptyClipboard& Lib "user32" ()

Private lgHook&, PbHwnd&

Sub MiseEnPlace()
LeHook True
End Sub

Sub Arret()
LeHook
End Sub

Sub LeHook(Optional cache As Boolean)
Const WH_CBT& = &H5
If cache Then
#If VBA6 Then
lgHook = SetWindowsHookEx(WH_CBT, AddressOf WinHook, _
0&, GetCurrentThreadId)
#Else
lgHook = SetWindowsHookEx(WH_CBT, AddrOf("WinHook"), _
0&, GetCurrentThreadId)
#End If
Else
UnhookWindowsHookEx lgHook
End If
End Sub'AC

Private Function WinHook&(ByVal lMsg&, ByVal wParam&, ByRef lParam&)
Const HCBT_ACTIVATE& = &H5, HCBT_SETFOCUS& = 9&
Const WS_CHILD& = &H40000000, WS_VISIBLE& = &H10000000
Dim MYSTR$, LeNom$, Taille&, Rtc As RECT
If lMsg = HCBT_SETFOCUS Then
If wParam = PbHwnd Then
EmptyClipboard
keybd_event vbKeySnapshot, 0&, 0&, 0&
LeHook
Dim Xlapp As New Excel.Application
With Xlapp
.Workbooks.Add
.ActiveSheet.Paste
.ActiveSheet.PrintOut
.ActiveWorkbook.Close False
End With
Set Xlapp = Nothing
LeHook True
Exit Function
End If
End If
If lMsg = HCBT_ACTIVATE Then
LeNom = ActiveSheet.Name
Taille = Len(LeNom) + 1&
MYSTR = Space$(Taille)
MYSTR = Left$(MYSTR, GetWindowText(wParam, MYSTR, Taille))
If MYSTR = LeNom Then
GetClientRect wParam, Rtc
With Rtc
PbHwnd = CreateWindowEx(0&, "Button", "", WS_CHILD Or
WS_VISIBLE, _

.Right - 100&, .Bottom - 30&, 80&, 20&, wParam, 0&,
0&, 0&)

SetWindowText PbHwnd, "Imprimer"
End With
End If
End If
End Function'AC

Alain CROS

"LeSteph" a écrit dans le message de news:
40d9f3fc$0$30732$

oublié un détail très important.
Merci d'avance.






Avatar
Alain CROS
Bonjour.

Je reprend ici le code du bouton Imprimer que je commente.

Lorsqu'une fenêtre prend le focus
If lMsg = HCBT_SETFOCUS Then

Si c'est le bouton Imprimer
If wParam = PbHwnd Then

Cette ligne ne sert a rien --> à supprimer
EmptyClipboard

Copier l'image de la grille dans le ClipBoard
keybd_event vbKeySnapshot, 0&, 0&, 0&

Arrêter le Hook pour éviter qu'il interfère avec la nouvelle instance d'XL
LeHook

Lancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application

With Xlapp
Nouveau Classeur
.Workbooks.Add

Coller l'image de la grille sur la feuille
.ActiveSheet.Paste

Imprimer la feuille
.ActiveSheet.PrintOut

fermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False

End With
L'instance d'XL est supprimer car il n'y a plus de classeur, il serait peut être judicieux de rajouter .Quit dans le with
Set Xlapp = Nothing

Relancer le Hook
LeHook True

Exit Function
End If
End If

A la sortie , l'image de la grille est toujours dans le ClipBoard.
Pour vérifier ton problème d'impression sur 2 pages, quitter la grille et changer de page pour arrêter le hook.
Lancer une nouvelle instance d'XL
Coller l'image de la grille.
Imprimer.
Je pense qu'ici aussi l'impression se fera sur 2 pages.
La grille est peut être grande ou bien le paramétrage de la zone d'impression par défaut est petite ou ???

Alain CROS

"LeSteph" a écrit dans le message de news: 40dc8131$0$1045$
Re bonsoir,
Peut être je m'y prends mal
J'ai bien collé distinctement
les deux appels dans le module code Feuille (celle qui contient les datas)
Les autres procs dans module (normal)
J'obtiens une copie écran en deux pages
il n'y a pas de nouvelle instance
le hook sans doute, cela me dépasse et de loin!
Je vais essayer de comprendre mais j'en ai pour .....

En cas d'idée...Merci

Suis en XP puisque tu utilises l' API Win


Avatar
LeSteph
Bonjour Alain,
Merci encore de ton aide, je vais essayer quelque chose
je crois que j'ai compris, en fait la grille que je teste est assez petite
et reste sur la feuille ou la zone est plus large (plutôt en paysage)
en fait c'est le tableau qui s'imprime avec la grille au dessus,
Workbooks.Add ne se vot jamais mais enfait je pense que c'est le XlApp qui
ne s'éxécute pas
pourtant il est défini avec Dim et appelé avec with,..?!

Donc je vais déjà effectuer la correction que tu as indiquée
vérifier avec tes indications et réessayer
puis sinon je vais coller un pas à pas et voir ce qui se passe.

Merci


"Alain CROS" a écrit dans le message de
news:
Bonjour.

Je reprend ici le code du bouton Imprimer que je commente.

Lorsqu'une fenêtre prend le focus
If lMsg = HCBT_SETFOCUS Then

Si c'est le bouton Imprimer
If wParam = PbHwnd Then

Cette ligne ne sert a rien --> à supprimer
EmptyClipboard

Copier l'image de la grille dans le ClipBoard
keybd_event vbKeySnapshot, 0&, 0&, 0&

Arrêter le Hook pour éviter qu'il interfère avec la nouvelle instance
d'XL


LeHook
Lancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application

With Xlapp
Nouveau Classeur
.Workbooks.Add

Coller l'image de la grille sur la feuille
.ActiveSheet.Paste

Imprimer la feuille
.ActiveSheet.PrintOut

fermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False

End With
L'instance d'XL est supprimer car il n'y a plus de classeur, il serait
peut être judicieux de rajouter .Quit dans le with


Set Xlapp = Nothing
Relancer le Hook
LeHook True

Exit Function
End If
End If

A la sortie , l'image de la grille est toujours dans le ClipBoard.
Pour vérifier ton problème d'impression sur 2 pages, quitter la grille et
changer de page pour arrêter le hook.

Lancer une nouvelle instance d'XL
Coller l'image de la grille.
Imprimer.
Je pense qu'ici aussi l'impression se fera sur 2 pages.
La grille est peut être grande ou bien le paramétrage de la zone
d'impression par défaut est petite ou ???


Alain CROS

"LeSteph" a écrit dans le message de news:
40dc8131$0$1045$

Re bonsoir,
Peut être je m'y prends mal
J'ai bien collé distinctement
les deux appels dans le module code Feuille (celle qui contient les
datas)


Les autres procs dans module (normal)
J'obtiens une copie écran en deux pages
il n'y a pas de nouvelle instance
le hook sans doute, cela me dépasse et de loin!
Je vais essayer de comprendre mais j'en ai pour .....

En cas d'idée...Merci

Suis en XP puisque tu utilises l' API Win






Avatar
LeSteph
Bonsoir ,
Omis un détail :
excel est chaque fois fermé parcequ'il a provoqué une erreur
Sinon:
J'ai mis en commentaire 'Empty.Clipboard'
J'ai rajouté .quit
juste avant le End With.

Le résultat est identique;et en sortie plantage "Voulez vous envoyer Rapport
d'erreur "...Excel va êtrefermé..
J'ai relancé excel , essayé par suite de coller .
Le presse papier contient une copie écran de excel avec le Classeur source
et la grille.

Je vais essayer hors connexion cela me permettra de clore mon pare feu et
mon mailWasher pendant exécution.
Peut-être une instance supplémentaire serait elle trop consommatrice de
ressources.

Sinon j'essaierais bien de rendre XlApp.visible=True comme dans un
CreateObject

A suivre...

Merci encore

"LeSteph" a écrit dans le message de
news:40dd984f$0$29369$
Bonjour Alain,
Merci encore de ton aide, je vais essayer quelque chose
je crois que j'ai compris, en fait la grille que je teste est assez
petite

et reste sur la feuille ou la zone est plus large (plutôt en paysage)
en fait c'est le tableau qui s'imprime avec la grille au dessus,
Workbooks.Add ne se vot jamais mais enfait je pense que c'est le XlApp
qui

ne s'éxécute pas
pourtant il est défini avec Dim et appelé avec with,..?!

Donc je vais déjà effectuer la correction que tu as indiquée
vérifier avec tes indications et réessayer
puis sinon je vais coller un pas à pas et voir ce qui se passe.

Merci


"Alain CROS" a écrit dans le message de
news:
Bonjour.

Je reprend ici le code du bouton Imprimer que je commente.

Lorsqu'une fenêtre prend le focus
If lMsg = HCBT_SETFOCUS Then

Si c'est le bouton Imprimer
If wParam = PbHwnd Then

Cette ligne ne sert a rien --> à supprimer
EmptyClipboard

Copier l'image de la grille dans le ClipBoard
keybd_event vbKeySnapshot, 0&, 0&, 0&

Arrêter le Hook pour éviter qu'il interfère avec la nouvelle instance
d'XL


LeHook
Lancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application

With Xlapp
Nouveau Classeur
.Workbooks.Add

Coller l'image de la grille sur la feuille
.ActiveSheet.Paste

Imprimer la feuille
.ActiveSheet.PrintOut

fermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False

End With
L'instance d'XL est supprimer car il n'y a plus de classeur, il serait
peut être judicieux de rajouter .Quit dans le with


Set Xlapp = Nothing
Relancer le Hook
LeHook True

Exit Function
End If
End If

A la sortie , l'image de la grille est toujours dans le ClipBoard.
Pour vérifier ton problème d'impression sur 2 pages, quitter la grille
et


changer de page pour arrêter le hook.
Lancer une nouvelle instance d'XL
Coller l'image de la grille.
Imprimer.
Je pense qu'ici aussi l'impression se fera sur 2 pages.
La grille est peut être grande ou bien le paramétrage de la zone
d'impression par défaut est petite ou ???


Alain CROS

"LeSteph" a écrit dans le message de news:
40dc8131$0$1045$

Re bonsoir,
Peut être je m'y prends mal
J'ai bien collé distinctement
les deux appels dans le module code Feuille (celle qui contient les
datas)


Les autres procs dans module (normal)
J'obtiens une copie écran en deux pages
il n'y a pas de nouvelle instance
le hook sans doute, cela me dépasse et de loin!
Je vais essayer de comprendre mais j'en ai pour .....

En cas d'idée...Merci

Suis en XP puisque tu utilises l' API Win










Avatar
sabatier
dis, LeSteph, tu crois qu'on va encore supporter longtemps tes
faiblesses quant à l'impression de ta grille, hein?
tu veux pas que je te file un logiciel de capture avec lequel tu te
pourriras moins la vie...à la place d'alain, je les aurais moi, les crocs...
jps

LeSteph a écrit:
Bonsoir ,
Omis un détail :
excel est chaque fois fermé parcequ'il a provoqué une erreur
Sinon:
J'ai mis en commentaire 'Empty.Clipboard'
J'ai rajouté .quit
juste avant le End With.

Le résultat est identique;et en sortie plantage "Voulez vous envoyer Rapport
d'erreur "...Excel va êtrefermé..
J'ai relancé excel , essayé par suite de coller .
Le presse papier contient une copie écran de excel avec le Classeur source
et la grille.

Je vais essayer hors connexion cela me permettra de clore mon pare feu et
mon mailWasher pendant exécution.
Peut-être une instance supplémentaire serait elle trop consommatrice de
ressources.

Sinon j'essaierais bien de rendre XlApp.visible=True comme dans un
CreateObject

A suivre...

Merci encore

"LeSteph" a écrit dans le message de
news:40dd984f$0$29369$

Bonjour Alain,
Merci encore de ton aide, je vais essayer quelque chose
je crois que j'ai compris, en fait la grille que je teste est assez


petite

et reste sur la feuille ou la zone est plus large (plutôt en paysage)
en fait c'est le tableau qui s'imprime avec la grille au dessus,
Workbooks.Add ne se vot jamais mais enfait je pense que c'est le XlApp


qui

ne s'éxécute pas
pourtant il est défini avec Dim et appelé avec with,..?!

Donc je vais déjà effectuer la correction que tu as indiquée
vérifier avec tes indications et réessayer
puis sinon je vais coller un pas à pas et voir ce qui se passe.

Merci


"Alain CROS" a écrit dans le message de
news:

Bonjour.

Je reprend ici le code du bouton Imprimer que je commente.


Lorsqu'une fenêtre prend le focus


If lMsg = HCBT_SETFOCUS Then

Si c'est le bouton Imprimer


If wParam = PbHwnd Then

Cette ligne ne sert a rien --> à supprimer


EmptyClipboard

Copier l'image de la grille dans le ClipBoard


keybd_event vbKeySnapshot, 0&, 0&, 0&

Arrêter le Hook pour éviter qu'il interfère avec la nouvelle instance


d'XL


LeHook

Lancer une nouvelle instance d'XL


Dim Xlapp As New Excel.Application
With Xlapp

Nouveau Classeur


.Workbooks.Add

Coller l'image de la grille sur la feuille


.ActiveSheet.Paste

Imprimer la feuille


.ActiveSheet.PrintOut

fermer le Classeur sans sauvegarder


.ActiveWorkbook.Close False
End With

L'instance d'XL est supprimer car il n'y a plus de classeur, il serait


peut être judicieux de rajouter .Quit dans le with


Set Xlapp = Nothing

Relancer le Hook


LeHook True
Exit Function
End If
End If

A la sortie , l'image de la grille est toujours dans le ClipBoard.
Pour vérifier ton problème d'impression sur 2 pages, quitter la grille


et


changer de page pour arrêter le hook.

Lancer une nouvelle instance d'XL
Coller l'image de la grille.
Imprimer.
Je pense qu'ici aussi l'impression se fera sur 2 pages.
La grille est peut être grande ou bien le paramétrage de la zone


d'impression par défaut est petite ou ???

Alain CROS

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


40dc8131$0$1045$

Re bonsoir,
Peut être je m'y prends mal
J'ai bien collé distinctement
les deux appels dans le module code Feuille (celle qui contient les


datas)


Les autres procs dans module (normal)
J'obtiens une copie écran en deux pages
il n'y a pas de nouvelle instance
le hook sans doute, cela me dépasse et de loin!
Je vais essayer de comprendre mais j'en ai pour .....

En cas d'idée...Merci

Suis en XP puisque tu utilises l' API Win













Avatar
LeSteph
Bonjour jps,

Tu vas bien? D'habitude tu es un peu plus gentill!
Pas très sympa ton message, pas grave j'espère que
tu n'es pas froissé depuis l'autre jour tout de même.Ce serait dommage
Il me semble normal de donner suite, précisément à qui s'efforce de m'aider.
Personnellement quand j'aide quelqu'un je préfère savoir que cela marche ou
non
et comprendre pourquoi, plutôt que de n'avoir pas de réponse.
Et si on me dit que ce n'est pas possible je n'insiste pas.
En l'occurence le but n'est pas de faire une copie d'écran
mais d'intégrer un bouton Imprimer à la grille d'excel pour
pouvoir l'imprimer indépendemment de sa feuille source.
Sinon, la touche imprime Ecran et un Copier Coller suffiraient.
Cela dit si tu as une astuce je suis preneur mais à mon avis
il manque très peu de chose au code fourni par Alain qui est excellent!

Merci.

LeSteph













"sabatier" a écrit dans le message
de news:
dis, LeSteph, tu crois qu'on va encore supporter longtemps tes
faiblesses quant à l'impression de ta grille, hein?
tu veux pas que je te file un logiciel de capture avec lequel tu te
pourriras moins la vie...à la place d'alain, je les aurais moi, les
crocs...

jps

LeSteph a écrit:
Bonsoir ,
Omis un détail :
excel est chaque fois fermé parcequ'il a provoqué une erreur
Sinon:
J'ai mis en commentaire 'Empty.Clipboard'
J'ai rajouté .quit
juste avant le End With.

Le résultat est identique;et en sortie plantage "Voulez vous envoyer
Rapport


d'erreur "...Excel va êtrefermé..
J'ai relancé excel , essayé par suite de coller .
Le presse papier contient une copie écran de excel avec le Classeur
source


et la grille.

Je vais essayer hors connexion cela me permettra de clore mon pare feu
et


mon mailWasher pendant exécution.
Peut-être une instance supplémentaire serait elle trop consommatrice de
ressources.

Sinon j'essaierais bien de rendre XlApp.visible=True comme dans un
CreateObject

A suivre...

Merci encore

"LeSteph" a écrit dans le message de
news:40dd984f$0$29369$

Bonjour Alain,
Merci encore de ton aide, je vais essayer quelque chose
je crois que j'ai compris, en fait la grille que je teste est assez


petite

et reste sur la feuille ou la zone est plus large (plutôt en paysage)
en fait c'est le tableau qui s'imprime avec la grille au dessus,
Workbooks.Add ne se vot jamais mais enfait je pense que c'est le XlApp


qui

ne s'éxécute pas
pourtant il est défini avec Dim et appelé avec with,..?!

Donc je vais déjà effectuer la correction que tu as indiquée
vérifier avec tes indications et réessayer
puis sinon je vais coller un pas à pas et voir ce qui se passe.

Merci


"Alain CROS" a écrit dans le message de
news:

Bonjour.

Je reprend ici le code du bouton Imprimer que je commente.


Lorsqu'une fenêtre prend le focus


If lMsg = HCBT_SETFOCUS Then

Si c'est le bouton Imprimer


If wParam = PbHwnd Then

Cette ligne ne sert a rien --> à supprimer


EmptyClipboard

Copier l'image de la grille dans le ClipBoard


keybd_event vbKeySnapshot, 0&, 0&, 0&

Arrêter le Hook pour éviter qu'il interfère avec la nouvelle instance


d'XL


LeHook

Lancer une nouvelle instance d'XL


Dim Xlapp As New Excel.Application
With Xlapp

Nouveau Classeur


.Workbooks.Add

Coller l'image de la grille sur la feuille


.ActiveSheet.Paste

Imprimer la feuille


.ActiveSheet.PrintOut

fermer le Classeur sans sauvegarder


.ActiveWorkbook.Close False
End With

L'instance d'XL est supprimer car il n'y a plus de classeur, il serait


peut être judicieux de rajouter .Quit dans le with


Set Xlapp = Nothing

Relancer le Hook


LeHook True
Exit Function
End If
End If

A la sortie , l'image de la grille est toujours dans le ClipBoard.
Pour vérifier ton problème d'impression sur 2 pages, quitter la grille


et


changer de page pour arrêter le hook.

Lancer une nouvelle instance d'XL
Coller l'image de la grille.
Imprimer.
Je pense qu'ici aussi l'impression se fera sur 2 pages.
La grille est peut être grande ou bien le paramétrage de la zone


d'impression par défaut est petite ou ???

Alain CROS

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


40dc8131$0$1045$

Re bonsoir,
Peut être je m'y prends mal
J'ai bien collé distinctement
les deux appels dans le module code Feuille (celle qui contient les


datas)


Les autres procs dans module (normal)
J'obtiens une copie écran en deux pages
il n'y a pas de nouvelle instance
le hook sans doute, cela me dépasse et de loin!
Je vais essayer de comprendre mais j'en ai pour .....

En cas d'idée...Merci

Suis en XP puisque tu utilises l' API Win
















Avatar
sabatier
bien sûr que je vais bien, LeSteph, tout aussi sûr que je disais cela en
blaguant mais c'est pas de ma faute si philippe R, en me filant une proc
pour laquelle je l'avais pourtant remercié, a fait en sorte qu'il n'y a
plus une souriette sur mon clavier...
allez, tu vas bien finir par l'imprimer ta grille avec l'aide d'alain
C...je te le souhaite en tous cas...
jps

LeSteph a écrit:
Bonjour jps,

Tu vas bien? D'habitude tu es un peu plus gentill!


1 2