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 SubCelle-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 SubMerci 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