Fermeture fichier + Enregistrer sous

B

BS

Guest
Bonjour à tous ,

Lors de la fermeture d'un fichier (utilisation de la croix) , un message d'alerte Windows demande si on veut enregistrer les modifications or j'aimerai que quand la personne clique sur enregistrer , la boite de dialogue Enregistrer sous apparaisse . Donc en VBA :
- Comment s'appelle cette fenetre d'alerte ?
- Comment faire apparaitre Enregister ?

Je pense qu'il faut inclure tout ça dans une procédure "beforeClose" mais je n'arrive pas à mes fins.

Merci de votre aide.

BS
 
Z

ZON

Guest
Bonjour à tous,


BS, c'est bien dans l'évènement beforeclose

if cancel=true then application.dialogs(xldialogsaves).show



d'ailleurs dans l'aide VBA en recherchant la collection dialogs tu trouveras toutes les boites de dialogues que tu peux afficher avec leurs arguments.
A+++
 
@

@+Thierry

Guest
Salut BS, le Forum

Pas sûr d'avoir bien compris ta demande.

Pour faire apparaitre la boite de dialogue "Enregistrer sous" c'est cette instruction :
Application.Dialogs(xlDialogSaveAs).Show

Pour éviter d'avoir le message d'alerte à la fermeture par la croix, il y a cette méthode qui consiste à faire croire à Excel que le classeur est sauvé alors qu'il ne l'est pas :
ThisWorkbook.Saved = True

Ces deux code peuvent être utilisés dans la procédure Workbook_BeforeClose

On peut aussi faire comme ceci pour utiliser en combiné ces deux codes :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Sauver As Boolean
Sauve = ThisWorkbook.Saved
If Sauve = False Then
Application.Dialogs(xlDialogSaveAs).Show
End If
End Sub

Bonne Soirée
@+Thierry
 
@

@+Thierry

Guest
Salut Zon

T'avais point vu car j'étais en train d'essayer ceci... Mais pas de résultat probant...

Private Sub Workbook_BeforeClose(Cancel As Boolean)
SauveAs
End Sub

Sub SauveAs()
Dim SauverSous As Boolean, Message As Boolean

SauverSous = Application.Dialogs(xlDialogSaveAs).Show

If SauvezSous = False Then
Message = MsgBox("Vous n'avez pas voulu sauvez une copie de ce classeur" & _
vbCrLf & "Voulez vous sauvez ce classeur lui-même", _
vbQuestion + vbYesNo, "Attention Sauvegarde")
If Message = vbYes Then
ThisWorkbook.Save
Else
ThisWorkbook.Saved = True
End If
Else: ThisWorkbook.Saved = True
End If

End Sub

Mais hélas dans les deux cas (je saave avec Save As ou je ne sauve rien avec Save As...) J'ai le message !!

Pourtant sans procédure évènementielle le test code ci-dessous fonctionne !

Sub EnregSous()
SaveAs = Application.Dialogs(xlDialogSaveAs).Show
If SaveAs = False Then
MsgBox "Pas Glop"
Else
MsgBox "Glop Glop"
End If
End Sub

Bon mais là je n'ai plus le temps d'approfondir mais il doit sûrement y avoir une raison !

Bonne Soirée
@+Thierry
 
@

@+Thierry

Guest
Correctif ! du post de 18:21

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Sauve As Boolean '<<<<<<<<<<<<<<<< ICI (pas Sauver !!)
Sauve = ThisWorkbook.Saved
If Sauve = False Then
Application.Dialogs(xlDialogSaveAs).Show
End If
End Sub

oups
@+Thierry
 
B

BS

Guest
Bonjour Zon, @+Thierry et le forum,

Je reprends le fil ... :)

Pour le contexte : Les gens reçoivent un fichier par mail. Après l'avoir remplit, il m'est renvoyé par mail. Or les personnes peuvent décider de le remplir en 2 fois et donc d'enregistrer ce fichier. Et là problème ! :
- Si il détache le fichier , c'est parfait, ils savent où ils l'enregistre et tout et tout
-Mais si il lance le fichier à partir du mail , le fichier est dans C:/ Temp. Quand on ferme le fichier, le message Windows demande si on veut enregistrer . Si on dit Oui , ça l'enregistre sous Temp. Or La personne ne va jamais le retrouver !!!!

Donc, je voulais accèder à la boite de dialogue "voulez-vous enregistrer vos modifications" pour que quand la personne clique sur OUI , le fenêtre enregistrer sous apparaissent ...

Voilou donc le pourquoi du comment .

J'ai essayé les lignes mais ça ne marche pas !

Merci de votre aide
 

Discussions similaires

Statistiques des forums

Discussions
314 662
Messages
2 111 638
Membres
111 242
dernier inscrit
Oyam