Note: The other languages of the website are Google-translated. Back to English
Se connecter  \/ 
x
or
x
INSCRIPTION  \/ 
x

or

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 précédente dans une autre cellule ou dans le commentaire de la cellule sera un bon choix. La méthode décrite dans 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.

Enregistrer la valeur précédente dans une autre cellule:

Enregistrer la valeur précédente dans le commentaire:


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ée...
  • 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 gammes...
  • 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 cellules...
  • 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 PDF...
  • 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
Say something here...
symbols left.
You are guest
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Kim Hyun Su · 2 months ago
    It is good if you type in.
    Can you help me to work it in when data is entered by using the value of function from DDE(Dynamic Data Exchange) as well?
  • To post as a guest, your comment is unpublished.
    Jennie · 4 months ago
    Is there a way to repeat this for all changes? I would like the Comments Box to show all of the previous entries if possible. 
  • To post as a guest, your comment is unpublished.
    FlemmingNissen · 1 years ago
    If the cell I want to save is a formula, the G cell will only save the formula, and calculate the value. I need to save the value - not the formula. How can I tell the VBA code, that the value changes although the formula is not changed. Best regards Flemming
  • To post as a guest, your comment is unpublished.
    Kedar0412 · 1 years ago
    This is for one cell value ,but how do for multiple cell value ,i want 4 cell data store and update like this for example C,D,E,F cell data into G,H,I,J cell respectively ,how can do please help
  • To post as a guest, your comment is unpublished.
    Manuel Vargas · 1 years ago
    Hello, so modified the "VBA code: Save previous cell value into another column cell" code you made, however I have a couple of questions:

    1. How does the code know which column has the new values? (which after another update would have its values out in the other column)
    2. How can you make this into a Macro? Or make it run automatically when another program calls the xlsm. file?

    Thanks
  • To post as a guest, your comment is unpublished.
    Age · 1 years ago
    Hi !

    Great function but how can it be modified to work also with a cell I want to memorize the value containing VLOOKUP ? Unfortunately I couldn't find what to modify to save the value from the VLOOKUP. As it is it doesn't work when VLOOKUP's are in the middle :(

    Thanks in advance for your help !
  • To post as a guest, your comment is unpublished.
    sahusantosh30@gmail.com · 1 years ago
    Why the above code is not working for DDE data, i have a data in a column which is changing through dde , but the moment i applied this code to save the previous value of that column into another column , its not doing anything ;

    Any help to achieve this is much appreciated .
  • To post as a guest, your comment is unpublished.
    OscarLopez · 2 years ago
    I was thinking about in a sentence "If/else" but I´m new using VBA, so if you have another post that could me help me, please share with me, and again thank you ! keep sharing the knowledge
  • To post as a guest, your comment is unpublished.
    OscarLopez · 2 years ago
    Hi ! I just wanted to know if it is possible register multiples changes to the cell, I mean, if I put data in the cell C2 and then I change that data for other information, the previous data pass to the cell G2 (like in this post), but If I change the value one more time in cell C2, the second change that I made pass to the cell H2 (for example) and now I registered the information of the 3 movements that I realized, and do it almost 5 times more (save the previous cell value 5 times). If you could help me I would appreciate so much because here in your post it´s the only place that I found where solve my problem partialy. Thanks for sharing this content!!!!

  • To post as a guest, your comment is unpublished.
    gustavo@apelidos.com.br · 3 years ago
    i need something like this, but only in specific cells (ex.: G12 to show in H23 the old value)
    • To post as a guest, your comment is unpublished.
      gustavo@apelidos.com.br · 3 years ago
      And other ... I need this run when a cell change by a result (EX.: A1 + B1 = C1... if I change A or B value, the script does not work - nothing happens in G cell)