1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| Sub Workbook_Open()
Application.ScreenUpdating = False
Feuil1.Activate
Application.ScreenUpdating = True
' // Initialise la prochaine sauvegarde
RunOnTime
End Sub
Function GetNextSaveTime(currentTime As Date) As Date
' // Heures de sauvegarde
Const saveHours As String = "17:04,17:05,17:06"
' // Tableau des heures de sauvegarde
Dim hoursArray() As String
hoursArray = Split(saveHours, ",")
' Heure actuelle
Dim heure As Integer
heure = Hour(currentTime)
' // Minute actuelle
Dim minutes As Integer
minutes = Minute(currentTime)
' // Trouver la prochaine heure de sauvegarde
Dim nextHour As Integer
nextHour = -1
Dim i As Byte
For i = 0 To UBound(hoursArray)
Dim h As Variant
h = Split(hoursArray(i), ":")
If heure < h(0) Or (heure = h(0) And minutes < h(1)) Then
nextHour = h(0)
Exit For
End If
Next i
' // Si aucune heure de sauvegarde n'a été trouvée, utiliser la première heure de sauvegarde du lendemain
If nextHour = -1 Then
nextHour = Split(hoursArray(0), ":")(0)
GetNextSaveTime = Date + 1 + TimeSerial(nextHour, Split(hoursArray(0), ":")(1), 0)
Else
GetNextSaveTime = Date + TimeSerial(nextHour, Split(hoursArray(i), ":")(1), 0)
End If
End Function
Sub CopierOngletLOG()
Const DESTINATION_PATH As String = "E:\Save_Auto_Log\"
Application.DisplayAlerts = False
Application.ScreenUpdating = False
With ThisWorkbook
.Unprotect "admin"
Dim wsLOG As Worksheet
Set wsLOG = .Worksheets.Item("LOG")
With wsLOG
.Visible = xlSheetVisible
.Unprotect "admin"
.Copy
End With
End With
With ActiveWorkbook
' // Enregistrer le nouveau classeur avec un nom dynamique
Dim destinationFileName As String
destinationFileName = "Save_Auto_Log_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss") & ".xlsx"
Dim destinationFullPath As String
destinationFullPath = DESTINATION_PATH & destinationFileName
.SaveAs destinationFullPath
.Close SaveChanges:=False
End With
wsLOG.Visible = xlSheetHidden '// Masquer à nouveau l'onglet LOG
ThisWorkbook.Protect "admin" ' // Protéger le classeur à nouveau si nécessaire
' // Planifier la prochaine exécution
RunOnTime
Application.ScreenUpdating = True
End Sub
' // LA PROCEDURE RunOnTime() EST A METTRE DANS UN MODULE :
Public Sub RunOnTime()
Dim nextHour As Date
nextHour = GetNextSaveTime(Time)
' // Planifier la prochaine exécution
' Application.OnTime nextHour, "Maprocedure"
Application.OnTime nextHour, "Save_Auto_Log.CopierOngletLOG"
End Sub
'Sub MaProcedure()
' MsgBox "Exécution... " & Format(Time, "hh:mm")
' ' // On initialise la prochaine sauvegarde
' RunOnTime
'End Sub |
Partager