Note: The other languages of the website are Google-translated. Back to English
English English

Comment se souvenir ou enregistrer la valeur de cellule précédente d'une cellule modifiée dans Excel?

Normalement, lors de la mise à jour d'une cellule avec un nouveau contenu, la valeur précédente sera couverte à moins d'annuler l'opération dans Excel. Cependant, si vous souhaitez conserver la valeur précédente pour la comparer avec la valeur mise à jour, enregistrer la valeur de cellule précédente dans une autre cellule ou dans le commentaire de cellule sera un bon choix. La méthode de cet article vous aidera à y parvenir.

Enregistrer la valeur de cellule précédente avec le code VBA dans Excel


Enregistrer la valeur de cellule précédente avec le code VBA dans Excel


Supposons que vous ayez un tableau comme ci-dessous. Si une cellule de la colonne C a changé, vous souhaitez enregistrer sa valeur précédente dans la cellule correspondante de la colonne G ou enregistrer automatiquement dans le commentaire. Veuillez procéder comme suit pour y parvenir.

1. Dans la feuille de calcul contient la valeur que vous allez enregistrer lors de la mise à jour, cliquez avec le bouton droit sur l'onglet de la feuille et sélectionnez Voir le code dans le menu contextuel. Voir la capture d'écran:

2. Dans l'ouverture Microsoft Visual Basic pour applications fenêtre, copiez le code VBA ci-dessous dans la fenêtre Code.

Le code VBA suivant vous aide à enregistrer la valeur de cellule précédente de la colonne spécifiée dans une autre colonne.

Code VBA: enregistrer la valeur de cellule précédente dans une autre cellule de colonne

Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Long
    Dim xCell As Range
    Dim xDCell As Range
    Dim xHeader As String
    Dim xCommText As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    xHeader = "Previous value :"
    x = xDic.Keys
    For I = 0 To UBound(xDic.Keys)
        Set xCell = Range(xDic.Keys(I))
        Set xDCell = Cells(xCell.Row, 7)
        xDCell.Value = ""
        xDCell.Value = xDic.Items(I)
    Next
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim I, J As Long
    Dim xRgArea As Range
    On Error GoTo Label1
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    Set xDependRg = Target.Dependents
    If xDependRg Is Nothing Then GoTo Label1
    If Not xDependRg Is Nothing Then
        Set xDependRg = Intersect(xDependRg, Range("C:C"))
    End If
Label1:
    Set xRg = Intersect(Target, Range("C:C"))
    If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = Union(xRg, xDependRg)
    ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = xDependRg
    ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
        Set xChangeRg = xRg
    Else
        Application.EnableEvents = True
        Exit Sub
    End If
    xDic.RemoveAll
    For I = 1 To xChangeRg.Areas.Count
        Set xRgArea = xChangeRg.Areas(I)
        For J = 1 To xRgArea.Count
            xDic.Add xRgArea(J).Address, xRgArea(J).Formula
        Next
    Next
    Set xChangeRg = Nothing
    Set xRg = Nothing
    Set xDependRg = Nothing
    Application.EnableEvents = True
End Sub

Pour enregistrer la valeur de cellule précédente dans un commentaire, veuillez appliquer le code VBA ci-dessous

Code VBA: enregistrer la valeur de cellule précédente dans le commentaire

Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Long
    Dim xCell As Range
    Dim xHeader As String
    Dim xCommText As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    xHeader = "Previous value :"
    For I = 0 To UBound(xDic.Keys)
        Set xCell = Range(xDic.Keys(I))
        If Not xCell.Comment Is Nothing Then xCell.Comment.Delete
        With xCell
            .AddComment
            .Comment.Visible = False
            .Comment.Text xHeader & vbCrLf & xDic.Items(I)
        End With
    Next
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim I, J As Long
    Dim xRgArea As Range
    On Error GoTo Label1
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    Set xDependRg = Target.Dependents
    If xDependRg Is Nothing Then GoTo Label1
    If Not xDependRg Is Nothing Then
        Set xDependRg = Intersect(xDependRg, Range("C:C"))
    End If
Label1:
    Set xRg = Intersect(Target, Range("C:C"))
    If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = Union(xRg, xDependRg)
    ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = xDependRg
    ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
        Set xChangeRg = xRg
    Else
        Application.EnableEvents = True
        Exit Sub
    End If
    xDic.RemoveAll
    For I = 1 To xChangeRg.Areas.Count
        Set xRgArea = xChangeRg.Areas(I)
        For J = 1 To xRgArea.Count
            xDic.Add xRgArea(J).Address, xRgArea(J).Text
        Next
    Next
    Set xChangeRg = Nothing
    Set xRg = Nothing
    Set xDependRg = Nothing
    Application.EnableEvents = True
