OVH Cloud OVH Cloud

impression automatique sous internet explorer

5 réponses
Avatar
cmoietvous
Bonjour à tous,

Je cherche à imprimer automatiquement des pages html mais il me reste un
problème. J'ai insérer ce code dans VBA:

Dim page as new InternetExplorer

sub essai()
page.navigate "c:\mapage.htm"
page.visible=true
page.ExecWB OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER
page.quit
End sub

Le problème dans ce code c'est que je ferme trop vite la page alors qu'il
n'a pas eu le temps d'imprimer la page. Je ne sais pas comment (sans mettre
un delai) faire pour réceptionner un message de fin d'impression (ou fin
spool).

Quelqu'un peut il m'aider?

5 réponses

Avatar
j
as-tu essayé d'ajouter, avant page.quit , un truc du genre
do while page.busy
loop
je ne peux pas tester, j'ai une erreur sur
page.ExecWB 6, 2



"cmoietvous" a écrit dans le message de news:
QjO_b.26559$
Bonjour à tous,

Je cherche à imprimer automatiquement des pages html mais il me reste un
problème. J'ai insérer ce code dans VBA:

Dim page as new InternetExplorer

sub essai()
page.navigate "c:mapage.htm"
page.visible=true
page.ExecWB OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER
page.quit
End sub

Le problème dans ce code c'est que je ferme trop vite la page alors qu'il
n'a pas eu le temps d'imprimer la page. Je ne sais pas comment (sans
mettre

un delai) faire pour réceptionner un message de fin d'impression (ou fin
spool).

Quelqu'un peut il m'aider?




Avatar
cmoietvous
Oui j'ai essayé mais cela ne fonctionne pas car busy est une propriété pour
une opération de download et non pour l'impression!
Avatar
Pascal Engelmajer
Salut,
ne faut-il pas utiliser doEvent ?
si .ReadyState existe dans ton objet
sub essai()
Dim tempo As Long

Dim debut As Long

page.navigate "c:mapage.htm"
'====================== debut = Timer

Do
tempo = Timer - debut
DoEvents
Loop Until page.ReadyState = READYSTATE_COMPLETE Or tempo > 60
page.visible=true
page.ExecWB OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER
doEvents '???

page.quit
End sub



--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"cmoietvous" a écrit dans le message de news:
QjO_b.26559$
Bonjour à tous,

Je cherche à imprimer automatiquement des pages html mais il me reste un
problème. J'ai insérer ce code dans VBA:

Dim page as new InternetExplorer

sub essai()
page.navigate "c:mapage.htm"
page.visible=true
page.ExecWB OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER
page.quit
End sub

Le problème dans ce code c'est que je ferme trop vite la page alors qu'il
n'a pas eu le temps d'imprimer la page. Je ne sais pas comment (sans
mettre

un delai) faire pour réceptionner un message de fin d'impression (ou fin
spool).

Quelqu'un peut il m'aider?




Avatar
j
alors, il faut employer les grands moyens...
essaie d'utiliser cette fonction qui te dit si l'imprimante est libre :

Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Any) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As
Long) As Long
Private Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA"
(ByVal hPrinter As Long, ByVal FirstJob As Long, ByVal NoJobs As Long, ByVal
Level As Long, pJob As Any, ByVal cdBuf As Long, pcbNeeded As Long,
pcReturned As Long) As Long

Function printfini()
Dim imprimante As Long, zaza As Long, toto As Long
OpenPrinter "HP DeskJet 710C", imprimante, ByVal 0&
zaza = 0
EnumJobs imprimante, 0, 99, 1, ByVal 0&, 0, zaza, toto
ClosePrinter imprimante
printfini = True
If zaza > 0 Then printfini = False
End Function

pense à mettre le nom de ton imprimante (pas celui de la mienne !)
et dans ton sub, tu mets une boucle pour attendre la fin de l'impression :

Do While Not printfini
Loop
MsgBox "ça y est !"


http://jacxl.free.fr












"cmoietvous" a écrit dans le message de news:
SBX_b.26918$
Oui j'ai essayé mais cela ne fonctionne pas car busy est une propriété
pour

une opération de download et non pour l'impression!




Avatar
j
ou bien, sans avoir besoin d'entrer le nom de l'imprimante :

Private Declare Function GetProfileString Lib "kernel32.dll" _
Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As
String, _
ByVal lpDefault As String, ByVal lpReturnedString As String, _
ByVal nSize As Long) As Long
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"
_
(ByVal pPrinterName As String, phPrinter As Long, pDefault As Any) As
Long
Private Declare Function ClosePrinter Lib "winspool.drv" _
(ByVal hPrinter As Long) As Long
Private Declare Function EnumJobs Lib "winspool.drv" _
Alias "EnumJobsA" (ByVal hPrinter As Long, ByVal FirstJob As Long, _
ByVal NoJobs As Long, ByVal Level As Long, pJob As Any, ByVal cdBuf As
Long, _
pcbNeeded As Long, pcReturned As Long) As Long

Function printfini()
Dim nimpr As String * 254
Dim imprimante As Long, zaza As Long, toto As Long
GetProfileString "windows", "device", ",,,", nimpr, 254
nom_imprimante = Left(nimpr, InStr(nimpr, ",") - 1)
OpenPrinter nom_imprimante, imprimante, ByVal 0&
zaza = 0
EnumJobs imprimante, 0, 99, 1, ByVal 0&, 0, zaza, toto
ClosePrinter imprimante
printfini = True
If zaza > 0 Then printfini = False
End Function


http://jacxl.free.fr




"" a écrit dans le message de news:
403d06d4$0$22389$
alors, il faut employer les grands moyens...
essaie d'utiliser cette fonction qui te dit si l'imprimante est libre :

Private Declare Function OpenPrinter Lib "winspool.drv" Alias
"OpenPrinterA"

(ByVal pPrinterName As String, phPrinter As Long, pDefault As Any) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter
As

Long) As Long
Private Declare Function EnumJobs Lib "winspool.drv" Alias "EnumJobsA"
(ByVal hPrinter As Long, ByVal FirstJob As Long, ByVal NoJobs As Long,
ByVal

Level As Long, pJob As Any, ByVal cdBuf As Long, pcbNeeded As Long,
pcReturned As Long) As Long

Function printfini()
Dim imprimante As Long, zaza As Long, toto As Long
OpenPrinter "HP DeskJet 710C", imprimante, ByVal 0&
zaza = 0
EnumJobs imprimante, 0, 99, 1, ByVal 0&, 0, zaza, toto
ClosePrinter imprimante
printfini = True
If zaza > 0 Then printfini = False
End Function

pense à mettre le nom de ton imprimante (pas celui de la mienne !)
et dans ton sub, tu mets une boucle pour attendre la fin de l'impression :

Do While Not printfini
Loop
MsgBox "ça y est !"


http://jacxl.free.fr












"cmoietvous" a écrit dans le message de news:
SBX_b.26918$
Oui j'ai essayé mais cela ne fonctionne pas car busy est une propriété
pour

une opération de download et non pour l'impression!