Enregistrer une date si cellule modifiée

largoj

XLDnaute Nouveau
Bonjour,
Suite à un problème resté sans solution , je renouvelle ma demande.
Je souhaiterais enregistrer la date dans une cellule lorsqu'une cellule voisine a été modifiée.
J'ai appliqué un code trouvé sur internet mais il n'est pas adapté car il modifie la date pour les mauvaises cellules, et je ne parviens pas à le modifier pour l'adapter à mon fichier.
Pour comprendre le mieux est de consulter le fichier ci-joint.
Merci pour votre aide, cordialement, largoj.
 

Pièces jointes

  • Classeur2.xlsm
    52.8 KB · Affichages: 45
  • Classeur2.xlsm
    52.8 KB · Affichages: 57
  • Classeur2.xlsm
    52.8 KB · Affichages: 50

Dranreb

XLDnaute Barbatruc
Re : Enregistrer une date si cellule modifiée

Bonjour
Êtes vous sur de projeter de pouvoir modifier les contenus des cellules colonnes G et I ?
Car actuellement elles contiennent des formules. Leurs valeurs changent donc sans qu'aucunement leur contenu ne change.
Une Worksheet_Change ne saurait détecter qu'une modification du contenu de cellules qui en dépendent.
Pour que la date change quand on remplace la formule par autre chose :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Me.[G:G,I:I], Target) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
Target.Offset(, 1) = Date
End Sub
 
Dernière édition:

largoj

XLDnaute Nouveau
Re : Enregistrer une date si cellule modifiée

Le contenu des cellules G et I se modifie lorsqu'on modifie la valeur des cellules des colonnes B,C,D.
Les cellules de la col. G se modifient de 12 en 12 (somme des cell. des col.B,et C)
Les cellules de la col. I se modifie de 10 en 10 selon la valeur des cell. de la col.D
Il s'agit d'un système de gratuité accordé dés l'achat de 12 (jaunes-bleus) ou 10 sacs(marrons)
 

Dranreb

XLDnaute Barbatruc
Re : Enregistrer une date si cellule modifiée

Le contenu des cellules G et I se modifie lorsqu'on modifie la valeur des cellules des colonnes B,C,D.
Faux. Il n'y a aucune macro qui modifie le contenu des cellules G ou I quand on modifie une des B,C,D.
C'est peut être ce que devrait faire la Worksheet_Change: corriger s'il y a lieu la valeur calculée et la date qui suit. Remplacer préalablement les formules par leurs valeurs.
 
Dernière édition:

largoj

XLDnaute Nouveau
Re : Enregistrer une date si cellule modifiée

Ce n'est pas une macro qui modifie le contenu des cell. G et I, c'est une simple formule :pour la ligne 7 par ex.(ENT(F7/12), la somme des cell. B7 et C7 modifie la cell. G7 à partir de 12, 24,36.... idem pour la cell. I7 qui est modifiée par la cell.D7. à partir de 10,puis 20,30..
Faites des essais depuis les listes déroulantes des col. BCD.
cordialement,largoj
 

Dranreb

XLDnaute Barbatruc
Re : Enregistrer une date si cellule modifiée

La valeur n'est pas le contenu.
Votre problème n'a pas de solution si vous tenez à vos formules car il est impossible de savoir quelles valeurs elles renvoyaient avant qu'on change un de leurs dépendants car on n'a plus l'ancienne valeur de celui ci.

P.S. À moins de profiter de la Worksheet_SelectionChange pour noter les valeurs de la ligne dans un tableau global.
Mais pourquoi faire compliqué quand on peut faire simple ?
 
Dernière édition:

largoj

XLDnaute Nouveau
Re : Enregistrer une date si cellule modifiée

Si je comprends bien, il serait difficile de créer un code qui afficherait une date dans les col. H et J en raison d'une formule dans les col. G et I ?
Y aurait-il un moyen de contourner le problème ? par exemple en réalisant une copie de la cel. G7 à coté (=G7), il n'y aurait plus de formule dans ce cas.
 

sousou

XLDnaute Barbatruc
Re : Enregistrer une date si cellule modifiée

Bonjour Largoj etDranreb

Toutes vos remarques ont exact, je propose donc le remplacement des formule ent.... par du code dans la feuille sur change.
voici ce code: il remplace les formule par un calcul qui permet de faire ce que tu souhaites.
Cependant j'ai supprimer ton code sur selection change sans avoir bien regardé à quoi il servait.


Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Or Target.Column = 3 Then
valeur = Target.Parent.Cells(Target.Row, 7).Value
compare = Int((Target.Parent.Cells(Target.Row, 2) + Target.Parent.Cells(Target.Row, 3)) / 12)
'MsgBox valeur & " " & compare
If compare <> valeur Then
Target.Parent.Cells(Target.Row, 7) = compare
Target.Parent.Cells(Target.Row, 8) = Date
End If
End If
If Target.Column = 4 Then
valeur = Target.Parent.Cells(Target.Row, 9)
compare = Int(Target.Parent.Cells(Target.Row, 4) / 10)
If compare <> valeur Then
Target.Parent.Cells(Target.Row, 9) = compare
Target.Parent.Cells(Target.Row, 10) = Date
End If
End If


End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Enregistrer une date si cellule modifiée

Le plus simple serait de toujours les calculer dans la Worksheet_Change.
Oui, j'avais commencé un code similaire :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lig As Range, Grat As Long, Cib As Range
If Target.Count > 1 Then Exit Sub
Set Lig = Target.EntireRow
If Not Intersect(Target, Range("B:C")) Is Nothing Then
   Grat = (Lig.Columns("B").Value + Lig.Columns("C").Value) \ 12
   Set Cel = Lig.Columns("G")
ElseIf Not Intersect(Target, Range("D:D")) Is Nothing Then
   Grat = Lig.Columns("D").Value \ 10
   Set Cel = Lig.Columns("I")
Else: Exit Sub: End If
If Cel.Value <> Grat Then
   Application.EnableEvents = False
   Cel.Value = Grat
   Cel.Offset(, 1).Value = Date
   Application.EnableEvents = True
   End If
End Sub
 
Dernière édition:

largoj

XLDnaute Nouveau
Re : Enregistrer une date si cellule modifiée

Merci Sousou pour pour ce résultat ! c'est exactement ce que je souhaitais.
Le code sur "sélection range" sert à classer les noms par ordre alphabétique à chaque saisie d'un nouveau nom.
Je l'ai conservé, à priori cela n'a pas l'air d'avoir d'incidence sur le reste du programme.

Merci aussi à Dranreb de s'être penché sur mon problème.

Cordialement, largoj
 

nabilexcel2007

XLDnaute Occasionnel
Re : Enregistrer une date si cellule modifiée

Bonjour,

SVP j'aimerai bien convertir ma formule excel en code vba je travaille sur une peite application de gestion de stock excel 2007.

j'ai deux feuilles :

feuille 1 : stock
feuille 1 : Mvts client

Voici ma formule : =SOMMEPROD((stock!a3:a100=B3)*(stock!b3:b100)*(sto ck!c3:c100))

je vous serez reconnaissant merci!
 

R@chid

XLDnaute Barbatruc
Re : Enregistrer une date si cellule modifiée

Bonsoir,
ta question n'a rien à voir avec la discussion où elle est posée.
vaut mieux de créer une nouvelle discussion et joindre un fichier exemple pour que l'on puisse bien saisir ta demande.


@ + +
 

Discussions similaires

Réponses
2
Affichages
122
Réponses
2
Affichages
129

Statistiques des forums

Discussions
312 276
Messages
2 086 711
Membres
103 377
dernier inscrit
fredy45