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 ) au cas où il ferait une erreur de saisie.

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 Sub

Re,

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 Sub

J'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 & sFic

Avec 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 Sub

Je 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.

Rechercher des sujets similaires à "sauvegarde automatique"