Copier une cellule

Fermé
maynou24 - 19 mars 2019 à 10:35
rEVOLV3r Messages postés 223 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 21 septembre 2022 - 20 mars 2019 à 08:00
je suis bloqué dès le matin
je suis entrain de créer un historique d'une cellule dans un fichier excel. l'historique enregistre la valeur ancienne de la cellule, la date et l'horaire de changement et l'utilisateur qui a fait le changement. je veux aussi qu'il enregistre la cellule qui ce trouve dans la 2ème colonne et la ligne de la cellule changée. par exemple si j'ai changé la cellule qui se trouve dans la ligne 5 et la colonne 6, dans l'historique il m'affiche le contenu de la cellule de la ligne 5 et la colonne 2.
je ne sais pas si c'est clair !!
A voir également:

1 réponse

rEVOLV3r Messages postés 223 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 21 septembre 2022 28
19 mars 2019 à 11:43
Bonjour,

Vous devez passer par une macro VBA qui gère l'évènementiel de la page.

Mettre dans le module de la feuille en question :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws_histo As Worksheet
Set ws_histo = ThisWorkbook.Sheets("Histo")
Dim lastcell As Range
On Error GoTo fin
'Sélectionne uniquement la colonne n°1 pour l'évènementiel des changements
If Target.Column = 1 Then
Set lastcell = ws_histo.Columns(1).Find("*", , , , xlByColumns, xlPrevious)
lastcell.Offset(1, 0).Value = Target.Address
lastcell.Offset(1, 1).Value = Now
lastcell.Offset(1, 2).Value = Application.UserName
End If
Exit Sub
fin:
MsgBox "Une erreur est apparue, l'historique n'a pas été sauvegardé", vbCritical + vbOKOnly, "Error"
End Sub


Créer un onglet nommé "Histo"


Chaque modification d'une cellule de la colonne 1 engendrera une nouvelle entrée dans la page Histo
0
rEVOLV3r Messages postés 223 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 21 septembre 2022 28
Modifié le 19 mars 2019 à 12:40
Oups il manque la valeur :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws_histo As Worksheet
Set ws_histo = ThisWorkbook.Sheets("Histo")
Dim lastcell As Range
On Error GoTo fin
'Sélectionne uniquement la colonne n°1 pour l'évènementiel des changements
If Target.Column = 1 Then
Set lastcell = ws_histo.Columns(1).Find("*", , , , xlByColumns, xlPrevious)
lastcell.Offset(1, 0).Value = Target.Address
lastcell.Offset(1, 1).Value = Target.Value
lastcell.Offset(1, 2).Value = Now
lastcell.Offset(1, 3).Value = Application.UserName
End If
Exit Sub
fin:
MsgBox "Une erreur est apparue, l'historique n'a pas été sauvegardé", vbCritical + vbOKOnly, "Error"
End Sub



Bien entendu, a chaque changement, cela enregistrera le changement actuel et pas l'ancien. L'historique prendra la nouvelle valeur en dernière ligne et il suffira de le trier par rapport à l'adresse afin de voir tout son historique.
0
merciii beaucoup.. si je veux que l'historique commence de la 5ème ligne: cela dire que dans votre exemple la ligne : adresse, date, utilisateur soit dans la ligne 4.. comment je peux le faire ?
0
rEVOLV3r Messages postés 223 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 21 septembre 2022 28
20 mars 2019 à 08:00
Bonjour,
soit : remplacer la ligne set lastcell par celle-ci :
Set lastcell = ws_histo.Range("A4:A1048576").Find("*", , , , xlByColumns, xlPrevious)

ou plus simple : mettre des données dans les cellules A1, A2 et A3. cela peut être juste une valeur ou une lettre. la ligne de code set lastcell renvoi la première cellule non vide de la colonne 1.
0