bonjour,
merci à vous Toukoul pour le code.
j'ai essayé de le modifier pour le mettre dans le fichier mais petit problème il ne supprime pas les fichiers
je pense que cela viens de moi dans la réécriture du code.
si une bonne âme pourrait jeter un oeil un grand merci à vous
Sub SauvTempo()
Application.DisplayAlerts = False
'créer une sauvegarde avant la lecture seule
Dim Path_name As String
Dim File_name As String
Dim File_name1 As String
Dim Complete_File_name As String
Dim DossierPrincipal As String
Dim ancien_fichier As String
Dim idx As Long, listFich() As Variant, fini As Boolean, idx_max As Integer
ReDim listFich(1 To 2, 1 To 1), tmp(2)
'Choix du dossier
Path_name = ThisWorkbook.Path
DossierPrincipal = Path_name & "\" & " temp"
If Len(Dir(DossierPrincipal, vbDirectory)) > 0 Then
'le dossier principale existe
' le dossier principale n'exite pas
Else
'creation du dossier principale
MkDir Path_name & "\" & " temp"
End If
'creation du nom de sauvegarde
File_name = "132_RIC_PLANIFICATION " & "lecture"
File_name1 = File_name & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss") & ".xlsm"
Complete_File_name = DossierPrincipal & "\" & File_name1
ancien_fichier = Dir(DossierPrincipal & "* temp*" & "*.xlsm*", vbNormal)
'enresgistre sous..
ActiveWorkbook.SaveCopyAs Filename:=Complete_File_name
Do While Len(ancien_fichier) > 0
'Assigne la date du ficier en cours une date/heure dans une variable
idx = idx + 1
ReDim Preserve listFich(1 To 2, 1 To idx)
listFich(1, idx) = FileDateTime(Complete_File_name & ancien_fichier)
listFich(2, idx) = ancien_fichier
'Prend le prochain fichier dans le dossier
ancien_fichier = Dir
Loop
'trie par dates décroissantes
Do
fini = True
For idx = 1 To UBound(listFich, 2) - 1
If listFich(1, idx) < listFich(1, idx + 1) Then
tmp(1) = listFich(1, idx)
tmp(2) = listFich(2, idx)
listFich(1, idx) = listFich(1, idx + 1)
listFich(2, idx) = listFich(2, idx + 1)
listFich(1, idx + 1) = tmp(1)
listFich(2, idx + 1) = tmp(2)
fini = False
End If
Next idx
Loop Until fini
'supprime les fichiers trop ancien en ne gardant que les 6 plus récent
idx_max = Application.WorksheetFunction.Max(idx)
For idx = 6 To idx_max
If idx_max > 6 Then
Kill Complete_File_name & listFich(2, idx_max)
End If
idx_max = Application.WorksheetFunction.Max(idx)
Next idx
end sub
cdt
merci à vous
jb