Date de changement

Résolu
Bonjour,
Pour une tâche spécifique, j'ai voulu composer un code VBA dans une feuille excel. Le principe de ce code est le suivant:
- Dans ladite feuille, si jamais il y a modification d'une cellule appartenant à une plage que j'ai déterminée; je veux que la date de cette modification s'affiche dans une autre cellule spécifique.
Par exemple, pour une plage A5:D20; je voudrais que si je modifie C10, que la date d'aujourd'hui 2017-06-26 s'affiche dans la cellule D3.

En faisant des recherches sur internet j'ai trouvé un code que j'ai réussi à adapter à mon cas:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ligvid As Long
If Intersect(Target, Range("A5:D20")) Is Nothing Or Target.Count > 1 Then: Exit Sub
ligvid = Range("L65536").End(xlUp).Row - 48
Range("D" & ligvid) = Format(Date, "dd/mm/yyyy")
End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.


L'instabilité de ce code est au niveau de Row-48. Je suis obligé de jouer avec ce chiffre qui peut aller de +20 à -140 afin de trouver la bonne cellule qu'il me faut. Alors que ROW + 4 devrait marcher dans mon cas.
Je précise aussi que ROW + xxx différe selon les feuilles alors que ces dernières ont les mêmes tableaux situés aux mêmes endroits
Est ce que y a des parties du code à améliorer ?
Merci.

2 réponses

  1. Modérateur
    Bonjour,


    Par exemple, pour une plage A5:D20; je voudrais que si je modifie C10, que la date d'aujourd'hui 2017-06-26 s'affiche dans la cellule D3.

    - Comment détermines tu que ça sera la cellule D3 ?
    - Si je change la celle D19 .. dans quelle cellule doit on écrire la date D3 également ou une autre ? Comment le sait-on ??

    0
    1. Merci pour ta réponse.
      Je veux que pour n'importe quelle cellule qui a subi un changement, que la date du changement apparaisse dans D3 et uniquement D3.
      0
    2. @versionfire 
      Bonjour,

      Si tu veux que ta date soit toujours en D3 :

      
      Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Range("A5:D20")) Is Nothing Or Target.Count > 1 Then: Exit Sub
        [D3] = Format(Date, "dd/mm/yyyy")
      End Sub
      
      

      Qu'en dis-tu ?  ;)
       
      0
  2. Modérateur
    Donc
    ligvid = Range("L65536").End(xlUp).Row - 48
    Range("D" & ligvid) = Format(Date, "dd/mm/yyyy")
    

    est à modifier par:
    Range("D3") = Format(Date, "dd/mm/yyyy")
    

    0
    1.  
      Bonjour,

      Exact, Jordane, mais tu as oublié de dire à versionfire qu'il peut aussi
      enlever sa déclaration de ligvid (devenue inutile) : Dim ligvid As Long

      Et comme le code VBA est très court, je l'ai mis en entier
      dans mon message de 10:22.

      Cordialement
       
      0
    2. Merci infiniment. Mon problème est résolu.
      0