Copier une cellule
maynou24
-
rEVOLV3r Messages postés 232 Statut Membre -
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 !!
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:
- Copier une cellule
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
- Excel cellule couleur si condition texte - Guide
- Bloquer une cellule excel - Guide
- Aller à la ligne dans une cellule excel - Guide
1 réponse
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
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
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.
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.