VBA pour date de MAJ des onglets excel

Résolu/Fermé
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024 - Modifié le 20 mai 2022 à 10:28
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024 - 24 mai 2022 à 11:29
Bonjour

J'ai un fichier dans lequel j'ai des macros pour protéger/déprotéger toutes les feuilles en même temps, ça pas de soucis, mais je le précise pour que vous ayez toutes les infos.

https://www.cjoint.com/c/LEuikska6V7

Mon problème est sur la macro pour la mise à jour automatique de la date de chaque onglet dès lors qu'il a été modifié.
la macro actuelle est la suivante :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Range("A1").Value = Now
End Sub

Elle est dans Thisworkbook et les autres dans des modules

(j'ai mis les macros et le MDP de déprotection sur la feuille 1 du fichier joint comme ça ça vous évite d'aller chercher dans le VBA)

Ça fonctionne mais le problème c'est que si je modifie la feuille 1 , la feuille2, la 3... et que j'enregistre seulement après avoir fini de travailler sur mon dernier onglet la MAJ de la date ne se fait que sur l'onglet sur lequel j'étais lors de l’enregistrement.
pour que la date se mette à jour sur chaque onglet modifié il faudrait donc que j'enregistre à chaque fois que j'ai travaillé sur un onglet avant de passer à un autre et je voudrai éviter cela car si j'oublie d'enregistrer la date ne se mettra pas à jour

Y-a til un moyen d'adapter la macro en place ou m'en proposer une autre?

Merci d'avance

Cordialement
A voir également:

16 réponses

Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
20 mai 2022 à 11:43
Bonjour,
Juste au passage, cela devrait fonctionner:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
Sh.Range("c2").Value = Now
End Sub

1
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
20 mai 2022 à 11:10
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
20 mai 2022 à 11:29
Merci mais j'ai déjà testé ces deux, la première a un soucis dès que je sauvegarde j'ai le message d'erreur suivant:

"Erreur d'execution '-2147417848 (80010108)':
La méthode 'Range' de l'objet_Worksheet' a échoué


La seconde modifie la date sur tous les onglets qu'ils aient ou non été modifiés et moi je veux juste qu'elle soit MAJ uniquement sur les onglets qui ont été modifiés
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
20 mai 2022 à 13:42
ça marche, super merci beaucoup
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
20 mai 2022 à 13:51
en fait ça fonctionne très bien, la date se MAJ à chaque modif d'onglet mais le pb c'est que si on a fait une erreur de saisie la macro bloque l'annulation de la dernière saisie, pas retour en arrière possible
Avez vous une solution à me proposer ?
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
20 mai 2022 à 14:18
Bonjour,
Il faut ajouter un contrôle pour accepter que les modifications dans les tableaux [B4:J40]!
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
20 mai 2022 à 14:29
Merci mais comment je procède?
dans l'utilisation du fichier on va travailler dans ma société dans le tableau [B4:J40] qui seront des cellules verrouillées pour qu'elles ne soient pas modifiables une fois que la macro de protection sera activée.
lorsqu'on transmettra ce tableau à une société externe, il sera protégé mais on va laisser quelques colonnes déverrouillées (exemple k/l/m) pour que des personnes puissent ajouter des commentaires au fichier sans écraser les données du tableau en [B4:J40]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
Modifié le 20 mai 2022 à 14:36
Bonjour,
Je vais faire un test.
Que comprendre par : il sera protégé mais on va laisser quelques colonnes déverrouillées (exemple k/l/m) pour que des personnes puissent ajouter des commentaires au fichier
Car dans ces colonnes je trouve une copie des macros qui n'ont strictement rien à faire là!

0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
20 mai 2022 à 14:54
La copie des macros n'est à la base pas présente dans le fichier c'est juste que je les avais copiées dans une feuille pour que les personnes du forum voient de suite les macros qu'il y a dans le fichier sans chercher dans le VBA. C'était pour faciliter les choses. Du coup je vous envoi le fichier modifié en supprimant les macros saisies dans la feuille 1 et en déverrouillant les colonnes non pas k/l/m car le mot de passe de protection est en L3 , mais les colonnes m/n/o , qui seront les colonnes ou les personnes extérieures a qui ont enverra le fichier protégé pourront saisir leurs commentaires

https://www.cjoint.com/c/LEum2mMIjs7
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
Modifié le 20 mai 2022 à 15:03
Bonjour,
Avec le code ci après, la date de mise à jour est réalisée uniquement si vous modifier dans la plage [B4:J40].
Des commentaires sont possible [K:M] sans modification de date.
 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If Not Application.Intersect(Target, Range("B4:J40")) Is Nothing Then
