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
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
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
oublié un détail très important.
Merci d'avance.
oublié un détail très important.
Merci d'avance.
oublié un détail très important.
Merci d'avance.
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.
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" <lecocosteph@frite.fr> a écrit dans le message de news:
40d9f3fc$0$30732$636a15ce@news.free.fr...
oublié un détail très important.
Merci d'avance.
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.
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.
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" <lecocosteph@frite.fr> a écrit dans le message de news:
40d9f3fc$0$30732$636a15ce@news.free.fr...
oublié un détail très important.
Merci d'avance.
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.
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
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
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
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
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
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
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
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
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
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
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
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
Bonjour.
Je reprend ici le code du bouton Imprimer que je commente.Lorsqu'une fenêtre prend le focus
If lMsg = HCBT_SETFOCUS ThenSi c'est le bouton Imprimer
If wParam = PbHwnd ThenCette ligne ne sert a rien --> à supprimer
EmptyClipboardCopier 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
LeHookLancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application
With XlappNouveau Classeur
.Workbooks.AddColler l'image de la grille sur la feuille
.ActiveSheet.PasteImprimer la feuille
.ActiveSheet.PrintOutfermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False
End WithL'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 = NothingRelancer 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
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" <lecocosteph@frite.fr> a écrit dans le message de news:
40dc8131$0$1045$626a14ce@news.free.fr...
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
Bonjour.
Je reprend ici le code du bouton Imprimer que je commente.Lorsqu'une fenêtre prend le focus
If lMsg = HCBT_SETFOCUS ThenSi c'est le bouton Imprimer
If wParam = PbHwnd ThenCette ligne ne sert a rien --> à supprimer
EmptyClipboardCopier 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
LeHookLancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application
With XlappNouveau Classeur
.Workbooks.AddColler l'image de la grille sur la feuille
.ActiveSheet.PasteImprimer la feuille
.ActiveSheet.PrintOutfermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False
End WithL'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 = NothingRelancer 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
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 ThenSi c'est le bouton Imprimer
If wParam = PbHwnd ThenCette ligne ne sert a rien --> à supprimer
EmptyClipboardCopier 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'XLLeHookLancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application
With XlappNouveau Classeur
.Workbooks.AddColler l'image de la grille sur la feuille
.ActiveSheet.PasteImprimer la feuille
.ActiveSheet.PrintOutfermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False
End WithL'instance d'XL est supprimer car il n'y a plus de classeur, il serait
peut être judicieux de rajouter .Quit dans le withSet Xlapp = NothingRelancer 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
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" <Personne@ICI> a écrit dans le message de
news:ejZDB73WEHA.1048@tk2msftngp13.phx.gbl...
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" <lecocosteph@frite.fr> a écrit dans le message de news:
40dc8131$0$1045$626a14ce@news.free.fr...
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
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 ThenSi c'est le bouton Imprimer
If wParam = PbHwnd ThenCette ligne ne sert a rien --> à supprimer
EmptyClipboardCopier 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'XLLeHookLancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application
With XlappNouveau Classeur
.Workbooks.AddColler l'image de la grille sur la feuille
.ActiveSheet.PasteImprimer la feuille
.ActiveSheet.PrintOutfermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False
End WithL'instance d'XL est supprimer car il n'y a plus de classeur, il serait
peut être judicieux de rajouter .Quit dans le withSet Xlapp = NothingRelancer 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
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
petiteet 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
quine 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 ThenSi c'est le bouton Imprimer
If wParam = PbHwnd ThenCette ligne ne sert a rien --> à supprimer
EmptyClipboardCopier 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'XLLeHookLancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application
With XlappNouveau Classeur
.Workbooks.AddColler l'image de la grille sur la feuille
.ActiveSheet.PasteImprimer la feuille
.ActiveSheet.PrintOutfermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False
End WithL'instance d'XL est supprimer car il n'y a plus de classeur, il serait
peut être judicieux de rajouter .Quit dans le withSet Xlapp = NothingRelancer 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
etchanger 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
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" <lecocosteph@frite.fr> a écrit dans le message de
news:40dd984f$0$29369$626a14ce@news.free.fr...
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" <Personne@ICI> a écrit dans le message de
news:ejZDB73WEHA.1048@tk2msftngp13.phx.gbl...
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" <lecocosteph@frite.fr> a écrit dans le message de news:
40dc8131$0$1045$626a14ce@news.free.fr...
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
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
petiteet 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
quine 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 ThenSi c'est le bouton Imprimer
If wParam = PbHwnd ThenCette ligne ne sert a rien --> à supprimer
EmptyClipboardCopier 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'XLLeHookLancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application
With XlappNouveau Classeur
.Workbooks.AddColler l'image de la grille sur la feuille
.ActiveSheet.PasteImprimer la feuille
.ActiveSheet.PrintOutfermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False
End WithL'instance d'XL est supprimer car il n'y a plus de classeur, il serait
peut être judicieux de rajouter .Quit dans le withSet Xlapp = NothingRelancer 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
etchanger 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
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
petiteet 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
quine 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 ThenSi c'est le bouton Imprimer
If wParam = PbHwnd ThenCette ligne ne sert a rien --> à supprimer
EmptyClipboardCopier 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'XLLeHookLancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application
With XlappNouveau Classeur
.Workbooks.AddColler l'image de la grille sur la feuille
.ActiveSheet.PasteImprimer la feuille
.ActiveSheet.PrintOutfermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False
End WithL'instance d'XL est supprimer car il n'y a plus de classeur, il serait
peut être judicieux de rajouter .Quit dans le withSet Xlapp = NothingRelancer 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
etchanger 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
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" <lecocosteph@frite.fr> a écrit dans le message de
news:40dd984f$0$29369$626a14ce@news.free.fr...
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" <Personne@ICI> a écrit dans le message de
news:ejZDB73WEHA.1048@tk2msftngp13.phx.gbl...
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" <lecocosteph@frite.fr> a écrit dans le message de news:
40dc8131$0$1045$626a14ce@news.free.fr...
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
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
petiteet 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
quine 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 ThenSi c'est le bouton Imprimer
If wParam = PbHwnd ThenCette ligne ne sert a rien --> à supprimer
EmptyClipboardCopier 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'XLLeHookLancer une nouvelle instance d'XL
Dim Xlapp As New Excel.Application
With XlappNouveau Classeur
.Workbooks.AddColler l'image de la grille sur la feuille
.ActiveSheet.PasteImprimer la feuille
.ActiveSheet.PrintOutfermer le Classeur sans sauvegarder
.ActiveWorkbook.Close False
End WithL'instance d'XL est supprimer car il n'y a plus de classeur, il serait
peut être judicieux de rajouter .Quit dans le withSet Xlapp = NothingRelancer 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
etchanger 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
Bonjour jps,
Tu vas bien? D'habitude tu es un peu plus gentill!
Bonjour jps,
Tu vas bien? D'habitude tu es un peu plus gentill!
Bonjour jps,
Tu vas bien? D'habitude tu es un peu plus gentill!