Écrire dans une cellule Excel si changement

Résolu
marie-delphine -  
 marie-delphine -
Bonsoir à tous,
J'ai besoin de votre aide en VBA. Parfaite débutante, je voudrais créer une macro dans mon fichier Excel qui fasse que si on change le contenu d'une cellule, sur la même ligne mais dans des colonnes beaucoup plus à droite s'écrivent la date de modification, l'heure et l'utilisateur.
J'y suis +/- arrivée, sauf que si je modifie la cellule A1, quand je tape Enter et donc que je descend en A2, c'est H2, I2 et J2 qui prennent les valeurs demandées. Par contre, si je delete le contenu de A1, C'est H1, I1 et J1 qui prennent les valeurs, ce qui est bien sur le but de la manoeuvre!
Voilà mon petit code.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A1:G10000")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
Workbooks("test.xlsx").Sheets("Feuil1").Range("H" & ActiveCell.Row).Value = Time
Workbooks("test.xlsx").Sheets("Feuil1").Range("I" & ActiveCell.Row).Value = Date
Workbooks("test.xlsx").Sheets("Feuil1").Range("J" & ActiveCell.Row).Value = Environ("USERNAME")

End If
End Sub

Je suis certaine qu'un connaisseur pourra me renseigner :)
Merci!

2 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Par exemple :
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect([A1:G10000], Target) Is Nothing Then
        Target.EntireRow.Cells(1, "H").Value = Time
        Target.EntireRow.Cells(1, "I").Value = Date
        Target.EntireRow.Cells(1, "J").Value = Environ("USERNAME")
      End If
    End Sub
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Ou mieux (fonctionne aussi en cas de saisie matricielle) :
      Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect([A1:G10000], Target) Is Nothing Then
          Target.EntireRow.Columns("H").Value = Time
          Target.EntireRow.Columns("I").Value = Date
          Target.EntireRow.Columns("J").Value = Environ("USERNAME")
        End If
      End Sub
      0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,

    Si c'est sur la ligne que tu as modifié que tu veux écrire.. ce n'est pas activecell que tu dois utiliser mais target
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
        Set KeyCells = Range("A1:G10000")
        
        If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
            ThisWorkbook.Sheets("Feuil1").Range("H" & Target.Row).Value = Time
            ThisWorkbook.Sheets("Feuil1").Range("I" & Target.Row).Value = Date
            ThisWorkbook.Sheets("Feuil1").Range("J" & Target.Row).Value = Environ("USERNAME")
        
        End If
    End Sub
    

    0
    1. marie-delphine
       
      Merci mille fois, le Target.Row fonctionne à merveille!
      Je savais que je trouverais mon bonheur sur ce Forum ;)
      0