'MsgBox "Click on " & Target.Address
Sh.Range("c2").Value = Now
End If
End Sub


Note: je n'ai pas regardé votre dernier fichier!
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
20 mai 2022 à 15:26
merci mais j'ai toujours le même soucis, si je modifie dans la zone B4:J40 et que je me suis trompée et que je veux faire un retour arrière avec la fleche excel ou avec CTRL+Z j'ai pas la main
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
Modifié le 20 mai 2022 à 15:52
Bonjour,
Eh bien , la main vous l'avez toujours, il serait plus judicieux de préciser ce que vous voulez faire si vous vous êtes trompé!
Note: alors il faut que le système détecte si vous avez fait une faute ou pas ...et la est tout le problème, comment peut-il le savoir:::.?
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
Modifié le 20 mai 2022 à 16:16
Bonjour,
Essayez donc avec ce code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If Not Application.Intersect(Target, Range("B4:J40")) Is Nothing Then
    Application.EnableEvents = False
    v = Target
    Application.Undo
    If ActiveCell <> v Then
        ActiveCell = v
        MsgBox "Valeur cellule " & Target.Address(RowAbsolute:=False, columnabsolute:=False) & " changée !"
        Sh.Range("c2").Value = Now
        Target.Offset(1, 0).Select
    End If
    Application.EnableEvents = True
End If
End Sub


0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
20 mai 2022 à 16:57
merci pour la proposition mais avec cette macro à chaque fois que je saisi dans une cellule j'ai un message me disant que la cellule a changée et ça ne va pas aller à mes collègues.

La première était très bien mais un autre collègue a testé sur son poste et si on saisi des données dans une cellule et qu'on se dit finalement je ne vais pas saisir ça (ce que j'appelle une erreur de saisie dans mon précédent com) et qu'on veut effacer la saisie on est obligé de faire supprimer le texte.
la flèche retour arrière pour effacer les action précédentes une à une est désactivée et CTRL+Z ne marche pas non plus.
Voir image, si je veux annuler la saisie de "h" dans la cellule D8 la flêche de retour est grisée, je n'ai pas la main
https://www.cjoint.com/c/LEuo1Nv3u67
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452 > AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
20 mai 2022 à 17:26
Bonjour,
Salutations eriiic et merci pour le code.
AUDREYLAB, c'est vraiment désolent que vous n'arrivez pas à désactivé un message qui est la pour voir se qui se passe mais seulement réclamer que ça ne va pas aller à mes collègues.
Salutations.
Le Pingou
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
Modifié le 20 mai 2022 à 16:50
Bonjour à tous,

chaque fois qu'une macro est lancée tu perds toutes les infos d'annulation, c'est normal.
Testes cette version qui ne lance la macro qu'à la désactivation de la feuille et te laissera les annulations possibles tant que tu restes dessus
eric
Option Explicit

Dim memoChange As Boolean

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    memoChange = True
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    If memoChange And LCase(Left(Sh.[B2], 7)) = "date de" Then Sh.[C2] = Now: memoChange = False
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If memoChange And LCase(Left([B2], 7)) = "date de" Then [C2] = Now
End Sub

https://www.cjoint.com/c/LEuoVo53oz7

PS: une modif annulée est considérée comme une modification quand même...

0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
20 mai 2022 à 17:15
Bonjour,

A première vue ça fonctionne bien , je vais faire tester à mes collègues avant de clôturer le ticket, je vous remercie beaucoup en tous cas, bon week end
cordialement
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452 > AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
20 mai 2022 à 17:33
Bonjour,
Et vous ne manquerez pas de mentionnée à vos collègues d'où viennent les code!
Bonne suite.
Salutations.
Le Pingou
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024 > Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024
20 mai 2022 à 21:55
Mes collègues savent déjà que j' ai fait appel au forum car tt le monde ne sait pas construire des macros ^^bonne soirée
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
23 mai 2022 à 12:10
Bonjour

