Fermer fenetre sous Word - VB/VBA/VBS - Programmation
Marsh Posté le 15-06-2009 à 14:28:54
hoob91 a écrit : Je désire simplement que ne s'affiche la boite de dialogue que l'on obtient en cliquant sur la croix en haut à droite du document "Fermer la fenetre" |
Tu peux reformuler clairement ? Car j'ai pas bien compris ce que tu voulais.
Marsh Posté le 15-06-2009 à 14:46:34
Lorsque la macro active "Document 1", je souhaite fermer ce document avec le message suivant "Voulez vous enregistrer les modifications apportées à Document 1 ? " que tu obtiens en cliquant sur la croix (fermer la fenetre) d'un document word , et non pas le message " enregistrez sous" "
Merci de votre aide
Marsh Posté le 15-06-2009 à 15:04:55
Il faut que tu interceptes l'évenement "Close" de ton objet Document, et que dans le handler, tu demandes à l'utilisateur s'il souhaite sauvegarder ou non
Un truc du genre :
Code :
|
Marsh Posté le 15-06-2009 à 15:11:36
J'aurai dit "BeforeClose" moi et non "Close" car le message d'avertissement intervient avant le Close.
Marsh Posté le 15-06-2009 à 15:13:10
Bonjour,
Je pense que c'est parce que Document 1 n'a jamais été sauvegardé. Donc Word ne va pas poser la question de "Voulez vous enregistrer les modifications".
2 solutions
a)
* le sauvegarder sous un nom bidon,
* simuler une modification en faisant .saved = False
* le fermer (.close)
b) utiliser un msgbox pour poser la question, puis la méthode .saveas
Cordialement,
ProduVBA
Marsh Posté le 15-06-2009 à 15:14:54
Deamon a écrit : J'aurai dit "BeforeClose" moi et non "Close" car le message d'avertissement intervient avant le Close. |
Y'a pas d'évenement "BeforeClose"
http://msdn.microsoft.com/en-us/library/bb257531.aspx
Marsh Posté le 15-06-2009 à 15:16:19
produvba a écrit : Bonjour, |
Intercepter l'évenement "Close" est quand même un peu plus propre non ?
Marsh Posté le 15-06-2009 à 15:21:31
Merci de votre aide, j'ai trouvé la solution ci-dessous qui peux aider d'autres personnes
Private Sub valid_Plan_type_doc_Click()
Dim Doc As String
If element.Value <> "" Then
If element.Value = "procedure" Then
'Ouvre le Plan-type
Documents.Add template:="C:\Microsoft Office\Templates\Adp\Ramses PE.dot", _
NewTemplate:=False, DocumentType:=0
'Ferme la boite dialogue
Type_Plan_Open.Hide
'Active le document initial
Windows("Document1" ).Activate
'Supprimer ou pas le fichier actif
Doc = ActiveDocument.FullName
If MsgBox("Supprimer " & Doc & " ?", vbYesNo) = vbYes Then
ActiveDocument.Close False
Kill Doc
MsgBox Doc & " a été supprimé"
End If
Else
MsgBox "Aucun Plan-type pour cet élément pour le moment"
End If
End If
End Sub
Marsh Posté le 15-06-2009 à 15:37:57
Harkonnen a écrit : |
Oui, c'est beaucoup plus propre... mais plus difficile à expliquer !
Marsh Posté le 15-06-2009 à 15:53:57
Harkonnen a écrit : |
Ah au temps pour moi. Mais c'est bizarre que cela existe dans Excel et Visio et non dans Word.
Marsh Posté le 16-06-2009 à 09:32:46
Bonjour à tous,
pour compléter ma macro, je souhaite remplacer "Document 1 " par une variable.
Je m'explique, à l'ouverture d'un document, je veux récupérer le nom dans une variable et dans le traitement de ma macro, tester qu'il s'agit bien du mm doc pour le fermer.
Merci de votre aide
Marsh Posté le 16-06-2009 à 09:59:10
Mais tu peux pas intercepter le "Close" du document comme je l'ai expliqué, au lieu de faire des bidouilles plus ou moins douteuses ?
Marsh Posté le 16-06-2009 à 13:18:21
Effectivement cela fonctionne.
Par contre, sous word 2007, la macro plante sur "Activate", quelle commande puis-je utiliser pour le remplacer ?
Merci
Marsh Posté le 16-06-2009 à 14:09:26
C'est quoi le message d'erreur ?
Marsh Posté le 16-06-2009 à 14:12:44
Message d'erreur 5941
Le membre de la collection requis n'existe pas
Merci
Marsh Posté le 16-06-2009 à 14:14:52
Et t'as bien une fenêtre dont le caption est "Document1" ? Parce que là, t'essaies d'activer une fenêtre qui a pour titre "Document1", donc si elle n'existe pas, normal que ça plante
Marsh Posté le 16-06-2009 à 14:17:04
Excusez moi la macro à été modifié et bloque sur l'activation du doc initial :
Private Sub valid_Plan_type_doc_Click()
Dim Doc As String
Dim NomFichier As String
If element.Value <> "" Then
If element.Value = "procedure" Then
'Conserver le nom du document dans une variable
NomFichier = ActiveDocument.Name
'Ouvre le Plan-type situé sur votre disque en local
Documents.Add template:="C:\Microsoft Office\Templates\Adp\Ramses PE.dot", _
NewTemplate:=False, DocumentType:=0
'Ferme la boite dialogue
Type_Plan_Open.Hide
'Active le document initial
Windows(NomFichier).Activate
'Supprimer ou pas le document actif
Doc = ActiveDocument.FullName
If MsgBox("Voulez-vous fermer le document " & Doc & " ?", vbYesNo) = vbYes Then
ActiveDocument.Close False
'Kill Doc
'MsgBox Doc & " a été supprimé"
End If
Else
MsgBox "Aucun Plan-type pour cet élément pour le moment"
End If
End If
End
Merci de votre aide
Marsh Posté le 16-06-2009 à 15:34:59
j'ai trouvé la solution :
il faut rempacer Windows(NomFichier).Activate par Documents(NomFichier).Activate pour Word 2007
Marsh Posté le 15-06-2009 à 14:26:48
Bonjour à tous,
Cette macro fonctionne correctement dans la première partie, mais lorque je lui demande de fermer le "document 1", la boite de dialogue "enregistrer sous" apparait. Je désire simplement que ne s'affiche la boite de dialogue que l'on obtient en cliquant sur la croix en haut à droite du document "Fermer la fenetre"
Merci de votre aide
Private Sub valid_Plan_type_doc_Click()
If element.Value <> "" Then
If element.Value = "procedure" Then
'Ouvre le Plan-type
Documents.Add template:="C:\Microsoft Office\Templates\Adp\Ramses PE.dot", _
NewTemplate:=False, DocumentType:=0
'Ferme la boite dialogue
Type_Plan_Open.Hide
'Active le document initial
Windows("Document1" ).Activate
ActiveDocument.Close
Else
MsgBox "Vide pour le moment"
End If
End If
End Sub