VBA pour date de MAJ des onglets excel
Résolu
AUDREYLAB
Messages postés
53
Date d'inscription
Statut
Membre
Dernière intervention
-
AUDREYLAB Messages postés 53 Date d'inscription Statut Membre Dernière intervention -
AUDREYLAB Messages postés 53 Date d'inscription Statut Membre Dernière intervention -
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
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:
- VBA pour date de MAJ des onglets excel
- Liste déroulante excel - Guide
- È maj - Guide
- Word et excel gratuit - Guide
- Nombre de jours entre deux dates excel - Guide
- Déplacer colonne excel - Guide
16 réponses
Bonjour,
Juste au passage, cela devrait fonctionner:
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
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
"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
ça marche, super merci beaucoup
Bonjour,
Il faut ajouter un contrôle pour accepter que les modifications dans les tableaux [B4:J40]!
Il faut ajouter un contrôle pour accepter que les modifications dans les tableaux [B4:J40]!
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]
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]
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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à!
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à!
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
https://www.cjoint.com/c/LEum2mMIjs7
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.
Note: je n'ai pas regardé votre dernier fichier!
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!
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
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:::.?
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:::.?
Bonjour,
Essayez donc avec ce code:
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
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
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
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
https://www.cjoint.com/c/LEuoVo53oz7
PS: une modif annulée est considérée comme une modification quand même...
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...
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
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
@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
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
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.
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.
@ 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
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
Bonjour,
il est possible que dans l'un de vos codes il y est l'instruction :
Essayer le mettre le code suivant dans un module et de l'exécuter:
il est possible que dans l'un de vos codes il y est l'instruction :
Application.EnableEvents = Falseet 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
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
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
@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
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("A1").Value = Now
End Sub
Merci d avance .bonne soirée
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
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