Copier une cellule

maynou24 -  
rEVOLV3r Messages postés 232 Statut Membre -
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 232 Statut Membre 28
 
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 232 Statut Membre 28
 
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
maynou24
 
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 232 Statut Membre 28
 
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