Fermer fenetre sous Word

Fermer fenetre sous Word - VB/VBA/VBS - Programmation

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

Reply

Marsh Posté le 15-06-2009 à 14:26:48   

Reply

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.

Reply

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

Reply

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 :
  1. Private Sub Document_Close()
  2.   Dim res = MsgBox("Voulez vous enregistrer les modifications apportées à Document 1 ?", "Enregistrement des modifications", MsgBoxStyle.YesNo)
  3.   If res = MsgBoxResult.Yes Then
  4.      ActiveDocument.Save
  5.   Else
  6.      ActiveDocument.Close SaveChanges: = wdDoNotSaveChanges
  7.   End If
  8. End Sub


Message édité par Harkonnen le 15-06-2009 à 15:12:23

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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.

Message cité 1 fois
Message édité par Deamon le 15-06-2009 à 15:12:23
Reply

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

Reply

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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-06-2009 à 15:16:19    

produvba a écrit :

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


Intercepter l'évenement "Close" est quand même un peu plus propre non ? [:pingouino]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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

Reply

Marsh Posté le 15-06-2009 à 15:37:57    

Harkonnen a écrit :


Intercepter l'évenement "Close" est quand même un peu plus propre non ? [:pingouino]


 
Oui, c'est beaucoup plus propre... mais plus difficile à expliquer !

Reply

Marsh Posté le 15-06-2009 à 15:37:57   

Reply

Marsh Posté le 15-06-2009 à 15:53:57    


Ah au temps pour moi. Mais c'est bizarre que cela existe dans Excel et Visio et non dans Word.

Reply

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

Reply

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 ? [:pingouino]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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

Reply

Marsh Posté le 16-06-2009 à 14:09:26    

C'est quoi le message d'erreur ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-06-2009 à 14:12:44    

Message d'erreur 5941
Le membre de la collection requis n'existe pas
 
Merci

Reply

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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed