Microsoft 365 Afficher le nom du dernier onglet modifié dans une cellule

ExcLnoob

XLDnaute Occasionnel
Bonjour,
Je cherche a reporter au moment de l'enregistrement de mon fichier le nom de l'onglet où la dernière modification a eu lieu dans une cellule de la page principale de mon fichier.
En détails :
J'ai un fichier avec plusieurs onglets. Différents utilisateurs peuvent apporter des modifcations sur ces onglets. Au moment d'enregistrer j'ai insérer une macro qui remonte sur la page principale le nom de l'utilisateur ainsi que date et heure de modifs.
Je suis prévenu quand quelqu'un a eu accès au fichier mais je ne sais pas ce qu'il a fait sauf à aller sur tous les onglets un par un.
Ce que je souhaiterai, c'est qu'en plus de ces 2 informations présentes sur ma page principale (nom et date), je puisse également voir sur quel onglet été fait la dernière modification et si aucune modifications n'a été faite, qu'il y ai inscrit "Aucune".
Quelque chose comme "Dernière modification : Feuillle xxxx (ou alors Aucune)"
J'ai beau chercher je ne trouve rien.
Est-ce que cela est possible ?
Merci pour votre aide
 
Solution
Alors supprimez l'exclusion :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Application.EnableEvents = False
    Worksheets("Résumé").Range("D4") = Sh.Name
    Worksheets("Résumé").Range("C5").Value = Format(Date, "dd/mm/yyyy") & " à" & Format(Time, " hh:mm")
    Worksheets("Résumé").Range("C6") = Application.UserName
    Application.EnableEvents = True
End Sub
Le Application.EnableEvents = False évite la ré entrance. Vous modifiez Résumé donc vous écrivez en Résumé donc vous appelez la fonction ....

Nairolf

XLDnaute Accro
Salut,

Je pense que le plus simple est de noter les modifications au fil de l'eau plutôt qu'à la fin.
Tu trouveras en pièce jointe une proposition dans ce sens comme base de travail.
 

Pièces jointes

  • Suivi MAJ 1_Nairolf.xlsm
    16.2 KB · Affichages: 11

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Exclnoob, Nairolf,
Une solution lourdingue mais qui fait le job.
Dans chaque feuille la macro événementielle :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    Sheets("Entete").[Dernier] = ActiveSheet.Name
End Sub
A chaque modif de toute feuille le nom de la feuille est enregistrée et écrase la précédente.
Donc à la fermeture il y a le nom de la dernière feuille modifiée.
 

Pièces jointes

  • Dernier.xlsm
    17.2 KB · Affichages: 5

ExcLnoob

XLDnaute Occasionnel
Merci Nairolf et Sylvanu pour vos réponses rapide
@Nairolf
Effectivement, avoir un historique des modifications pourrait être intéressant
A ce moment là, je vais essayer de faire un USF avec une liste déroulante de toutes les modifs.
Les modifs principales étant des notes je vais faire en sorte que celle-ci se supprime de la liste quand elles sont flaggées "Validé" sur la feuille modifié.

J'ai déja réussi à adapter ton code en n'y mettant que le nom du dernier onglet modifié.
Juste une question du coup svp :
Il est possible que des modifications soit apportées sur la feuille principale également. Dans ton code il prends en compte toutes les feuilles sauf la principale. Comment mettre <> ou = du coup stp ?

@sylvanu
Je prends la soluce, merci mais je préfère essayer de booker ça sur le workbook en 1 code
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

si on s'en tient à ta demande initiale :
VB:
Private Sub Workbook_Open()
    Sheets("Accueil").[B2] = "Aucune"
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "Accueil" Then Sheets("Accueil").[B2] = Sh.Name
End Sub
ce qui veut dire que si quelqu'un ouvre et referme le fichier tu perds la dernière modif (?!?)
eric
 

ExcLnoob

XLDnaute Occasionnel
Bonjour à tous,

