Historique saisie feuilles excel
lamarie028
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Bonjour
J'ai un fichiers excel ou plusieurs personnes peuvent être amenées à réaliser des modifications.
Afin de garder un historique des saisies, j'ai trouver un code de sauvegarde de "saisie de cellules" qui se reporte sur une autre feuille du même classeur.
Mais le problème est que lorsque je veux modifier le texte de la cellule cette dernière ne conserve pas le changement mais dans mon fichier de sauvegarde ("Modifications") on me reporte bien la modifications.
Merci de bien vouloir m'aider à soit modifier le code ou me donner un autre code qui fonctionne car j'ai navigué sur plein de forum mais je ne trouve de solution à mon problème.
Voici le code utiliser :
Cordialement
Lamarie
J'ai un fichiers excel ou plusieurs personnes peuvent être amenées à réaliser des modifications.
Afin de garder un historique des saisies, j'ai trouver un code de sauvegarde de "saisie de cellules" qui se reporte sur une autre feuille du même classeur.
Mais le problème est que lorsque je veux modifier le texte de la cellule cette dernière ne conserve pas le changement mais dans mon fichier de sauvegarde ("Modifications") on me reporte bien la modifications.
Merci de bien vouloir m'aider à soit modifier le code ou me donner un autre code qui fonctionne car j'ai navigué sur plein de forum mais je ne trouve de solution à mon problème.
Voici le code utiliser :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name <> "Modifications" Then Application.EnableEvents = False valsaisie = Target Application.Undo temp = Application.CountA(Sheets("modifications").Range("a:a")) + 1 Sheets("modifications").Cells(temp, 1) = Sh.Name Sheets("modifications").Cells(temp, 2) = Target.Address Sheets("modifications").Cells(temp, 3) = Now Sheets("modifications").Cells(temp, 4) = Target Sheets("modifications").Cells(temp, 5) = valsaisie Sheets("modifications").Cells(temp, 6) = Environ("username") Target = valsaisie Application.EnableEvents = True End If End Sub
Cordialement
Lamarie
A voir également:
- Historique saisie feuilles excel
- Liste déroulante excel - Guide
- Historique presse-papier android - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Fusionner feuilles excel - Guide
4 réponses
Bonjour,
Ton code ne fonctionne pas aussi bien qu'il devrait :
- lorsque plusieurs cellules sont modifiées simultanément (copier/ coller, Incrémenter en tirant une plage de valeurs, saisie matricielle, ...)
- lorsque la valeur n'est pas modifiée.
Voici une proposition :
Attention, lorsque c'est une macro qui modifie une valeur, pour éviter que ce code se plante sur le Undo, il faut prévoir dans la macro, avant de modifier la valeur, de désactiver les évènements puis les réactiver après.
Cordialement
Patrice
Ton code ne fonctionne pas aussi bien qu'il devrait :
- lorsque plusieurs cellules sont modifiées simultanément (copier/ coller, Incrémenter en tirant une plage de valeurs, saisie matricielle, ...)
- lorsque la valeur n'est pas modifiée.
Voici une proposition :
Option Explicit Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range) Dim dic As Object, clé As Variant Dim sel As Range, act As Range, tgt As Range, usr As Range, cel As Range Dim val As Variant Dim n°L As Long If sh.Name <> "Modifications" Then Set dic = CreateObject("Scripting.Dictionary") 'Mémoriser le contexte initial Set sel = Selection Set act = ActiveCell With Worksheets("Modifications") 'Mémoriser les nouvelles valeurs non vides Set usr = Intersect(Target, sh.UsedRange) If Not usr Is Nothing Then val = usr.Value For Each cel In usr.Cells If cel.Formula <> "" Then dic(cel.Address) = cel.Value End If Next cel End If Application.EnableEvents = False Application.Undo Set tgt = Intersect(Target, sh.UsedRange) If Not tgt Is Nothing Then For Each cel In tgt.Cells n°L = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 If dic.Exists(cel.Address) Then If cel.Value <> dic(cel.Address) Then .Cells(n°L, 1).Value = sh.Name .Cells(n°L, 2).Value = cel.Address .Cells(n°L, 3).Value = Now .Cells(n°L, 4).Value = cel.Value .Cells(n°L, 5).Value = dic(cel.Address) .Cells(n°L, 6).Value = Environ("username") End If dic.Remove cel.Address Else .Cells(n°L, 1).Value = sh.Name .Cells(n°L, 2).Value = cel.Address .Cells(n°L, 3).Value = Now .Cells(n°L, 4).Value = cel.Value .Cells(n°L, 5).Value = "" .Cells(n°L, 6).Value = Environ("username") End If Next cel End If If dic.Count > 0 Then For Each clé In dic.Keys n°L = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 .Cells(n°L, 1).Value = sh.Name .Cells(n°L, 2).Value = clé .Cells(n°L, 3).Value = Now .Cells(n°L, 4).Value = sh.Range(clé).Value .Cells(n°L, 5).Value = dic(clé) .Cells(n°L, 6).Value = Environ("username") Next clé dic.RemoveAll End If Target.ClearContents If Not usr Is Nothing Then usr.Value = val End With 'Rétablir le contexte initial sel.Select act.Activate Application.EnableEvents = True End If End Sub
Attention, lorsque c'est une macro qui modifie une valeur, pour éviter que ce code se plante sur le Undo, il faut prévoir dans la macro, avant de modifier la valeur, de désactiver les évènements puis les réactiver après.
Cordialement
Patrice
J'ai essayé les 2 propositions et navré d'annoncé que les 2 me donne un message d'erreur :
" La méthode 'Undo' de l'objet à échoué "
" La méthode 'Undo' de l'objet à échoué "
Alors non je ne suis pas en version antérieur excel, je travaille sur office 2013.
Donc pour être sur de bien faire car je ne suis pas hyper pro en excel vba.
Ton code je le met dans worbook??
Et quand tu dis désactiver les événements ca consiste à faire quoi??
Navré d'être ausii nul
Donc pour être sur de bien faire car je ne suis pas hyper pro en excel vba.
Ton code je le met dans worbook??
Et quand tu dis désactiver les événements ca consiste à faire quoi??
Navré d'être ausii nul
cellule d'origine la modification n’apparaît pas???
Chez moi, si je modifie une cellule, cette modif est effective dans la dite cellule..!!!!!!
Comment modifier le code de sauvegarde de saisie pour certaine feuilles excel exclusivement et non tout le classeur.
certaine feuilles excel exclusivement
modifiez cette ligne en ajoutant
avec autant de And que de test <> si moins de feuilles <> que de feuilles de saisie
autrement ce sont des test Or etc
une facon de coder un peut plus structure: