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
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
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
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" <GrardJean@discussions.microsoft.com> a écrit dans le message de news:
F202C8C9-FD43-4645-B59D-63A404C1A8BB@microsoft.com...
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
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
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 ....!
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 ....!
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 ....!
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 ....!
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 ....!
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 ....!
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 ....!
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" <GrardJean@discussions.microsoft.com> a écrit dans le message de news:
FA93A237-CF2E-4DA5-9E91-AE7B3369AAAE@microsoft.com...
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 ....!
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 ....!
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 ....!
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" <GrardJean@discussions.microsoft.com> a écrit dans le message de news:
FA93A237-CF2E-4DA5-9E91-AE7B3369AAAE@microsoft.com...
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 ....!
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 ....!
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 ....!
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" <GrardJean@discussions.microsoft.com> a écrit dans le message de news:
FA93A237-CF2E-4DA5-9E91-AE7B3369AAAE@microsoft.com...
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 ....!
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 ....!