si on s'en tient à ta demande initiale :
VB:
Private Sub Workbook_Open()
    Sheets("Accueil").[B2] = "Aucune"
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "Accueil" Then Sheets("Accueil").[B2] = Sh.Name
End Sub
ce qui veut dire que si quelqu'un ouvre et referme le fichier tu perds la dernière modif (?!?)
eric
Bonsoir @eriiiic
Oui effectivement.... C'est un peu ordre - contre-ordreo_O
Je laisse tomber le "Aucune" sachant que la date de modif fait foi....
Du coup j'ai remis de l'ordre. Par contre je n'arrive pas à faire prendre en compte dans la formule suivante la page pricipale.
Je sais que je bloque sur If Sh.Name <> "Résumé" Then mais je n'arrive pas à trouver/comprendre
Le code :
VB:
If Sh.Name <> "Résumé" Then
    Worksheets("Résumé").Range("D4") = Sh.Name
    Worksheets("Résumé").Range("C5").Value = Format(Date, "dd/mm/yyyy") & " à" & Format(Time, " hh:mm")
    Worksheets("Résumé").Range("C6") = Application.UserName
End If
End Sub
Quelqu'un peut m'aider svp ?
 

ExcLnoob

XLDnaute Occasionnel
Dites nous ce qu'il y a avant votre code, ça nous avancerais. Sh est juste une variable.
Est elle issue d'une ligne de type ?
VB:
For each Sh in Worksheets
...
Next Sh
@sylvanu
Dsl j'ai oublié la première ligne...
Le code entier :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "Résumé" Then
Worksheets("Résumé").Range("D4") = Sh.Name
Worksheets("Résumé").Range("C5").Value = Format(Date, "dd/mm/yyyy") & " à" & Format(Time, " hh:mm")
Worksheets("Résumé").Range("C6") = Application.UserName
End If
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Alors supprimez l'exclusion :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Application.EnableEvents = False
    Worksheets("Résumé").Range("D4") = Sh.Name
    Worksheets("Résumé").Range("C5").Value = Format(Date, "dd/mm/yyyy") & " à" & Format(Time, " hh:mm")
    Worksheets("Résumé").Range("C6") = Application.UserName
    Application.EnableEvents = True
End Sub
Le Application.EnableEvents = False évite la ré entrance. Vous modifiez Résumé donc vous écrivez en Résumé donc vous appelez la fonction ....
 

ExcLnoob

XLDnaute Occasionnel
Alors supprimez l'exclusion :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Application.EnableEvents = False
    Worksheets("Résumé").Range("D4") = Sh.Name
    Worksheets("Résumé").Range("C5").Value = Format(Date, "dd/mm/yyyy") & " à" & Format(Time, " hh:mm")
    Worksheets("Résumé").Range("C6") = Application.UserName
    Application.EnableEvents = True
End Sub
Le Application.EnableEvents = False évite la ré entrance. Vous modifiez Résumé donc vous écrivez en Résumé donc vous appelez la fonction ....

Un grand MERCI !!
Je poste en résolu
C'est vraiment agréable de pouvoir compter sur des experts quand on est apprenti-sorcier comme moi !
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

J'ai un fichier avec plusieurs onglets. Différents utilisateurs peuvent apporter des modifcations sur ces onglets.
Excel a presque prévu la chose nativement
Sauf qu'il appelle cela Suivi des modifications ;)
Accessible sur l'onglet: Révision*
En théorie, c'est plus efficace et plus complet qu'une macro VBA.
(parce que le VBA, on peut le désactiver à l'ouverture d'un classeur)

*: de mémoire, il faut partager le classeur au préalable
Même onglet du ruban: Révision => Partager le classeur
 

ExcLnoob

XLDnaute Occasionnel
Bonjour le fil


Excel a presque prévu la chose nativement
Sauf qu'il appelle cela Suivi des modifications ;)
Accessible sur l'onglet: Révision*
En théorie, c'est plus efficace et plus complet qu'une macro VBA.
(parce que le VBA, on peut le désactiver à l'ouverture d'un classeur)

*: de mémoire, il faut partager le classeur au préalable
Même onglet du ruban: Révision => Partager le classeur
@Staple1600
Merci pour l'info, mais de mémoire je ne passer par là car ça génénrer pus de soucis que de solutions..
Mais je prends et vais regarder.
Merci.
 

Discussions similaires