Historique saisie feuilles excel - Forum VB / VBA

Historique saisie feuilles excel Comment dupliquer feuille excel ? (Résolu) » Forum - Excel Excel : ôter la protection d'une feuille [Résolu] (Résolu) » Forum - Excel VBA - Créer une série de boutons sur un feuille Excel » Conseils pratiques - Microsoft Office VBA : Trouver Hdc d'une feuille Excell et Userform » Conseils pratiques - Bureautique Feuille Excel qui Bloque (Résolu) » Forum - Excel

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

Forum

Historique saisie feuilles excel Comment dupliquer feuille excel ? (Résolu) » Forum - Excel Excel : ôter la protection d'une feuille [Résolu] (Résolu) » Forum - Excel VBA - Créer une série de boutons sur un feuille Excel » Conseils pratiques - Microsoft Office VBA : Trouver Hdc d'une feuille Excell et Userform » Conseils pratiques - Bureautique Feuille Excel qui Bloque (Résolu) » Forum - Excel

Web: www.shapebootstrap.net

22 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

Ce code marche tres bien ....!!!!!!!

Reply
réponses:
  • lamarie028

    Oui effectivement ce code fonctionne pour la copie de la saisie mais dans la cellule d'origine la modification n’apparaît pas???

  • f894009

    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..!!!!!!

  • lamarie028

    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.

  • f894009

    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

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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

Reply
réponses:
  • lamarie028

    Merci beaucoup pour tous ses codes et explications, je test et vous redis?

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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é "

Reply
réponses:
  • Patrice33740

    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.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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

Reply
réponses:
  • auteur

  • Patrice33740

    Exemple :
    https://mon-partage.fr/f/drOtdWsM/

  • lamarie028

    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.

  • Patrice33740

    Utilises mon-partage.fr

  • lamarie028

    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/

  • f894009

    Bonjour,

    Je regarde la chose
    A+

  • f894009

    Re,
    Fichier modifier, mais regardez pour ecrire les infos dans les bonnes cases (date heure et feuille faits)

    https://mon-partage.fr/f/XTGfjYvC/

  • Patrice33740

    Bonjour,

    Ton fichier entièrement corrigé :
    https://mon-partage.fr/f/KH0KuYBk/

  • auteur

    Bonjour
    Merci énormément pour votre aide.
    Vous m'avez enlever un grosse épine du pied, cela fonctionne a merveille.
    Cordialement

  • Patrice33740

    Lequel des 2 fichiers utilises-tu ?

  • auteur

    Pour le moment je fais des test sur les 2 fichiers fournies.
    J'ai juste un légers soucis avec celui de Patrice33740 car tu as modifier une ligne de code pour la sauvegarde d'une saisie d'un userform. Car le sauvegarde ne se fait en haut de mon tableau mais à la ligne 1000.
    Code :With .Range("A" & .Rows.Count).End(xlUp).Offset(1)

  • Patrice33740

    Effectivement, je n'avais pas regardé comment sont formatées tes feuilles réceptrices.
    Cette ligne permet d'aller de façon certaine sur la ligne située après la dernière ligne utilisée, ça écrit sur la ligne 1000 c'est parce que tu as surdimensionné ton tableau avec des lignes inutilisées jusqu'à la ligne 1000 (un tableau se redimensionne automatiquement quand on y ajoute des lignes)

    Pour t'éviter de redimensionner tes tableaux, voici ton fichier :
    https://mon-partage.fr/f/pBz41V2S/

    où j'ai remplacé :

    With .Range("A" & .Rows.Count).End(xlUp).Offset(1) 
    Par
    With .Range("A2").End(xlDown).Offset(1) 
    Notes que cette méthode s'arrête sur la première ligne vide rencontrée qui n'est pas forcement après la dernière ligne utilisée.

    « je ne peux plus supprimer les cellules » c'est-à-dire ? dans quel cas ?

  • auteur

    C'est pareil pour ton fichier Patrice33740 je ne peux plus supprimer les cellules est ce normal??

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed