OVH Cloud OVH Cloud

Détecter une impression

1 réponse
Avatar
Sébastien
Re-bonjour...

Me revoilà avec une nouvelle question...

Je souhaite contrôler l'impression d'un document sous Word, grâce à VBA.
En fouillant dans l'aide, j'ai découvert l'événement DocumentBeforePrinting,
mais qui visiblement doit être associé à un objet, bref j'ai pas tout compris.

J'ai tenté l'exemple fourni avec une déclaration du style
ActiveDocument_DocumentBeforePrinting, mais l'événement n'est pas détecté, et
du coup la msgBox que je veux afficher n'apparaît pas.

Quelqu'un peut-il m'aider ?
Merci !

Séb

1 réponse

Avatar
Jean-Guy Marcil
Sébastien was telling us:
Sébastien nous racontait que :

Re-bonjour...

Me revoilà avec une nouvelle question...

Je souhaite contrôler l'impression d'un document sous Word, grâce à
VBA.
En fouillant dans l'aide, j'ai découvert l'événement
DocumentBeforePrinting, mais qui visiblement doit être associé à un
objet, bref j'ai pas tout compris.

J'ai tenté l'exemple fourni avec une déclaration du style
ActiveDocument_DocumentBeforePrinting, mais l'événement n'est pas
détecté, et du coup la msgBox que je veux afficher n'apparaît pas.





Copie ceci dans le module ThisDocument : (Ce code appellera le module
standard qui doit enregistrer les "event handler" chaque fois que le
document est ouvert ou créé à partir d'un modèle.)

'_______________________________________

Private Sub Document_New()



WordEventModule.RegisterEH



End Sub

'_______________________________________



'_______________________________________

Private Sub Document_Open()



WordEventModule.RegisterEH



End Sub

'_______________________________________



Dans un module de class que tu DOIS appeller "WordEventHandler", copie ce
code: (C'est ce code qui actuellement fait le travail quand l'événement est
activé. Tu pourrais, au lieu de mettre du code, faire un appel à une
procédure dans un module standard si tu préfères.) Ici, j'ai mis trois
événements à titre d'exemple. Enlève ceux que tu ne veux pas.



'_______________________________________

Public WithEvents WordApp As Word.Application



'_______________________________________

Private Sub WordApp_WindowSelectionChange(ByVal Sel As Selection)



'Ton code



End Sub

'_______________________________________



'_______________________________________

Private Sub WordApp_DocumentBeforeClose(ByVal _
docClosing As Word.Document, _
ByRef Cancel As Boolean)

Dim CheckFirst As Long

With ActiveDocument

If Not .Saved Then
'Yes = 6
'No = 7
'Cancel = 2
CheckFirst = MsgBox("Voulez-vous enregistrer " _
& "le document avant de le fermer?", _
vbInformation + vbYesNoCancel, _
"Document non enregistré")
Select Case CheckFirst
Case 6
.Save
Case 7
.Saved = True
Case 2
Cancel = True
End Select
End If

End With

End Sub

'_______________________________________



'_______________________________________

Private Sub WordApp_DocumentBeforePrint(ByVal _
Doc As Document, _
Cancel As Boolean)

MsgBox "Impression!"

End Sub

'_______________________________________



Finalement, dans un module standard que tu DOIS appeller "WordEventModule",
copie ce code: (C'est ce qui enregistera les "event handler", ou les
activera si tu préfères)



'_______________________________________

Public MyWordEvent As New WordEventHandler



'_______________________________________

Public Sub RegisterEH()

' Register the Event Handler

Set MyWordEvent.WordApp = Word.Application

End Sub

'_______________________________________


À chaque fois que tu fais des changements dans le code, tu dois
ré-enregister les événements en faisant rouler le code de RegisterEH.
--
Salut!
_______________________________________
Jean-Guy Marcil - Word MVP

Word MVP site: http://www.word.mvps.org