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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
jmarcilREMOVE@CAPSsympatico.caTHISTOO
Word MVP site: http://www.word.mvps.org
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