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 :
Meilleurs outils de productivité bureautique
Améliorez vos compétences Excel avec Kutools for Excel et faites l'expérience d'une efficacité comme jamais auparavant. Kutools for Excel offre plus de 300 fonctionnalités avancées pour augmenter la productivité et gagner du temps. Cliquez ici pour obtenir la fonctionnalité dont vous avez le plus besoin...
Office Tab apporte une interface à onglets à Office et facilite grandement 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!