End Sub

Notes: Dans le code, le numéro 7 indique la colonne G dans laquelle vous allez enregistrer la cellule précédente, et C: C est la colonne dans laquelle vous enregistrez la valeur de la cellule précédente. Veuillez les modifier en fonction de vos besoins.

3. Cliquez Outils > Références ouvrir le Références - VBAProject boîte de dialogue, vérifiez le Exécution de scripts Microsoft et enfin cliquez sur le OK bouton. Voir la capture d'écran:

4. appuie sur le autre + Q touches pour fermer le Microsoft Visual Basic pour applications fenêtre.

À partir de maintenant, lorsque la valeur de la cellule de la colonne C est mise à jour, la valeur précédente de la cellule sera enregistrée dans les cellules correspondantes de la colonne G, ou enregistrée dans le commentaire comme le montrent les captures d'écran ci-dessous.

Enregistrez les valeurs de cellule précédentes dans d'autres cellules :

Enregistrez les valeurs de cellule précédentes dans les commentaires :


Les meilleurs outils de productivité de bureau

Kutools for Excel résout la plupart de vos problèmes et augmente votre productivité de 80%

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtréeplus
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammesplus
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellulesplus
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDFplus
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2019 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (20)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
j'ai besoin de quelque chose comme ça, mais seulement dans des cellules spécifiques (ex.: G12 pour afficher en H23 l'ancienne valeur)
Ce commentaire a été minimisé par le modérateur sur le site
Et autre ... j'ai besoin de cette exécution lorsqu'une cellule change par un résultat (EX.: A1 + B1 = C1... si je change la valeur A ou B, le script ne fonctionne pas - rien ne se passe dans la cellule G)
Ce commentaire a été minimisé par le modérateur sur le site
Salut ! Je voulais juste savoir s'il est possible d'enregistrer plusieurs changements dans la cellule, je veux dire, si je mets des données dans la cellule C2 et que je change ensuite ces données pour d'autres informations, les données précédentes passent à la cellule G2 (comme dans ce post ), mais si je change la valeur une fois de plus dans la cellule C2, la deuxième modification que j'ai faite passe à la cellule H2 (par exemple) et maintenant j'ai enregistré les informations des 3 mouvements que j'ai réalisés, et je le fais presque 5 fois plus (enregistrez la valeur de la cellule précédente 5 fois). Si vous pouviez m'aider, j'apprécierais beaucoup car ici, dans votre message, c'est le seul endroit que j'ai trouvé pour résoudre partiellement mon problème. Merci de partager ce contenu !!!!
Ce commentaire a été minimisé par le modérateur sur le site
avez-vous trouvé comment faire cela?
Ce commentaire a été minimisé par le modérateur sur le site
Je pensais dans une phrase "If/else" mais je suis novice en VBA, donc si vous avez un autre post qui pourrait m'aider, merci de le partager avec moi, et encore merci ! continuer à partager les connaissances
Ce commentaire a été minimisé par le modérateur sur le site
Pourquoi le code ci-dessus ne fonctionne pas pour les données DDE, j'ai des données dans une colonne qui change via dde , mais au moment où j'ai appliqué ce code pour enregistrer la valeur précédente de cette colonne dans une autre colonne, cela ne fait rien ;

Toute aide pour y parvenir est très appréciée.
Ce commentaire a été minimisé par le modérateur sur le site
Salut !

