Copie de cellule avant changement.

  • Initiateur de la discussion Initiateur de la discussion WDAndCo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

WDAndCo

XLDnaute Impliqué
Bonjour le Forum

En colonne I il y a les dates des derniers controle.
Je voudrais garder une trace de ces dates, en les copiant en colonne DC avant leurs modifications !
J'avais pensé à :

La modif à lieu en colonne I Non Exit Sub
Oui copie de I rows dans dans une mémoire
La modif est une date Non Exit Sub
Oui copie de la mémoire en DC rows

Votre avis, et comment realiser cela ?
 
Re : Copie de cellule avant changement.

Bonjour, WDAndCo, le Forum,

Peut-être avec cette macro événementielle :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 9 Or Target.Count <> 1 Then Exit Sub
If IsDate(Target) Then
Target.Copy Destination:=Range("DC65536").End(xlUp).Offset(1, 0)
Range("DC65536").End(xlUp).Offset(0, 1) = Target.Address
End If
End Sub

A bientôt 🙂
 
Re : Copie de cellule avant changement.

Bonjour le Forum

Merci DoubleZero

Voici les résultats : des colonne DC2 à DD3 apres essais,
04/04/2013 $I$2
04/04/2012 $I$2

La colonne DC contient la nouvelle Date du controle, alors quelle devrait contenir celle avant modif.

J'ai pour l'instant pas de date en DC

J'ai les dates des derniers controle en I

Un controle viens d'etre realisé je vais donc je modifier la date en I, mais je n'aurais plus la date du controle precedent puisqu'elle etait en I
Si il y a une autre solution je suis preneur, le but étant de pouvoir donner la derniere et l'avant derniere date des controles.

Avant modif
I(X) = 1/1/2000 DC(X) = ""

Apres modif
I(X) = 1/1/2003 DC(X) = 1/1/2000

J'espere avoir ete plus clair.
Dominique
 
Dernière édition:
Re : Copie de cellule avant changement.

Bonjour WDAndCo, bonjour chère ânesse 🙂

Si j'ai bien compris, essayez :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 9 Or Target.Count > 1 Then Exit Sub
If Not IsDate(Target) Then Exit Sub
Dim ac As Range, t
Application.EnableEvents = False
Set ac = ActiveCell 'mémorise la cellule
Application.Undo 'annule l'entrée
t = Range("I1:I2", Cells(Rows.Count, 9).End(xlUp)) 'tableau avec au moins 2 éléments
Application.Undo 'rétablit l'entrée
ac.Select
[DC1].Resize(UBound(t)) = t
Range("DC" & UBound(t) + 1 & ":DC" & Rows.Count).ClearContents
Application.EnableEvents = True
End Sub
A+
 
Re : Copie de cellule avant changement.

Bonjour le Forum

Merci DoubleZero et job75 (Bravo pour les 12000)

On approche :
Mais le changement de date ne doit se faire que sur le ligne modifié !

Car si : (I4) = 1/2/3 et (DC4) = 2/1/1

Si je change la valeur, par exemple de (I6), (DC4) change et passe à 1/2/3, alors qu'il ne doit pas, uniquement (DC6) doit changer avec l'ancienne valeur de (I6).

Encore merci.
 
Re : Copie de cellule avant changement.

Re,

Même méthode avec une seule valeur mémorisée :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 9 Or Target.Count > 1 Then Exit Sub
If Not IsDate(Target) Then Exit Sub
Dim ac As Range, v
Application.EnableEvents = False
Set ac = ActiveCell 'mémorise la cellule
Application.Undo 'annule l'entrée
v = Target 'mémorise la valeur
Application.Undo 'rétablit l'entrée
ac.Select
Cells(Target.Row, "DC") = v
Application.EnableEvents = True
End Sub
A+
 
Re : Copie de cellule avant changement.

Re,

Il me semble que ceci convient mieux, à vous de voir :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 9 Or Target.Count > 1 Then Exit Sub
Dim ac As Range, dat As Date, flag As Boolean
Application.EnableEvents = False
Set ac = ActiveCell 'mémorise la cellule
Application.Undo 'annule l'entrée
If IsDate(Target) Then dat = Target: flag = True
Application.Undo 'rétablit l'entrée
ac.Select
If flag Then Cells(Target.Row, "DC") = dat
Application.EnableEvents = True
End Sub
L'ancienne date est toujours récupérée, par exemple si on l'efface.

A+
 
Re : Copie de cellule avant changement.

Bonjour le Forum

Merci, c'est pile tout bon !

Un autre truc :
J'ai cela : ="Le "&E2& " est "&L2&" avant le "&K2
Qui me donne : Le TGP est A VERIFIER avant le 41383,16
Je voudrais : Le TGP est A VERIFIER avant le 04/04/2013

Encore merci.
Dominique
 
Re : Copie de cellule avant changement.

Re,

Ca c'est élémentaire, remplacer K2 par TEXTE(K2;"jj/mm/aaaa")

Edit : 41383 c'est le 19/04/2013... Alors peut-être TEXTE(K2-15;"jj/mm/aaaa")

A+
 
Dernière édition:
Re : Copie de cellule avant changement.

Bonjour à tous,

Le sujet m'intéresse.
Job, si je glisse mon curseur dans la barre de formule et je valide, je déclenche l'événement change sans pour autant modifier la valeur de la cellule.
Conséquence : je me retrouve avec la même valeur en colonne I qu'en DC 😛
Idem si malencontreusement je saisis la même valeur !
Comment y remédier ?

Klin89
 
Dernière édition:
Re : Copie de cellule avant changement.

Re, salut klin89,

Je ne vois pas trop l'intérêt de ces supputations.

Car on peut toujours modifier une date, puis re-modifier avec l'ancienne date, etc...

Edit : en passant, la variable flag est inutile dans mon post #7 :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 9 Or Target.Count > 1 Then Exit Sub
Dim ac As Range, dat As Date
Application.EnableEvents = False
Set ac = ActiveCell 'mémorise la cellule
Application.Undo 'annule l'entrée
If IsDate(Target) Then dat = Target
Application.Undo 'rétablit l'entrée
ac.Select
If dat Then Cells(Target.Row, "DC") = dat
Application.EnableEvents = True
End Sub
A+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
909
Retour