Sauvegarde automatique
Bonjour, je fais appel à vous car j'aimerais que lorsque je je clique sur valider de mon formulaire les données soient ajouter à un fichier "données" (pour le moment cette fonction marche).
En plus de cela j'aimerais que lorsque l'on ouvre le fichier "formulaire" une sauvegarde automatique soit enregistrée dans un dossier différent et qu'au bout de 10 sauvegarde, on boucle pour effacer la première.
Pourriez-vous m'éclairer sur ce sujet.
Merci d'avance, cordialement.
PS : le mot de passe est 0109
Bonjour Sirol,
Voici un code pour à mettre dans ThisWorkbook
Private Sub Workbook_Open()
Dim sPath As String, sFic As String
Dim Compteur As Integer, PremFic As String
' Chemin d'accès au sauvegarde
sPath = "C:\Temp\"
' Petit message à l'utilisateur
Application.StatusBar = "Veuillez patienter, backup en cours..."
' Nom du fichier de sauvegarde
sFic = ThisWorkbook.Name
sFic = Replace(sFic, ".xlsm", Format(Date, "yyyy.mm.dd") & ".xlsm")
' Effectuer la copie
ThisWorkbook.SaveCopyAs sPath & sFic
' Vérifier le nmbre de fichier
sFic = Dir(sPath & "trs-global-2021-formulaire*")
PremFic = "z" ' Le premier nom de fichier mémorisé sera forcément inférieur
Do While sFic <> ""
If sFic < PremFic Then PremFic = sFic
Compteur = Compteur + 1
' on passe au fichier suivant
sFic = Dir
' Si le nombre de fichier est supérieur à 10
If Compteur > 10 Then
' Supprimer le plus ancien
Kill sPath & PremFic
End If
Loop
End Sub@+
Tout d'abord, merci d'avoir pris le temps de me répondre et d'écrire ce code.
Je reviens vers vous car je rencontre un problème avec la sauvegarde automatique.
La première sauvegarde se passe nickel, mais dès que je referme et ré ouvre l'excel "formulaire" plus rien ne se passe. Une nouvelle sauvegarde se crée uniquement lorsque j'ouvre l'excel "données" (l'excel back-up) créé par la sauvegarde automatique. Je vous joins à nouveaux les fichiers pour que vous compreniez mieux ce qui se passe.
Re,
Si vous voulez plusieurs sauvegardes par jour, il faudra ajouter heure, minutes et secondes au nom du fichier
@+
Merci de votre aide malheureusement, je crains avoir mal formulé ma question initiale.
Avec votre code, j'obtiens une copie du fichier "formulaire" à chaque ouverture. Ce que je voulais faire c'était une copie du fichier "données" à chaque ouverture du fichier "formulaire". Et qu'au bout de 10 sauvegarde la premières soit écrasée, je ne sais pas si cela est possible ?
Re,
Effectivement vous avez mal formulé votre demande
Il suffit de modifier le code pour que cela prenne en compte le bon fichier
Rebonjour, le problème étant que je débute en VBA et je ne vois pas où changer le nom, pour que le fichier sauvegardé en copie soit le fichier "données", ni quel code écrire pour effectuer cette action...
Bonjour Sirol,
Oups désolé, vu le code déjà existant je pensais que vous saviez faire
Voici le fichier modifié, la backup du fichier de données se fait juste avant son ouverture et son traitement
@+
Re, merci pour les modifications. Oui j'ai récupérer le code d'un autre projet (non réalisé par moi) et j'ai simplement adapter le code.
J'ai bien repris votre fichier et fait un "call backup" au moment de l'ouverture du fichier.
Mais je rencontre une erreur "argument non facultatif".
Je vous mets le code que j'ai actuellement, encore désolé de vous demander votre aide une fois de plus.
Bonsoir Sirol,
Je n'ai pas mis le Call Backup dans ThisWorkBook dans mon classeur et pour cause
Ma sub Backup attend comme argument le chemin et le nom du fichier à copier
Normalement on a besoin de faire la sauvegarde seulement au moment du remplissage du suivi, non ?
A+
Bonjour, excusez moi j'avais mal compris le code.
j'ai ajouter le nom du fichier à copier en plus du chemin que j'avais déjà renseigné, cela à l'air de mieux fonctionné.
En revanche, je ne comprend pas comment la sub backup peut se lancer si elle est dans un module et qu'elle n'est appelée nul part.
C'est pour cela que j'avais ajouté un "call backup" à l'ouverture du fichier, cette backup devant s'effectuer lorsque l'utilisateur ouvre l'excel pour assurer une sauvegarde backup (comme son nom l'indique
Voila donc ce que j'ai dans un module :
Sub Backup(sPathFic As String)
Dim sPath As String, sFic As String
Dim Compteur As Integer, PremFic As String
' Chemin d'accès au sauvegarde
sPath = "Z:\Atelier.Usinage\Back up\"
' Petit message à l'utilisateur
Application.StatusBar = "Veuillez patienter, backup en cours..."
' Nom du fichier de sauvegarde
sFic = Mid(sPathFic, InStrRev(sPathFic, "\trs-global-2021-Données") + 1)
sFic = Replace(sPathFic, ".xlsm", Format(Now(), "dd.mm.yyyy - hhmmss") & ".xlsm")
' Effectuer la copie du fichier de données
FileCopy sPathFic, sPath & sFic
' Vérifier le nombre de fichiers
sFic = Dir(sPath & "trs-global-2021-donnees*")
PremFic = "z" ' Le premier nom de fichier mémorisé sera forcément inférieur
Do While sFic <> ""
If sFic < PremFic Then PremFic = sFic
Compteur = Compteur + 1
' on passe au fichier suivant
sFic = Dir
' Si le nombre de fichier est supérieur à 10
If Compteur > 10 Then
' Supprimer le plus ancien
Kill sPath & PremFic
End If
Loop
End SubRe,
Comme le chemin d'accès est définit dans la procédure
' Chemin d'accès au sauvegarde
sPath = "Z:\Atelier.Usinage\Back up\"Il faut alors supprimer ce qui est entre parenthèses
Sub Backup(sPathFic As String)Devient
Sub Backup()Comme cela, la procédure peut être appelé à l'ouverture du classeur
@+
J'ai bien enlever les termes entre parenthèse
Sub Backup()mais j’obtiens alors l'erreur variable non définie avec ce code :
Sub Backup()
Dim sPath As String, sFic As String
Dim Compteur As Integer, PremFic As String
' Chemin d'accès au sauvegarde
sPath = "Z:\Atelier.Usinage\Back up\"
' Petit message à l'utilisateur
Application.StatusBar = "Veuillez patienter, backup en cours..."
' Nom du fichier de sauvegarde
sFic = Mid(sPathFic, InStrRev(sPathFic, "\") + 1)
sFic = Replace(sPathFic, ".xlsm", Format(Now(), "dd.mm.yyyy - hhmmss") & ".xlsm") '
' Effectuer la copie du fichier de données
FileCopy sPathFic, sPath & sFic
' Vérifier le nombre de fichiers
sFic = Dir(sPath & "trs-global-2021-donnees*")
PremFic = "z" ' Le premier nom de fichier mémorisé sera forcément inférieur
Do While sFic <> ""
If sFic < PremFic Then PremFic = sFic
Compteur = Compteur + 1
' on passe au fichier suivant
sFic = Dir
' Si le nombre de fichier est supérieur à 10
If Compteur > 10 Then
' Supprimer le plus ancien
Kill sPath & PremFic
End If
Loop
End SubJ'ai également essayer de définir sPathFic sur la seconde ligne mais j'obtiens cette fois l'erreur "nom ou numéro de fichier non défini à la ligne
FileCopy sPathFic, sPath & sFicAvec ce code :
Sub Backup()
Dim sPath As String, sFic As String, sPathFic As String
Dim Compteur As Integer, PremFic As String
' Chemin d'accès au sauvegarde
sPath = "Z:\Atelier.Usinage\Back up\"
' Petit message à l'utilisateur
Application.StatusBar = "Veuillez patienter, backup en cours..."
' Nom du fichier de sauvegarde
sFic = Mid(sPathFic, InStrRev(sPathFic, "\") + 1)
sFic = Replace(sPathFic, ".xlsm", Format(Now(), "dd.mm.yyyy - hhmmss") & ".xlsm") '
' Effectuer la copie du fichier de données
FileCopy sPathFic, sPath & sFic
' Vérifier le nombre de fichiers
sFic = Dir(sPath & "trs-global-2021-donnees*")
PremFic = "z" ' Le premier nom de fichier mémorisé sera forcément inférieur
Do While sFic <> ""
If sFic < PremFic Then PremFic = sFic
Compteur = Compteur + 1
' on passe au fichier suivant
sFic = Dir
' Si le nombre de fichier est supérieur à 10
If Compteur > 10 Then
' Supprimer le plus ancien
Kill sPath & PremFic
End If
Loop
End SubJe ne comprend pas d'où vient le problème.
Je vous joins également le fichier actuel pour que ça soit plus claire pour vous.
Cordialement.
Up, des nouvelles ?
Bonjour Sirol,
Exécutez le code en mode pas à pas (F9 sur une ligne puis F8 ensuite)
et regardez les valeurs que prennent vos variables en pointant le curseur de la souris dessus.
Vous vous apercevrez, que rien ne définit "sPathFic"
Bonjour, je vois bien que "sPathFic" n'est pas défini, mais je ne comprend pas à quoi il sert et quoi mettre pour le définir
Quelqu'un pourrait-il m'aider ?
Cordialement.