Super fonction mais comment peut-elle être modifiée pour fonctionner aussi avec une cellule Je veux mémoriser la valeur contenant VLOOKUP ? Malheureusement, je n'ai pas trouvé quoi modifier pour enregistrer la valeur de VLOOKUP. En l'état, cela ne fonctionne pas lorsque VLOOKUP est au milieu :(

Merci d'avance pour votre aide !
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, j'ai donc modifié le code "Code VBA : Enregistrer la valeur de cellule précédente dans une autre cellule de colonne" que vous avez créé, mais j'ai quelques questions :

1. Comment le code sait-il quelle colonne contient les nouvelles valeurs ? (qui après une autre mise à jour aurait ses valeurs dans l'autre colonne)
2. Comment pouvez-vous en faire une macro ? Ou faites-le s'exécuter automatiquement lorsqu'un autre programme appelle xlsm. dossier?

Merci
Ce commentaire a été minimisé par le modérateur sur le site
Ceci est pour une valeur de cellule, mais comment faire pour plusieurs valeurs de cellule, je veux un magasin de données à 4 cellules et une mise à jour comme celle-ci, par exemple les données des cellules C, D, E, F dans les cellules G, H, I, J respectivement, comment faire s'il vous plaît aider
Ce commentaire a été minimisé par le modérateur sur le site
Si la cellule que je veux enregistrer est une formule, la cellule G enregistrera uniquement la formule et calculera la valeur. Je dois enregistrer la valeur - pas la formule. Comment puis-je dire au code VBA que la valeur change bien que la formule ne soit pas modifiée. Cordialement Flemming
Ce commentaire a été minimisé par le modérateur sur le site
Existe-t-il un moyen de répéter cela pour tous les changements ? Je voudrais que la boîte de commentaires affiche toutes les entrées précédentes si possible.
Ce commentaire a été minimisé par le modérateur sur le site
Salut Jennie ! Avez-vous réussi à résoudre ce problème ? J'essaie également de rassembler dans une boîte de commentaires toutes les nouvelles entrées, mais j'ai des difficultés à adapter le code VBA à cela. Merci!
Ce commentaire a été minimisé par le modérateur sur le site
C'est bien si vous tapez. Pouvez-vous m'aider à le faire lorsque les données sont saisies en utilisant également la valeur de la fonction de DDE (Dynamic Data Exchange) ?
Ce commentaire a été minimisé par le modérateur sur le site
Hi,
Désolé je ne peux pas résoudre ce problème. Je vous suggère de poster le problème sur le forum ci-dessous pour obtenir de l'aide d'autres passionnés d'Excel.
https://www.extendoffice.com/forum/kutools-for-excel.html
Ce commentaire a été minimisé par le modérateur sur le site
cho e hỏi chút là có cách nào để khi tính toán cộng trừ xong thì nó sẽ lưu lại giá trị khi tính toán xong không ạ
ví dụ :
Giá trị ở cột A = cột B + cột C
Khi tính toán xong cột a sẽ lưu giá trị sau khi đã tính toán xong, lần tiếp theo tính toán thì nó cột a sẽ lấy giá trị hiện tại ể tính toá tiếp chứ khôg lấy
Ce commentaire a été minimisé par le modérateur sur le site
Salut Trung,
Le code a été mis à jour. Veuillez essayer. Merci pour vos commentaires.
Dans le code suivant, le nombre 5 dans cette ligne Définir xDCell = Cells(xCell.Row, 5) représente la colonne E où vous placerez la valeur précédente. A:A fait référence aux cellules de la colonne A. Vous devez enregistrer les valeurs précédentes de ces cellules.

Dim xRg As Range
'Updated by Extendoffice 20220803
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Long
    Dim xCell As Range
    Dim xDCell As Range
    Dim xHeader As String
    Dim xCommText As String
    Dim X
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    xHeader = "Previous value :"
    X = xDic.Keys
    For I = 0 To UBound(xDic.Keys)
        Set xCell = Range(xDic.Keys(I))
        Set xDCell = Cells(xCell.Row, 5)
        
        xDCell.NumberFormatLocal = xCell.NumberFormatLocal
        xDCell.Value = xDic.Items(I)
        
    Next
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim I, J As Long
    Dim xRgArea As Range
    On Error GoTo Label1
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    Set xDependRg = Target.Dependents
    If xDependRg Is Nothing Then GoTo Label1
    If Not xDependRg Is Nothing Then
        Set xDependRg = Intersect(xDependRg, Range("A:A"))
    End If
Label1:
    Set xRg = Intersect(Target, Range("A:A"))
    If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = Union(xRg, xDependRg)
    ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = xDependRg
    ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
        Set xChangeRg = xRg
    Else
        Application.EnableEvents = True
        Exit Sub
    End If
    xDic.RemoveAll
    For I = 1 To xChangeRg.Areas.Count
        Set xRgArea = xChangeRg.Areas(I)
        For J = 1 To xRgArea.Count
            xDic.Add xRgArea(J).Address, xRgArea(J).Text ' xRgArea(J).Formula
        Next
    Next
    Set xChangeRg = Nothing
    Set xRg = Nothing
    Set xDependRg = Nothing
    Application.EnableEvents = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
ne fonctionne que lors de la saisie manuelle des données
mais ne fonctionne pas lorsque les données sont actualisées à partir d'un site Web
s'il vous plaît aider
à
Ce commentaire a été minimisé par le modérateur sur le site
enregistrer les données précédentes lors de la saisie manuelle mais ne fonctionne pas lorsque les données sont actualisées à partir d'un site Web, cela ne fait rien
s'il vous plaît aider
à
Ce commentaire a été minimisé par le modérateur sur le site
Salut Kamal.
Ce problème est un peu compliqué. Après avoir essayé diverses méthodes, je n'arrive pas à m'en sortir. Je suis désolé pour ça.
Ce commentaire a été minimisé par le modérateur sur le site
Est-ce que n'importe quel corps peut aider dans ce problème
Il n'y a pas encore de commentaires postés ici
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0   Personnages
Emplacements suggérés