Récupération d'une valeur de la cellule que je viens de modifier

Bonjour,

Je bloque sur mon code, l'objectif de mon code est que quand je modifie une cellule présent dans la colonne G (par exemple G3), quand j'ai fini de la modifier une macro se lance et récupère la nouvelle valeur de la cellule et son repère dans le tableur (donc si je change la valeur de ma cellule pour 2 la macro me renvois 2 et G3 dans autre classeur).

Le problème est qu'avec le code que j'ai, quand je valide la modification de ma cellule (avec ENTER ou TAB) la macro récupère la valeur de la nouvelle cellule sélectionnée.(Donc si je fais ENTER il récupère la valeur de H3 si j'étais dans G3)

Je sais pas trop par quoi on peut remplacer les "ActiveCell" présent ligne 6 et 7 pour pas que ça arrive.

Sub test()
Dim time, val1, ref, nomfeuille As String
Dim derniere_ligne As Long

'Récupération données
nomfeuille = ActiveSheet.Name
ref = ActiveCell.Address
vall = ActiveCell.Value

'Ouvrir le classeur dont on a besoin avec tout le chemin..
Workbooks.Open "C:\temp\Sauvgarde.xlsx"

'Ajouter mes donnée en bas du tableau
Sheets(nomfeuille).Select
derniere_ligne = Cells(Rows.Count, 1).End(xlUp).Row
Cells(derniere_ligne + 1, 1) = Now
Cells(derniere_ligne + 1, 2) = ref
Cells(derniere_ligne + 1, 3) = vall

'fermer le workbook
Workbooks("Sauvgarde.xlsx").Close SaveChanges:=True

End Sub

Merci par avance pour votre aide.

bonjour,

pour ce cas, tu devrais utiliser une macro lancée par le gestionnaire d'événements:

tu as le choix, soit un événement sur une feuille bien précise,

code à mettre dans le module de la feuille en question

Private Sub Worksheet_Change(ByVal Target As Range)
'target est la plage de cellules modifiées
dans ton cas
if target.count>1 then exit sub ' plus d'une cellule modifiée on ne fait rien
ref=target.address
vall=target.value
application.enableevents=false 'desactiver la gestion d'événement
'le reste de ta macro
application.enableevents=true 'réactiver la gestion d'événement
End Sub

soit un événement sur n'importe quelle feuille d'un classeur,

code à mettre dans le module du classeur

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
' sh est l'objet feuille, sh.name contient le nom de la feuille
' target est la plage de cellule modifiées
'...
End Sub

Bonjour h2so4,

Merci pour ta réponse, mais j'ai du mal a comprendre en gros je remplace target par ma sélection donc G:G dans mon cas?

Donc quand je modifie par exemple G2 et que j'appuis sur ENTER je récupère la valeur de G2 et non de G3 ? vu que la cellule active est revenu a la ligne ?

bonjour,

Target est une variable VBA qui correspond à la plage qui vient d'être modifiée. S'il n'y a qu'une seule cellule qui a été modifiée, Target fait référence à cette cellule. Target est un objet avec des propriétés, celles qui t'intéressent pour ta macro sont target.value (le contenu de la cellule qui vient d'être modifiée) et target.address (la référence de la cellule qui vient d'être modifiée).

voici par exemple un code complet qui fonctionne dès qu'il y a une modification d'une cellule en colonne G (et uniquement en colonne G)

Private Sub Worksheet_Change(ByVal Target As Range)
    'target est la plage de cellules modifiées

    If Target.Count > 1 Then Exit Sub ' plus d'une cellule modifiée, on ne fait rien
    If Target.Column <> 7 Then Exit Sub ' si la colonne est différente de la colonne G (7ème colonne), on ne fait rien
    ref = Target.Address
    vall = Target.Value
    nomfeuille = "log" 'nom de la feuille log du classeur sauvegarde.xlsx à adapter
    Application.EnableEvents = False 'desactiver la gestion d'événement

    'Ouvrir le classeur dont on a besoin avec tout le chemin..
    Set wblog = Workbooks.Open("d:\downloads\Sauvegarde.xlsx") 'à adapter

    'Ajouter mes donnée en bas du tableau
    With wblog.Sheets(nomfeuille)
        derniere_ligne = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        .Cells(derniere_ligne, 1) = Now
        .Cells(derniere_ligne, 2) = ref
        .Cells(derniere_ligne, 3) = vall
    End With
    'fermer le workbook
    wblog.Close SaveChanges:=True
    Application.EnableEvents = True 'réactiver la gestion d'événement
End Sub

code à mettre dans le module de la feuille sur laquelle tu veux activer le logging

Rechercher des sujets similaires à "recuperation valeur que viens modifier"