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

XL 2010 sauvegarde avec générations

  • Initiateur de la discussion Initiateur de la discussion jpmetge
  • 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 !

jpmetge

XLDnaute Nouveau
Bonjour,
Je souhaiterais écrire un code VBA qui à, l'ouverture d'un fichier excel, enregistre une copie datée et qui ne conserve que les 5 dernières générations.
Merci de votre aide
 
Bonjour
Peut-être que cette discussion pourrait t'apporter une réponse :


a+
 
Bonjour jpmetge, CHALET53, Eric C,

Placer tout ce code dans le ThisWorkbook du fichier à sauvegarder :
VB:
Private Sub Workbook_Open()
If Me.Name Like "*-*-*-*-*" Then Exit Sub
Dim chemin$, nom$, ext$, x$, dat As Date, fichier$, a(), n%
chemin = Me.Path & "\"
nom = Me.Name
ext = Mid(nom, InStrRev(nom, "."))
x = Len(nom) - Len(ext)
nom = Left(nom, x)
dat = FileDateTime(Me.FullName) 'date/heure du dernier enregistrement
Me.SaveCopyAs chemin & nom & Format(dat, " dd-mm-yy hh-mm-ss") & ext
fichier = Dir(chemin & nom & "*-*-*-*-*.xlsm")
While fichier <> ""
    ReDim Preserve a(n) 'base 0
    a(n) = CDate(Mid(fichier, x + 2, 9) & Replace(Mid(fichier, x + 11, 8), "-", ":"))
    If a(n) <> "" Then n = n + 1
    fichier = Dir
Wend
tri a, 0, UBound(a)
'---on ne garde que les 5 derniers fichiers---
For n = 0 To UBound(a) - 5
    Kill chemin & nom & Format(a(n), " dd-mm-yy hh-mm-ss") & ext
Next
End Sub

Sub tri(a, gauc, droi) ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
A+
 
Dernière édition:
Bonjour à tous .
Ma contribution
dans un répertoire de sauvgarde, création et indexation ( 1 à 5) des fichiers
Private Sub Workbook_Open()
Set fso = CreateObject("scripting.filesystemobject")
chemin = ThisWorkbook.Path
repsauv = chemin & "\save\" 'sous-entand q'un répertoire sa ve à été créé
nom = ThisWorkbook.Name
Set repsave = fso.getfolder(repsauv)
'réindexation des fichiers existant
For Each f In repsave.Files
nomdest = Left(f.Name, Len(f.Name) - 5)
ind = Right(nomdest, 1)
If ind = 1 Then f.Delete ' si index 1 le fichier est éffacé
If ind >= 2 Then f.Name = Left(nomdest, Len(nomdest) - 1) & ind - 1 & ".xlsm"
Next

If ind = "" Then ind = 1
myfich = chemin & "\" & nom
newfich = repsauv & Left(nom, Len(nom) - 5) & Year(Date) & Month(Date) & Day(Date) & "heure" & _
Hour(Time) & "-" & Minute(Time) & "-" & Second(Time) & "-" & 5 & ".xlsm"
fso.CopyFile myfich, newfich ' copy de la sauvegarde
End Sub
 
Bonjour,
Pas mal, mais celà ne génère pas le nombre limité de versions de mon fichier.
 
re
en théorie si!
A chaque fois que tu ouvre le fichier, il renomme les anciens avec ind-1 et le dernier est copié avec ind 5.
si l'indice est 1 je supprime le fichier
Je vais vérifier
Il me semble que cela fonctionne
 
Bonjour à vous tous et le forum,

Je viens de voir votre code celui de job75 fonctionne bien,
Pour sousou t'on morceau de code ne fonctionne pas

ce morceau
VB:
If ind >= 2 Then f.Name = Left(nomdest, Len(nomdest) - 1) & ind - 1 & ".xlsm"

bonne continuation
jcf
 
- 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
32
Affichages
833
D
  • Question Question
Réponses
5
Affichages
72
Didierpasdoué
D
Réponses
4
Affichages
197
Réponses
3
Affichages
80
Réponses
9
Affichages
186
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…