Macro active des le changement d'une cellule liee a formule

Ericn87 Messages postés 4 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Hello à toutes et à tous,

J'ai pas mal parcouru le forum afin de trouver un code répondant à mon besoin mais sans succès. Etant en plus plutôt débutant, cela complique un peu les choses. Je cherche à savoir, pour une plage de 300 cellules contenant des formules, l'heure exacte à laquelle la valeur de ces cellules a été modifiée. Ensuite faire une différence entre cette heure la et l'heure actuelle afin de savoir depuis combien de temps la cellule a été modifiée.

Dans mon fichier excel, la valeur en B4 et B5 change en fonction des valeurs en colonne A qui seront automatiquement actualises par un autre logiciel. Si B4 ou B5 changent, alors je veux qu'en C4 et C5, l'heure à laquelle la modif a été effectuée s'affiche et calculer sur une autre cellule le temps qui s'est écoulé.
Le code ci-dessous permet bien d afficher le temps si je change manuellement la valeur de B4 ou B5 mais pas si la cellule contient une formule.

Private Sub Worksheet_Change(ByVal Target As Range)
Range("B4").Select
Set rng = Range(ActiveCell, ActiveCell.End(xlDown))
If Not Intersect(Target, rng) Is Nothing Then Cells(Target.Row, Target.Column + 1) = time
End Sub

Merci pour votre aide.

E

8 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Je pense que c'est plutôt le changement en colonne A qui doit être testé par Woksheet_Change
    If not Intersect(Target, Columns("A")) Is Nothing Then
    ....

    Cdlmnt
    0
  2. Ericn87 Messages postés 4 Statut Membre
     
    hello ccm81,

    merci pour ta reactivite, j'ai teste et malheureusement ca ne marche pas. J'ai essaye le code en mettant sur le fichier excel en colonne A une fonction Random. Malgre le changement de valeurs, le timer ne s affiche pas.

    Private Sub Worksheet_Change(ByVal Target As Range)

    Range("A4").Select

    If Not Intersect(Target, Columns("A")) Is Nothing Then Cells(Target.Row, Target.Column + 1) = time

    End Sub

    Merci

    E
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    Worksheet_change ne marche pas avec des formules...
    il te faut aller au changement manuel de valeur reportée dans ta feuille

    D'autre part, il faudra sauvegarder dans un coin l'heure du changement pour ensuite pouvoir faire la différence

    on pourrait peut-^tre parcourir les colonnes données- heures toutes les secondes (ou 1/10 ou...) et faire la différence au cas où une donnée a changée
    Ce serait un peu et m^me pas mal "usine à gaz" mais attention aux collisions changement et parcours par seconde
    0
  4. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Bonjour,

    Si j'ai bien compris, le problème est qu'une formule ne déclenchera pas la macro, mais cette formule réagit en fonction de saisie manuelle sur le fichier et c'est donc à ce niveau qu'il faudra activer le code. il serait intéressant d'avoir ta formule en B
    sinon je pensais à un code vite fait

    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range("B4:B50")) Is Nothing Then
    Target.Select
    If Target(1, 2) <> "" Then
    Target.Offset(0, 2).Select
    Selection = (Time - Target.Offset(0, 1).Value)
    End If
    Target.Offset(0, 1).Select
    Selection = Time
    End If
    End Sub

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    je suis de l'avis de ccm81 et michel : c'est plutôt le changement en colonne A qui doit être testé
    Tu dis :
    B4 et B5 change en fonction des valeurs en colonne A qui seront automatiquement actualises par un autre logiciel.
    Y mettre =alea() n'est pas équivalent.
    Ton actualisation de A est faite par une écriture, pas par une fonction non ?
    Il faut que tu surveilles les cellule écrites antécédentes de B et C.

    eric

    En essayant continuellement, on finit par réussir.
    Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
    En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
    0
  7. Ericn87 Messages postés 4 Statut Membre
     
    Hello,

    Malheureusement les valeurs en colonne A sont determinees par une fonction, c'est pour cela que j'essaye les differents codes que vous proposez en mettant une fonction =alea(). Existe il une fonction similaire a Worksheet_change mais pour des formules ?

    En tout cas merci pour votre aide et reactivite sur ce sujet !

    E
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Malheureusement les valeurs en colonne A sont determinees par une fonction
      Et bien continue de remonter jusqu'à arriver aux cellules saisies qui font évoluer tes formules en B et C.
      Ou bien utilise l'événement calculate mais c'est plus cher en ressources et éventuellement en réactivité.
      eric
      0
  8. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    je crois qu'un bout de ton fichier anonymisé s'impose parce que nous travaillons que sur des hypothèses et cela peut durer longtemps

    pour joindre ton fichier utilise ce lien

    https://www.cjoint.com/

    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
  9. Ericn87 Messages postés 4 Statut Membre
     
    Hello,

    je cherchais jsutement a joindre mon fichier des le debut mais je ne connaissais pas le site cjoint !

    Voici le lien du fichier:

    https://www.cjoint.com/?DKAqJTNg7o1

    je precise: les valeurs en B sont actualisees en temps reel et changent donc quasiment toutes les secondes. Raison pour laquelle sur mon excel la fonction Alea s'actualise en temps reel et pourtant le compteur ne se rafraichit pas. Pour resituer un peu le contexte, les valeurs en B peuvent etre des prix, la temperature atmospherique etc

    Merci !
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      J'ai l'impression que tu n'as pas lu ma réponse de 13:58
      Ni tenu compte de celle de 13:23...
      eric
      0