Votre macro fonctionne sur le fichier test que j'avais transmis mais quand je veux la mettre dans un nouveau classeur elle ne fonctionne pas et je ne comprend pas pourquoi. Je fais un copié collé de la macro dans Thisworkbook d'un nouveau classeur mais la MAJ de la date ne se fait pas quand je change d'onglet. Je trouve cette macro intéressante et j'aurai bien voulu pouvoir l'adapter à n'importe quel fichier, pouvez vous m'aider? Cordialement
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024 > AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
23 mai 2022 à 13:49
@eriic
j'ai trouvé cette macro qui s'active à la fermeture du fichier, l'avantage est que j'ai la main pour faire des retours arrière même si j'ai sauvegardé, le pb c'est que la MAJ de la date ne se fait que sur le dernier onglet sur lequel je suis au moment ou je ferme le classeur. Y a t-il possibilité de l'adapter pour qu'elle s'exécute sur tous les onglets du classeur dès lors qu'ils ont été modifiés?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("A1").Value = Now
End Sub
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
20 mai 2022 à 22:24
Bravo, bonne suite.
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
23 mai 2022 à 13:38
Bonjour,
Désolé, je pense que je ne suis pas concerné!
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
23 mai 2022 à 13:51
@ Le Pingou

Bonjour, effectivement j'avais fait répondre au commentaire d'Eriiic mais mon commentaire apparait en vrac dans le fil de la conversation Cordialement
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
23 mai 2022 à 14:36
Bonjour,
Et pourtant le code le l'ami eriiic (amical salut) fonctionne parfaitement. J'ai aussi fait l'essai en créant un nouveau classeur et c'est parfait.
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
23 mai 2022 à 15:19
@ Le Pingou / @eriiic

Autant pour moi je viens de voir dans le code qu'il fallait bien que "date de MAJ" soit en B2, c'est pour ça que ça ne marchait pas dans mon précédent essai. mais là en respectant les consignes de la macro forcément ça marche.
Donc pour ça c'est super, par contre si vous pouvez m'aider pour ma demande précédente ce serait top^^

j'ai trouvé cette macro qui s'active à la fermeture du fichier, l'avantage est que j'ai la main pour faire des retours arrière même si j'ai sauvegardé, le pb c'est que la MAJ de la date ne se fait que sur le dernier onglet sur lequel je suis au moment ou je ferme le classeur. Y a t-il possibilité de l'adapter pour qu'elle s'exécute sur tous les onglets du classeur dès lors qu'ils ont été modifiés?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("A1").Value = Now
End Sub
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
Modifié le 23 mai 2022 à 14:52
Bonjour,
il est possible que dans l'un de vos codes il y est l'instruction :
Application.EnableEvents = False
et que l'instruction pour réactivé les événements manque ou n'a pas été exécuté.
Essayer le mettre le code suivant dans un module et de l'exécuter:

Sub Activ_Event()
Application.EnableEvents = True
End Sub


0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
23 mai 2022 à 18:53
Bonjour,

oui, j'avais ajouté un contrôle de la feuille que la macro n'écrase pas des données n'importe où.
A toi de voir, si c'est trop bloquant, quel test faire pour pouvoir agir sans erreur..

Par contre je ne sais pas ce qu'est "la demande précédente". Trop le bazar ce forum ?!?
eric
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
23 mai 2022 à 19:48
@eriiic ,non mais merci pour ta macro, c est parfait maintenant que j' ai vu le contrôle ^^ et pour ma demande précédente je l avais remise a la fin de mon dernier commentaire c est ceci : j'ai trouvé cette macro qui s'active à la fermeture du fichier, l'avantage est que j'ai la main pour faire des retours arrière même si j'ai sauvegardé, le pb c'est que la MAJ de la date ne se fait que sur le dernier onglet sur lequel je suis au moment ou je ferme le classeur. Y a t-il possibilité de l'adapter pour qu'elle s'exécute sur tous les onglets du classeur dès lors qu'ils ont été modifiés? Donc pas d activation sur les onglets non modifiés.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("A1").Value = Now
End Sub

Merci d avance .bonne soirée
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247 > AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024
Modifié le 23 mai 2022 à 23:52
Bien sûr qu'elle te permet de modifier puisqu'elle ne se lance qu'à la fermeture et ne fait rien le reste du temps.
La solution intermédiaire entre ne rien faire et travailler tout le temps qui te bloque c'est ce que je t'ai proposé.

Et je ne pense pas qu'un enregistrement te permette d'annuler quoique ce soit ensuite vu que ça vide toute la pile des modifs
0
AUDREYLAB Messages postés 53 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 30 octobre 2024 > eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024
24 mai 2022 à 11:29
Bonjour eriiic,

merci pour ton retour, et ta macro a déjà bien amélioré ce que j'avais en place
cordialement
0