Enregistrement de dates à la fermeture d'onglet

Bonjour,

Je construis actuellement un tableau de suivi de projets, qui vise à être complété par les porteurs respectifs et donc, supposément, à des dates et des heures relativement différentes.

Le classeur concerné contient une feuille par domaine (qualité, finances, RH...) et dans chaque feuille, les projets concernés.

Je souhaite, dans une feuille distincte (Tenue à jour des versions), inscrire pour chaque domaine les dates des dernières modifications de l'onglet concerné.

J'ai recherché longtemps, et j'ai trouvé quelques pistes, mais qui concernent l'enregistrement d'une seule date et dans une feuille active, ce qui est assez éloigné de ce que je cherche.

Ci-après la solution testée jusqu'à présent :

 Private Sub Worksheet_BeforeClose(Cancel As Boolean)
    Sheets("Feuil1").Activate
    Range("A1") = ActiveWorkbook.BuiltinDocumentProperties(12)
    Range("A2") = Environ("UserName")
End Sub

Celle-ci m'enregistre bien la date (et l'auteur, btw), mais la date change à chaque fermeture plutôt que de s'incrémenter dans la case en dessous...

Je dois avouer caler complètement pour trouver la solution. C'est pourtant si simple dans ma tête ...

J''espère avoir été complètement clair dans mes explications, et, dans le cas inverse, je vous joindrai le fichier.

Je m'en remets aux bonnes âmes de ce forum qui voudront bien me faire profiter de leur expertise...

Bien à vous

Bonjour,

A mettre dans le module du classeur (ThisWorkbook) et adapter le nom des feuilles (ici, Feuil1, Feuil2, et Feuil3) et ajouter un feuille nommée "Modif".

En colonne A sera inscrit le nom de la feuille, en colonne B la date, en colonne C l'heure (au moment de la fermeture du classeur et non au moment de la dernière modif mais avec d'autres variables c'est possible) et en colonne D le nom de l'utilisateur. A tester et adapter à tes besoins :

Dim ModifFe1 As Boolean
Dim ModifFe2 As Boolean
Dim ModifFe3 As Boolean

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Dim Fe As Worksheet
    Dim Lig As Long

    Set Fe = Worksheets("Modif")

    With Fe

        If ModifFe1 = True Then

            Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Cells(Lig, 1).Value = "Feuil1"
            .Cells(Lig, 2).Value = Date
            .Cells(Lig, 3).Value = Time
            .Cells(Lig, 4).Value = Environ("UserName")

        End If

        If ModifFe2 = True Then

            Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Cells(Lig, 1).Value = "Feuil2"
            .Cells(Lig, 2).Value = Date
            .Cells(Lig, 3).Value = Time
            .Cells(Lig, 4).Value = Environ("UserName")

        End If

        If ModifFe3 = True Then

            Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Cells(Lig, 1).Value = "Feuil3"
            .Cells(Lig, 2).Value = Date
            .Cells(Lig, 3).Value = Time
            .Cells(Lig, 4).Value = Environ("UserName")

        End If

    End With

    ThisWorkbook.Save

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    Select Case Sh.Name

        Case "Feuil1": ModifFe1 = True
        Case "Feuil2": ModifFe2 = True
        Case "Feuil3": ModifFe3 = True

    End Select

End Sub

Merci beaucoup pour cette réponse rapide et précise !

Je teste dans l'après-midi et je te fais un retour au plus vite !

Le test est concluant, ça marche impeccablement bien !

J'ai adapté le code dans la plus grande facilité et bien décortiqué ta façon de faire, c'est bluffant de logique !

Merci beaucoup pour ce coup de main précieux, et à l'avenir, je tenterai de penser à déclarer les fonctions et les variables avec la même clarté, cela m'aidera sans doute bien plus à trouver mes solutions !

Re,

Heureux de t'avoir aidé !

Pour ce qui est des variables je te conseille fortement de devoir les déclarer explicitement et pour ça, tu as une aide précieuse avec "Option Explicit" et afin de ne pas avoir à le faire manuellement, dans le VBE, tu vas dans "Outils" -->"Options..."--> onglet "Editeur" et tu coches la case "Déclaration des variables obligatoire". Tu fermes ton classeur (tu enregistre si demandé) et tu le ré-ouvres maintenant, dans tous les modules qu'ils soient de feuilles, classeurs ou de Classe, il y aura toujours inscrit en haut de page "Option Explicit" et si tu oublis de déclarer une variable, le compilateur vas t le dire, de même si tu fais une faute d'orthographe dans une variable

Rechercher des sujets similaires à "enregistrement dates fermeture onglet"