Sub Archiver()
Dim i As Integer
Dim ws1 As Worksheet, ws2 As Worksheet
Dim nL1 As Long, nL2 As Long
Set ws1 = Sheets("Feuille1")
Set ws2 = Sheets("Archive")
nL1 = ws1.Cells(Columns.Count, 3).End(xlUp).Row
nL2 = ws2.Cells(Columns.Count, 3).End(xlUp).Row
' Si la dernière date saisie n'est pas celle du jour on supprime l'historique et on le remplace
If ws2.Range("A" & nL2) = Date Then
choix = MsgBox("L'historique a déjà été saisi pour aujourd'hui. Confirmez-vous l'effacement de l'enregistrement précédent ?", vbYesNoCancel, "Historique")
If choix = vbCancel Or choix = vbNo Then Exit Sub
' On supprime les enregistrement à la date d'aujourd'hui
ws2.Activate
For i = nL2 To 1 Step -1
If ws2.Cells(i, 1) = Date Then ws2.Rows(i).EntireRow.Delete
Next i
nL2 = ws2.Cells(Columns.Count, 3).End(xlUp).Row
End If
' On enregistre l'historique du jour à la suite
ws1.Activate
ws1.Range("B5:H" & nL1).Select
Selection.Copy
ws2.Range("B" & nL2 + 1).PasteSpecial xlPasteValues
' et on entre la date d'aujourd'hui
For i = nL2 + 1 To nL2 + nL1 - 4
ws2.Cells(i, 1) = Date
Next i
Application.CutCopyMode = True
ws1.Range("C2").Select
End Sub
J'ai ajouté la macro "Vider" pour vider la feuille de saisie de son contenu.
Sub Vider()
Dim ws1 As Worksheet, nL1 As Long
Set ws1 = Sheets("Feuille1")
nL1 = ws1.Cells(Columns.Count, 2).End(xlUp).Row
' On vide la feuille de saisie
ws1.Range("A5:H" & nL1).Select
Selection.ClearContents
ws1.Application.CutCopyMode = False
ws1.Range("C2").Select
End Sub