• Initiateur de la discussion Initiateur de la discussion SVri
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

SVri

XLDnaute Nouveau
Bonjour le Forum,

J'ai ajouté à un classeur une macro BeforeClose pour enregistrer une copie du fichier sur un serveur à chaque enregistrement (avec suffixe date+heure, pour conserver une trace de chaque enregistrement).

Cela fonctionne très bien lors du premier enregistrement.
Si j'ouvre en modif un fichier déja enregistré: lors de l'enregistrement, Excel crée bien la copie de 'sauvegarde', mais plante à l'enregistrement 'réel' du fichier.
Un problème dans mon code ? 😕

Mon code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
If Not ActiveWorkbook.Saved And Range("C4").Value <> 1 Then
fnAme = "C:\" & Range("K24").Value & " - " & Hour(Now) & Minute(Now) & Second(Now) & ".xls"
ActiveWorkbook.SaveAs Filename:=fnAme
End If
End Sub
 
Re : Copie de sauvegarde

Bonsoir SVri

Si tu veux faire une sauvegarde avec l'evenement BeforeClose pourquoi tu as une procedure BeforeSave.

Je vais pas t'expliquer pourquoi exactement ça fonctionne pas (je suis pas assez competent) avec BeforeSave quoi que je peux me douter, mais ça fonctionne trés bien avec BeforeClose j'ai testé.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not ActiveWorkbook.Saved And Range("C4").Value <> 1 Then
fname = "C:\" & Range("K24").Value & " - " & Hour(Now) & Minute(Now) & Second(Now) & ".xls"
ActiveWorkbook.SaveAs Filename:=fname
End If
End Sub
 
Re : Copie de sauvegarde

Bonjour treza88,

Autant pour moi, il s'agit bien d'une procédure BeforeSave que je veux mettre en place (ça m'apprendra à relire ma prose avant de poster un message ...).

Il s'agit bien d'une copie qui doit être faite systématiquement à l'occasion de chaque enregistrement du fichier.
Alors pourquoi donc (en modif uniquement) Excel crée bien la copie de 'sauvegarde', mais plante à l'enregistrement 'réel' du fichier?
Il y a sûrement un paramètre mal positionné dans ma macro ...
 
Re : Copie de sauvegarde

Bonjour Mutzik,
Il n'y a pas de message d'erreur classique provenant de VB.
Il s'agit d'un plantage d'Excel (avec le message me demandant si je veux envoyer un rapport d'erreur à Microsoft).

En mettant quelques MsgBox dans la sub, je m'aperçois qu'elle est exécutée 2 fois simultanément (est-ce normal??)
ci-dessous le nouveau code:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
    MsgBox ("entre dans la sub")
If Not ActiveWorkbook.Saved And Range("C4").Value <> 1 Then
    MsgBox ("entre dans le If du BeforeSave" & Chr(13) & "Saveasui  " & SaveAsUi & Chr(13) & "cancel " & Cancel & Chr(13) & "C4: " & Range("C4").Value)
        
fname = "C:\" & Range("K24").Value & " - " & Hour(Now) & Minute(Now) & Second(Now) & ".xls"
ActiveWorkbook.SaveAs Filename:=fname
Range("C4").Value = 1
    MsgBox (" Fin de la boucle") & Chr(13) & "Saveasui  " & SaveAsUi & Chr(13) & "cancel " & Cancel & Chr(13) & "C4: " & Range("C4").Value
    End If
MsgBox ("Fin du BeforeSave")
End Sub
T'est-il possible d'essayer et me dire si tu as la même erreur (j'utilise Excel 2003 11.5612.5606 sur Win XP SP2)?
Merci.
 
Re : Copie de sauvegarde

Re,

En fait, on demande à excel avant de faire une sauvegarde de faire une sauvegarde du fichier (sous un autre nom)
Cela étant, on retourne dans la même procédure (before save) qui demande de faire une sauvegarde

C'est le serpent qui se mort la queue

Je pense qu'il vaut mieux laisser la sauvegarde normale telle quelle et de mettre cette procédure de sauvegarde dans before_close au lieu de before_save
 
Re : Copie de sauvegarde

Bon, alors j'ai résolu mon problème comme ça:
(si ça peut aider quelqu'un):
Une variable 'EstSauv' définit si le fichier a été enregistré.

Code:
Private Sub Workbook_Open()
    EstSauv = False
    Call RenseigneInfos
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
fName = "C:\" & Range("K24").Value & ".xls"
If EstSauv Then ActiveWorkbook.SaveAs Filename:=fName
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
EstSauv = True
End Sub

Conclusion: faut pas enregistrer dans le BeforeSave !! 😉
 
Re : Copie de sauvegarde

Pas tout à fait:
En effet, lorsque l'utilisateur a enregistré, ou bien s'il a ouvert le fichier sans rien toucher, ActiveWorkbook.Saved = true.
Du coup, à la fermeture du fichier je ne sais pas si je dois faire une copie du fichier ou non.
C'est pourquoi je passe par une variable à moi que je mets à true lorsque l'utilisateur enregistre.

En tout cas, merci pour ton aide ! 😀

SVri
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
687
Réponses
3
Affichages
856
Retour