Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

annuler les modifications

  • Initiateur de la discussion yannick
  • Date de début
Y

yannick

Guest
Bonjour,

je cherche à courcircuiter la demande de sauvegarde d'excel avant la fermeture de celui-ci.
j'en suis a ce point dans mon code :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
reponse = MsgBox("Do you want to save this document ?", vbYesNo)
If (reponse = vbYes) Then
ActiveWorkbook.Save
Else
' il faut faire un rollback depuis la derniere sauvegarde
' puis sauvegarder
End If
end sub

ma question concerne donc la partie à mettre dans le Else : comment puis-je annuler toutes les opérations depuis la derniere sauvegarde ?

Merci d'avance,
Yannick.
 
S

schmail

Guest
Salut Yannick

Je démarre en VBA et voici un exemple (qui n'est pas de moi) mais qui fonctionne. Tu décortiques et tu adaptes. Ne t'inquiètes pas si mon exemple n'est pas optimum, un des spécialistes du forum te proposera des améliorations toutes pédagogiques...Bonne chance et @+



Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Rep As Long
If Not Me.Saved Then
Rep = MsgBox(" La secrétaire s'est sauvée sans enregistrer " & _
"les modifications apportées à " & Me.Name & Chr(10) & " Veux-tu le faire ?", _
vbQuestion + vbYesNoCancel)
Select Case Rep
Case vbYes
Me.Save
Case vbCancel
Cancel = True
Exit Sub
Case vbNo
Me.Saved = True 'Ici tu as l'instruction qui permet de ne pas enregistrer les nouveautés et d'échapper au Msg XL
End Select
End If

End Sub
 
Y

yannick

Guest
Merci schmail pour ta réponse.

J'ai essayé de voir comment je pouvais utiliser Me.saved, mais ca ne conviendra pas car avant de fermer excel, je dois mettre le document dans un certain etat et je dois donc le sauvegarder pour retrouver cet etat lors de la prochaine ouverture ... et avant de sauvegarder mes modifs, je dois sauvegarder ou annuler les modifs de l'utilisateur. Il me faut donc une solution qui annule les modifs de l'utilisateur avant que la macro fasse ses mofifs et sauve.
d'autres idées ? j'ai vu la methode CanUndo qui me permettrait de boucler mais elle ne marche que sur des frames, pas sur un document excel ...

D'avance merci
Yannick
 
D

DJN90

Guest
Bjr yannick,

J'espère avoir compris ce que tu souhaites faire.

Essaye avec cette instruction :

Workbooks("nom de ton fichier").Close SaveChanges:=False

Dan
 
Y

yannick

Guest
Merci pour ta réponse, tu as presque compris, mais ce n'est pas tout a fait ca.
en fait, avant de quitter, je veux cacher une feuille et enregistrer, mais il faut auparavent que l'utilisateur sauvegarde ou non son travail. Donc, dans l'ordre, ca donne la chose suivante :

1 - l'utilisateur fait des modifs
2 - l'utilisateur ferme le document
3 - avant la fermeture, ma proc vba lui demande s'il veut sauvegarder
4.1 - si oui, je sauvegarde ses modifs
4.2 - si non, j'annule ses modifs (c'est ce point que je ne sais pas faire)
5 - je cache ma feuille
6 - je sauvegarde et le document se ferme

Le problème est donc que vba doit sauvegarder ma modif de toute facon avant de sortir, et que je dois gérer la possibilité que l'utilisateur sauvegarde ou non son propre travail. Donc ma question serait plutot :

"comment annuler en vba les modifications faites sur le document depuis la derniere sauvegarde" ?
(ce qui correspondrait, pour ceux qui connaissent oracle, a faire un rollback)
 
@

@+Thierry

Guest
Salut Yannick, Dan et Re Schmail

Vite fait car j'ai du taff et je n'ai lu que le dernier Post de 15-05-03 14:25

Ce que tu demandes parrait vraiment impossible à réaliser... Cependant il peut exister un fichier espion qui irait de pair et qui s'ouvrirait, et se sauverait en macro évènementielle... de manière invible et transaprente à au User..........

Bon je vous laisse
@+Thierry
 
Y

yannick

Guest
Salut Thierry,

Pourrais-tu m'eclairer un peu plus sur ce fichier espion ? j'essaye de me l'imaginer, mais je n'arrive pas à voir en quoi il me permettrait de pouvoir annuler les opérations faites par l'utilisateur depuis la derniere sauvegarde ?
Sinon, ton idée de fichier m'a fait penser a la solution suivante : sur les evenements open et beforesave, je pourrais utiliser la methode SaveCopyAs. Cela me permettrait, lors du BeforeClose, d'ecraser l'original avec la copie si l'utilisateur de souhaite pas sauvegarder. Maintenant, est-il possible d'ecraser l'original avec la copie, sachant que le code vba s'execute depuis l'original ?

Merci d'avance,
Yannick
 
@

@+Thierry

Guest
Re Yannick et le Fil

Très vite fait (bcp de boulot)

Par fichier espion, je pensais que tu voulais avoir des statistiques dans ta feuille cachée... Et donc je te proposais de le faire par un autre fichier qui ne serait ouvert/écrit/sauvé et fermé par la Macro BeforeClose du classeur à surveiller... (S'inspirant de la méthode de ce fil Lien supprimé)

Maintenant si tu veux aussi des back up depuis la dernière sauvegarde.. Essaie d'utiliser la méthode "CreateBackup:=True" applicable au moment du save as...
(les fichiers en back up ont l'extension TestBackUp.xlk)

Bon Travail
@+Thierry
 

Discussions similaires

Réponses
2
Affichages
410
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…