Bonjour a vous.
Une solution mais aucun moyen de savoir si cela marche sur Mac
Alt f11 et copier coller.
Dans thisWorbook du classeur :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
GetDirectory
ChoixNbSauvegardes
Sauve
End Sub
D'autre part dans un module :
Public Delai
Public Dossier
Public NbFicMax
Dim Nom
Public NextTime
Sub Sauve()
Dim strDate As String
Count = Len(ActiveWorkbook.Name)
Nom = Left(ActiveWorkbook.Name, Count - 4)
strDate = Format(Date, "dd-mm-yy") & " " & Format(Time, "h-mm-ss")
ThisWorkbook.SaveCopyAs Filename:=Dossier & Nom & strDate & ".xls"
DeleteEnTrop (Dossier)
End Sub
Function GetDirectory(Optional Msg) As String
GetDirectory = C 'choix du dossier de sauvegarde
Dossier = GetDirectory & "\"
End Function
Sub ChoixNbSauvegardes()
NbFicMax = 4 'choix du nombre de sauvegardes
End Sub
Sub DeleteEnTrop(path)
Dim Fic As String
Dim Tabl() As Variant
Dim i As Integer
'Stocker les noms et les dates de sauvegarde des
'archives dans un tableau
ReDim Tabl(1, 0)
Fic = Dir(path)
Do While Fic <> ""
ReDim Preserve Tabl(1, UBound(Tabl, 2) + 1)
Tabl(0, UBound(Tabl, 2)) = Fic
Tabl(1, UBound(Tabl, 2)) = FileDateTime(path & Fic)
Fic = Dir
Loop
'S'il y a plus de fichiers que défini dans NbMax
'on trie le tableau des archives par date décroissante
'et on efface les premiers pour n'en laissser
'que le nombre choisi dans NbMax
If UBound(Tabl, 2) > NbFicMax Then
Tri Tabl, 1, UBound(Tabl, 2)
For i = UBound(Tabl, 2) To NbFicMax + 1 Step -1
Kill path & Tabl(0, i)
Next i
End If
End Sub
'Procédure récursive classique
'de tri adaptée au tri d'un
'tableau à 2 dimensions
Sub Tri(ByRef Liste As Variant, ByVal Bas As Long, ByVal Haut As Long)
Dim i As Long, j As Long
Dim Milieu As Variant, Echange As Variant
i = Bas
j = Haut
Milieu = Liste(1, Int(Bas + Haut) / 2)
Do
While Liste(1, i) > Milieu
i = i + 1
Wend
While Milieu > Liste(1, j)
j = j - 1
Wend
If i <= j Then
Echange = Liste(1, i)
Liste(1, i) = Liste(1, j)
Liste(1, j) = Echange
Echange = Liste(0, i)
Liste(0, i) = Liste(0, j)
Liste(0, j) = Echange
i = i + 1
j = j - 1
End If
Loop Until i > j
If Bas < j Then Tri Liste, Bas, j
If i < Haut Then Tri Liste, i, Haut
End Sub
(GetDirectory = C 'choix du dossier de sauvegarde) :chemin ou le classeur sera sauvegarder.a determiner
(NbFicMax = 4 'choix du nombre de sauvegardes) :sauvegarde incrémenté de 4 exemplaires.
(strDate = Format(Date, "dd-mm-yy") & " " & Format(Time, "h-mm-ss"): sauvegarde avec format dates.
Sinon la solution de lermite et beaucoup plus simple.