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

XL 2010 Sauvegarde récurente a chaque jour

GADENSEB

XLDnaute Impliqué
Hello le Forum
J'ai cette petite macro qui tourne parfaitrement :
Elle a pour but de sauvegarder le fichier courant (elle se déclenché à l'enregistrement) en créant des version VI, VII ......
Cela créer bcp de version , et du coup , je souhaiterais que la sauvegarde de version ne se fasse qu'une fois par journée et non plus X version par jour
exemple :
V1 - 07/09/2016
V2 - 08/09/2016
V3 - 09/09/2016


Je suppos q'il faut faire un test sur le précédent enregistrement pour voir la date de création, mais je sais pas ou le placer.
QQn aurait une idée?

j'ai fais un fichier crashtest

Code:
Public NomFichierPublic As String
Dim sRep As String          'Répertoire de sauvegarde
Dim sFilename As String     'Nom du fichier

Sub SAUVEGARDE()
Dim Répertoire As String, Nf As String, NomFichier As String
Dim N As Long

Répertoire = ActiveWorkbook.Path & "\OLD"

'Si le dossier OLD n'éxiste pas alors je le créer
If Dir(Répertoire, vbDirectory) = "" Then MkDir (Répertoire)

'et j'incrémente le n° de fichier pour les 2 cas
  NomFichier = ThisWorkbook.Name
  Nf = Dir(Répertoire & "\" & NomFichier & "*" & ".xlsm")
  N = 0
  Do While Nf <> ""
    N = N + 1
    Nf = Dir
  Loop
'Sauvegarde une copie du fichier et ne touche donc pas au fichier en cours
  ActiveWorkbook.SaveCopyAs Filename:=Répertoire & "\" & NomFichier & " - V" & N + 1 & ".xlsm"

End Sub

Merci

Bonne journée
 

Pièces jointes

  • Classeur1.xlsm
    16.1 KB · Affichages: 44
C

Compte Supprimé 979

Guest
Salut Gadenseb,

Ultra simple, la réponse est dans ta question
Il faut sauvegarder une copie avec la date du jour et vérifier si la version existe

Code:
Sub SAUVEGARDE()
  Dim Répertoire As String, NomFichier As String
  Répertoire = ActiveWorkbook.Path & "\OLD"
  'Si le dossier OLD n'éxiste pas alors je le créer
  If Dir(Répertoire, vbDirectory) = "" Then MkDir (Répertoire)

  ' Créer un nom de fichier unique par jour
  NomFichier = ThisWorkbook.Name
  NomFichier = Left(NomFichier, Len(NomFichier) - 5)
  NomFichier = NomFichier & "-" & Format(Date, "dd.mm.yyyy") & ".xlsm"
  ' Vérifier si le fichier du jour n'existe pas
  If Dir(Répertoire & "\" & NomFichier) = "" Then
    'Sauvegarde une copie du fichier et ne touche donc pas au fichier en cours
    ActiveWorkbook.SaveCopyAs Filename:=Répertoire & "\" & NomFichier
  End If
End Sub

A+
 

GADENSEB

XLDnaute Impliqué
Hello
Perfecto !!
J'ai juste changer le format de la date pour une question de classement !

Merci à toi !!
bonne journée

Code:
NomFichier = NomFichier & "-" & Format(Date, "dd.mm.yyyy") & ".xlsm"
remplacé par 
NomFichier = NomFichier & "-" & Format(Date, "yyyy.mm.dd") & ".xlsm"
 

GADENSEB

XLDnaute Impliqué
Re !
Je reviens vers vous.
La sauvegarde est superbe.
Par contre, je me rend compte suite à un bug de mon PC , que je devrais faire un backup supplémentaire à chaque enregistrement en plus de la sauvegarde journalière...
Perdre 24 h de saisie dans la bdd peut être aussi embêtant que perdre le fichier....

Dans le dossier OLD, inscrire un fichier excel (MAIN BACKUP) avec chaque onglet (avec pour nom la date et l'heure: 2016 09 15 15h00) correspondant à une sauvegarde de ma bdd se trouvant dans l'onglet COMPTES du fichier originel.

C'est jouable ?
 
Dernière édition:

GADENSEB

XLDnaute Impliqué
J'ai trouvé ce début de piste ur internet ...

Code:
Sub Macro1()

' Macro1 Macro

    Sheets("Output" ).Select
    Sheets("Output" ).Copy
    ActiveWorkbook.SaveAs Filename:= _
        "\\tondisque\toto.xls", FileFormat:=xlNormal, _
        Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=False
    ActiveWindow.Close
End Sub

Que je pourrais adapter en :
Code:
Sub Macro1()

' Macro1 Macro

    Sheets("COMPTES" ).Select
    Sheets("COMPTES" ).Copy
.......... là il faut selectionnet le sous-dossier ......

    ActiveWorkbook.SaveAs Filename:= _
        "\\BACKUP\MAIN BACKUP.xlsm", FileFormat:=xlNormal, _
        Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ 
        CreateBackup:=False

.............. Il faut créer un onglet avec date jour (yyyy.mm.dd & heure & minutes)
................ il faut coller la selection 

End Sub

je suis sur la bonne piste ?
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Un truc que je me demande en ayant relu plusieurs fois depuis le début: Pourquoi ne pas faire la copie de sauvegarde systématiquement, avec la date du jour ? Comme ça il n'y en aurait toujours qu'une, mais ce serait la dernière effectuée de la journée.
Voir aussi les possibilités de sauvegarde automatique d'Excel. Lors d'un Enregistrer sous, bouton Outils, Options générales…, cocher Créer une copie de sauvegarde. En principe c'est ensuite reconduit à chaque enregistrement. Normalement la copie de sauvegarde est enregistrée avec l'extension xlk.
 

GADENSEB

XLDnaute Impliqué
Hello Danreb
Avc le post de 2 , la sauvegarde est journaliére en effet avec la date du jour
http://www.excel-downloads.com/threads/sauvegarde-récurente-a-chaque-jour.20011145/#post-20083684

Mais je me pose la question d'un éventuel plantage entre 2 sauvegarde, comment faire pou récupérer les données saisie pendant cet interval ?
c'est pkoi je pensais :
- Soit la sauvegarde de l'onglet BDD (COMPTES) a chaque enregistrement (entre 2 sauvardes journaliéres) dans un autre fichier excel (MAIN BACKUP) ou chaque onglet sera l'extract de l'onglet BDD (COMPTES) avec la date et l'heure (ex : 2016 09 16 - 16:35)
- Soit (je viens d'y penser) un extract avec la date et l'heure (ex : 2016 09 16 - 16:35) sous la forme d'un fichier séparé distinct

je ne sais pas ce qui est le mieux .... qu'est ce que tu en penses ?

dans la solution 2 j'ai trouvé cela (cf fichier joint)
https://www.google.com/url?q=http:/...ds-cse&usg=AFQjCNFpl137rcoyVclevBNAFw65tC08NQ

Code:
Sub ExportTxtChamp()
  repertoire = ThisWorkbook.Path
  Open repertoire & "\essai.txt" For Output As #1
  Set champ = [B1].CurrentRegion
  Dim lg(): ReDim lg(1 To champ.Columns.Count)
  For i = 1 To champ.Columns.Count
    lg(i) = champ.Cells(1, i).Width / 5
  Next i
  For lig = 1 To champ.Rows.Count
    ligne = ""
    For col = 1 To champ.Columns.Count
      ligne = ligne & champ.Cells(lig, col).Text
      If lg(col) - Len(champ.Cells(lig, col).Text) > 0 Then
         ligne = ligne & String(lg(col) - Len(champ.Cells(lig, col).Text), " ") & " "
      Else
         MsgBox "la colonne:" & col & " n'est pas assez large"
         Stop
      End If
    Next col
    Print #1, Left(ligne, Len(ligne) - 1)
  Next lig
  Close #1
End Sub
 

Pièces jointes

  • EcritFS.xls
    45.5 KB · Affichages: 32

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…