Historique saisie feuilles excel

lamarie028 Messages postés 8 Statut Membre -  
Patrice33740 Messages postés 8400 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 :

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

4 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Ce code marche tres bien ....!!!!!!!
    0
    1. lamarie028 Messages postés 8 Statut Membre
       
      Oui effectivement ce code fonctionne pour la copie de la saisie mais dans la cellule d'origine la modification n’apparaît pas???
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    3. lamarie028 Messages postés 8 Statut Membre
       
      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
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
    1. lamarie028 Messages postés 8 Statut Membre
       
      Merci beaucoup pour tous ses codes et explications, je test et vous redis?
      0
  3. lamarie028 Messages postés 8 Statut Membre
     
    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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      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
  4. lamarie028 Messages postés 8 Statut Membre
     
    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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Exemple :
      https://mon-partage.fr/f/drOtdWsM/
      0
    2. lamarie028 Messages postés 8 Statut Membre
       
      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
    3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Utilises mon-partage.fr
      0
    4. lamarie028 Messages postés 8 Statut Membre
       
      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
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Je regarde la chose
      A+
      0