Private Sub Worksheet_Change(ByVal Target As Range)
Dim n$, s$, i&, dat, xsh As Worksheet
'on désactive la détection d'évènement
Application.EnableEvents = False
If Not Intersect(Feuil1.Range("D8:D100"), Target) Is Nothing Then
'on est bien dans la zone D8:D100
If Target.Count = 1 And IsDate(Target) Then
' Une seule cellule a été modifiée et la cellule à gauche
' est une date
Feuil2.Visible = True
' dupliquer la feuille à la fin des onglets
Feuil2.Copy After:=Worksheets(Worksheets.Count)
Feuil2.Visible = False
'--- définir le nom de la feuille qui a été dupliquée
n = Target.Offset(, -1) 'valeur de la cellule à gauche
On Error Resume Next
Do
' on attribue le nom n à la feuille dupliquée
ActiveSheet.Name = n
If Err.Number = 0 Then
'Pas d'erreur -> on sort de la boucle
Exit Do
Else
' il y a eu une erreur -> le nom sans doute existe déjà
Err.Clear ' RAZ de l'erreur
i = i + 1 ' on oncrémente i
' nouveau nom à tester
n = Target.Offset(, -1) & "-" & i
End If
Loop
' mettre un commentaire pour la cellule A1 de la nouvelle feuille
On Error Resume Next
' texte du commentaire
s = "créée le #" & Format(Now(), "dd/mm/yyyy") & _
"# à (" & Format(Now(), "hh:mm:ss") & _
") avec comme date modifiée <" & Format(Target, "dd/mm/yyyy") & ">"
' ajout du commentaire
ActiveSheet.Range("A1").AddComment s
ActiveSheet.Range("A1").Comment.Visible = True
'ici, voici le code nécessaire pour afficher la date dans la cellule
ActiveSheet.Range("A1") = Format(Target, "dd/mm/yyyy")
' classement de la nouvelle feuille
' boucler sur l'ensemble des feuilles
For Each xsh In ThisWorkbook.Worksheets
If Not xsh Is ActiveSheet Then
'si la xsh n'est pas la feuille dupliquée (ie feuille active)
s = ""
On Error Resume Next
' récupérer le commentaire en de la cellule A1
' si pas de commentaire -> une erreur se produit et se propage
s = xsh.Range("a1").Comment.Text
If s <> "" Then
' la cellule A1 avait un commentaire
' on recherche la date comprise entre <.....>
s = Mid(s, InStr(s, "<") + 1, 10)
On Error GoTo 0
' si s est une date
If IsDate(s) Then
' le commenatire avait une date après un signe "<"
If Target.Value2 <= CDate(s) Then
' la date modifiée de la feuille "Feuil1" est
' inférieure à la date du commentaire de xsh
' -> on place la feuille dupliquée avant la feuille xsh
ActiveSheet.Move before:=xsh
' on ré-active la détection d'évènement
Application.EnableEvents = True
' on active Feuil1
Feuil1.Activate
Exit For
End If
End If
End If
End If
Next xsh
End If
End If
' on ré-active la détection d'évènement
Application.EnableEvents = True
' on active Feuil1
Feuil1.Activate
End Sub