Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1261 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Fermer fenetre sous Word

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fermer fenetre sous Word

n°1895169
hoob91
Posté le 15-06-2009 à 14:26:48  profilanswer
 

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

mood
Publicité
Posté le 15-06-2009 à 14:26:48  profilanswer
 

n°1895171
Deamon
Posté le 15-06-2009 à 14:28:54  profilanswer
 

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.

n°1895185
hoob91
Posté le 15-06-2009 à 14:46:34  profilanswer
 

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

n°1895196
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-06-2009 à 15:04:55  profilanswer
 

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)
n°1895201
Deamon
Posté le 15-06-2009 à 15:11:36  profilanswer
 

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
n°1895203
produvba
Posté le 15-06-2009 à 15:13:10  profilanswer
 

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

n°1895204
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-06-2009 à 15:14:54  profilanswer
 

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)
n°1895205
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-06-2009 à 15:16:19  profilanswer
 

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)
n°1895210
hoob91
Posté le 15-06-2009 à 15:21:31  profilanswer
 

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

n°1895227
produvba
Posté le 15-06-2009 à 15:37:57  profilanswer
 

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 !

mood
Publicité
Posté le 15-06-2009 à 15:37:57  profilanswer
 

n°1895254
Deamon
Posté le 15-06-2009 à 15:53:57  profilanswer
 


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

n°1895506
hoob91
Posté le 16-06-2009 à 09:32:46  profilanswer
 

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

n°1895517
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-06-2009 à 09:59:10  profilanswer
 

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)
n°1895690
hoob91
Posté le 16-06-2009 à 13:18:21  profilanswer
 

Effectivement cela fonctionne.
Par contre, sous word 2007, la macro plante sur "Activate", quelle commande puis-je utiliser pour le remplacer ?
 
Merci

n°1895715
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-06-2009 à 14:09:26  profilanswer
 

C'est quoi le message d'erreur ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°1895717
hoob91
Posté le 16-06-2009 à 14:12:44  profilanswer
 

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

n°1895719
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-06-2009 à 14:14:52  profilanswer
 

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)
n°1895723
hoob91
Posté le 16-06-2009 à 14:17:04  profilanswer
 

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

n°1895773
hoob91
Posté le 16-06-2009 à 15:34:59  profilanswer
 

j'ai trouvé la solution :
il faut rempacer Windows(NomFichier).Activate par Documents(NomFichier).Activate pour Word 2007


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Fermer fenetre sous Word

 

Sujets relatifs
[resolu] clique sur le bouton et une autre fenêtre s'ouvre[RESOLU]Fermer une JFrame depuis un Bouton dans un Panel
afficher un doc PDF ou word dans la même page HTMLDétecter une fenetre internet active VBA excel
problème fenètre videImpact d'un changement de min word length sur recherche full text ?
pb pour fermer une boucle (calculatrice)[php][COM] objet com coté serveur (word)
[VBAExcel Résolu] Copier coller de excel dans word[GTK+] Ajouter un boutton a une fenetre grace à une fonction
Plus de sujets relatifs à : Fermer fenetre sous Word


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR