Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Piloter Word depuis Excel

6 réponses
Avatar
GérardJean
Bonjour,

Je souhaite pouvoir sous VBA Excel, intercepter les évènements se produisant
sur les documents Word, notamment la sauvegarde d’un document Word, sa
fermeture, etc ….
Toute solution ou orientation de solution sera la bienvenue

Merci

6 réponses

Avatar
MichDenis
Je te propose un truc si tu veux savoir quand Word enregistre un document, peu importe lequel et que
tu as un fichier Excel d'ouvert... seulement si le fichier excel est ouvert, word t'affichera un
message si tu tentes d'enregistrer.

Tout se passe dans Word dans lequel nous allons ajouter un module de classe dans la section "normal"
lorsque tu ouvres la fenêtre de l'éditeur de code de Word

Tu ajoutes un module de classe que tu nommes : AppWord

Dans ce module de classe, tu copies le code suivant :

'Déclaration de la variable dans le haut du module de classe
Public WithEvents MonWord As Application

'--------------------------
Private Sub MonWord_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As
Boolean)

Dim Xl As Object, Wk As Object
On Error Resume Next
Set Xl = GetObject(, "excel.application")
Set Wk = Xl.workbooks(1)
If Not Wk Is Nothing Then
MsgBox "Word enregistre un fichier : """ & ActiveDocument.Name & """"
End If
Set Xl = Nothing: Set Wk = Nothing

End Sub
'--------------------------


Dans le module ThisDocument du Normal.dot de Word tu copies ce qui suit:

'Déclaration de la variable dans le haut du module ThisDocument
Dim MWd As New AppWord
'------------------------
Private Sub Document_Open()
Set MWd.MonWord = Application
End Sub
'------------------------

Tu enregistres ton fichier "Normal"

Tu fermes word et à sa réouverture, à chaque fois que tu appuieras sur le bouton enregistrer de
word,
ce dernier émettra un message seulement et seulement si un classeur excel est ouvert.





"GérardJean" a écrit dans le message de news:

Bonjour,

Je souhaite pouvoir sous VBA Excel, intercepter les évènements se produisant
sur les documents Word, notamment la sauvegarde d'un document Word, sa
fermeture, etc ..
Toute solution ou orientation de solution sera la bienvenue

Merci
Avatar
MichDenis
J'oubliais de mentionner que si tu avais plusieurs instances d'excel d'ouvert,
il faudrait boucler sur chacune des instances pour savoir si un fichier
est ouvert dans l'une ou l'autre des instances ...je te laisse trouver
le code ....!
Avatar
GérardJean
Merci pour ta réponse, je vais la mettre en oeuvre

Une question complémentaire toutefois : peut-on créer un modèle spécifique
plutôt que de modifier le modèle "Normal" et l'affecter uniquement aux
documents Word pour lesquels on souhaite un contrôle des évènements ?



J'oubliais de mentionner que si tu avais plusieurs instances d'excel d'ouvert,
il faudrait boucler sur chacune des instances pour savoir si un fichier
est ouvert dans l'une ou l'autre des instances ...je te laisse trouver
le code ....!





Avatar
MichDenis
Si ton besoin est pour un ou 2 fichiers particuliers
il y a moyen de modifier la commande du bouton "enregistrer"
ou de la commande "menu / enregistrer" lorsqu'un de ces fichiers
est ouverts et actifs et obtenir le message désiré.

En comparaison avec Excel, ce type d'événement
n'existe pas pour chacun des fichiers Word.

Private Sub MonWord_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As
Boolean)

Si tu choisis un "Template" autre que le "Normal" qui se rapproche à certains égards
du classeur Perso.xls d'excel, lorsque tu ouvriras word, ce n'est pas le template crée
qui s'ouvriira mais le "Normal", la macro ne sera pas en place.

Enfin, tu as sûrement des spécialistes de Word sur son Forum qui seront
en mesure d'éclairer davantage tes zones grises.



"GérardJean" a écrit dans le message de news:

Merci pour ta réponse, je vais la mettre en oeuvre

Une question complémentaire toutefois : peut-on créer un modèle spécifique
plutôt que de modifier le modèle "Normal" et l'affecter uniquement aux
documents Word pour lesquels on souhaite un contrôle des évènements ?



J'oubliais de mentionner que si tu avais plusieurs instances d'excel d'ouvert,
il faudrait boucler sur chacune des instances pour savoir si un fichier
est ouvert dans l'une ou l'autre des instances ...je te laisse trouver
le code ....!





Avatar
MichDenis
Si tu veux limiter le message à quelques fichiers que tu connais déjà les noms, tu peux modifier la
procédure
du module de classe comme ceci et sur cette ligne de code Case "Doc2.doc", "Doc3.doc" remplacer
par
les noms des fichiers word que tu désires à la place de "Doc2.doc", "Doc3.doc" , etc.

'---------------------
Private Sub MonWord_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As
Boolean)

Select Case ActiveDocument.Name
Case "Doc2.doc", "Doc3.doc"
Dim Xl As Object, Wk As Object
On Error Resume Next
Set Xl = GetObject(, "excel.application")
Set Wk = Xl.workbooks(1)
If Not Wk Is Nothing Then
MsgBox "Word enregistre un fichier : """ & ActiveDocument.Name & """"
End If
Set Xl = Nothing: Set Wk = Nothing
End Select
End Sub
'---------------------



"GérardJean" a écrit dans le message de news:

Merci pour ta réponse, je vais la mettre en oeuvre

Une question complémentaire toutefois : peut-on créer un modèle spécifique
plutôt que de modifier le modèle "Normal" et l'affecter uniquement aux
documents Word pour lesquels on souhaite un contrôle des évènements ?



J'oubliais de mentionner que si tu avais plusieurs instances d'excel d'ouvert,
il faudrait boucler sur chacune des instances pour savoir si un fichier
est ouvert dans l'une ou l'autre des instances ...je te laisse trouver
le code ....!





Avatar
GérardJean
Encore merci pour tes réponses pertinentes

A+




Si tu veux limiter le message à quelques fichiers que tu connais déjà les noms, tu peux modifier la
procédure
du module de classe comme ceci et sur cette ligne de code Case "Doc2.doc", "Doc3.doc" remplacer
par
les noms des fichiers word que tu désires à la place de "Doc2.doc", "Doc3.doc" , etc.

'---------------------
Private Sub MonWord_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As
Boolean)

Select Case ActiveDocument.Name
Case "Doc2.doc", "Doc3.doc"
Dim Xl As Object, Wk As Object
On Error Resume Next
Set Xl = GetObject(, "excel.application")
Set Wk = Xl.workbooks(1)
If Not Wk Is Nothing Then
MsgBox "Word enregistre un fichier : """ & ActiveDocument.Name & """"
End If
Set Xl = Nothing: Set Wk = Nothing
End Select
End Sub
'---------------------



"GérardJean" a écrit dans le message de news:

Merci pour ta réponse, je vais la mettre en oeuvre

Une question complémentaire toutefois : peut-on créer un modèle spécifique
plutôt que de modifier le modèle "Normal" et l'affecter uniquement aux
documents Word pour lesquels on souhaite un contrôle des évènements ?



J'oubliais de mentionner que si tu avais plusieurs instances d'excel d'ouvert,
il faudrait boucler sur chacune des instances pour savoir si un fichier
est ouvert dans l'une ou l'autre des instances ...je te laisse trouver
le code ....!