Historique saisie feuilles excel

Fermé
lamarie028 Messages postés 8 Date d'inscription samedi 13 janvier 2018 Statut Membre Dernière intervention 13 janvier 2018 - Modifié le 13 janv. 2018 à 02:24
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 15 janv. 2018 à 11:41
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 :

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:

4 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
13 janv. 2018 à 06:54
Bonjour,

Ce code marche tres bien ....!!!!!!!
0
lamarie028 Messages postés 8 Date d'inscription samedi 13 janvier 2018 Statut Membre Dernière intervention 13 janvier 2018
13 janv. 2018 à 10:21
Oui effectivement ce code fonctionne pour la copie de la saisie mais dans la cellule d'origine la modification n’apparaît pas???
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
13 janv. 2018 à 11:48
Re,

cellule d'origine la modification n’apparaît pas???
Chez moi, si je modifie une cellule, cette modif est effective dans la dite cellule..!!!!!!
0
lamarie028 Messages postés 8 Date d'inscription samedi 13 janvier 2018 Statut Membre Dernière intervention 13 janvier 2018
13 janv. 2018 à 11:58
Je viens de me rendre compte qu'il y une incompatibilité avec certaine feuille de mon classeur qui enregistre les données d'un userform.
Comment modifier le code de sauvegarde de saisie pour certaine feuilles excel exclusivement et non tout le classeur.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 13 janv. 2018 à 16:04
Re,

certaine feuilles excel exclusivement
modifiez cette ligne en ajoutant
If Sh.Name <> "Modifications" And Sh.Name <> "TOTO" And Sh.Name <> "Feuil1" Then

avec autant de And que de test <> si moins de feuilles <> que de feuilles de saisie
autrement ce sont des test
Or Sh.Name="Feuil2"
Or etc

une facon de coder un peut plus structure:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "Modifications" Then
        Application.EnableEvents = False
        valsaisie = Target
        Application.Undo
        With Worksheets("modifications")
            temp = Application.CountA(.Range("a:a")) + 1
            .Cells(temp, 1) = Sh.Name
            .Cells(temp, 2) = Target.Address
            .Cells(temp, 3) = Now
            .Cells(temp, 4) = Target
            .Cells(temp, 5) = valsaisie
            .Cells(temp, 6) = Environ("username")
        End With
        Target = valsaisie
        Application.EnableEvents = True
    End If
End Sub
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 13 janv. 2018 à 18:02
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 :
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
0
lamarie028 Messages postés 8 Date d'inscription samedi 13 janvier 2018 Statut Membre Dernière intervention 13 janvier 2018
13 janv. 2018 à 18:14
Merci beaucoup pour tous ses codes et explications, je test et vous redis?
0
lamarie028 Messages postés 8 Date d'inscription samedi 13 janvier 2018 Statut Membre Dernière intervention 13 janvier 2018
13 janv. 2018 à 19:06
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é "
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 13 janv. 2018 à 19:10
Tu n'as pas appliqué ce que je t'ai dis après le code ! (désactiver les évènement ...), à moins que tu n'utilises une version Excel antérieure à 2007.
0
lamarie028 Messages postés 8 Date d'inscription samedi 13 janvier 2018 Statut Membre Dernière intervention 13 janvier 2018
13 janv. 2018 à 19:15
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
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
13 janv. 2018 à 19:43
Exemple :
https://mon-partage.fr/f/drOtdWsM/
0
lamarie028 Messages postés 8 Date d'inscription samedi 13 janvier 2018 Statut Membre Dernière intervention 13 janvier 2018
13 janv. 2018 à 20:07
Encore merci pour ton aide.
Mais je pense qu'il doit y avoir un conflit avec un autre code car j'ai remis les codes et il me met toujours le code erreur.
Puis je abusé et t'envoyé mon fichier afin que tu jette un coup d’œil de l'ensemble et peux être trouver mon problème.
Sinon C'est pas grave.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
13 janv. 2018 à 22:18
Utilises mon-partage.fr
0
lamarie028 Messages postés 8 Date d'inscription samedi 13 janvier 2018 Statut Membre Dernière intervention 13 janvier 2018
13 janv. 2018 à 23:13
Merci encore pour ton aide.
Juste une petite explication c'est un fichier pour reconditionner un sac médical.
Pour accéder aux feuille excel : id:admin et mdp : admin.
De même pour accéder code vba : admin.
https://mon-partage.fr/f/9Wy7HUKg/
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
14 janv. 2018 à 08:33
Bonjour,

Je regarde la chose
A+
0