Automatiser la copie de données actualisées

Résolu
papedu44 Messages postés 29 Statut Membre -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,

J'ai extrait des données de production d'un intranet à partir d'une connexion de données actualisée chaque minute.

Mon souhait est d'afficher ces données sous forme de graphique. Pour l'instant, je suis bloqué car les valeurs sont écrasées à chaque actualisation.

Comment faire pour automatiser le "copier-coller" de mes valeurs dans une nouvelle case d'un tableau à chaque actualisation ? Ou est-il possible de réaliser un graphique qui récupère les données automatiquement et qui s'enrichit chaque minute ?

D'avance merci pour votre aide.

6 réponses

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

    peut être quelque chose comme ceci (1 top toutes les 10 s - à adapter)
    https://www.cjoint.com/?3FeqJie8cgC

    RQ. je ne sais pas comment ça va se comporter avec l'importation

    Bonne suite
    1
    1. papedu44 Messages postés 29 Statut Membre 2
       
      C'est parfait, un grand merci. Il est temps que je me mette sérieusement à VBA, ça peut faire des merveilles.
      Je l'ai calé sur une minute et ajouté l'importation de données, ça marche parfaitement.
      Bravo !
      0
    2. ccm81 Messages postés 11033 Statut Membre 2 434
       
      Peux tu mettre le problème à Résolu (en haut à gauche de ton premier message)

      Bonne fin de journée
      0
    3. papedu44 Messages postés 29 Statut Membre 2
       
      Je vais mettre le problème à résolu, je veux juste poser une dernière question.
      Je veux suivre 5 valeurs dans le temps. J'ai modifié le code VBA mais j'ai sans doute fait une erreur de débutant.
      A t = 1 j'ai 1 ligne
      A t = 2 j'ai 5 lignes
      A t = 3 j'ai 25 lignes ...

      Je n'ai pas fermé quelquechose, c'est certain. Peux-tu me dire quoi ajouter pour résoudre ce problème STP ? Voilà le code VBA :

      Public Sub TopChrono()
      Dim li As Long
      Dim li2 As Long
      Dim li3 As Long
      Dim li4 As Long
      Dim li5 As Long
      With Sheets(NF)
      li = .Range(co & Rows.Count).End(xlUp).Row + 1
      Temps = Now + TimeValue("00:01:00")
      Application.OnTime Temps, "TopChrono"
      .Range(co & li).Value = .Range(c).Value
      li2 = .Range(co2 & Rows.Count).End(xlUp).Row + 1
      Temps = Now + TimeValue("00:01:00")
      Application.OnTime Temps, "TopChrono"
      .Range(co2 & li2).Value = .Range(c2).Value
      li3 = .Range(co3 & Rows.Count).End(xlUp).Row + 1
      Temps = Now + TimeValue("00:01:00")
      Application.OnTime Temps, "TopChrono"
      .Range(co3 & li3).Value = .Range(c3).Value
      li4 = .Range(co4 & Rows.Count).End(xlUp).Row + 1
      Temps = Now + TimeValue("00:01:00")
      Application.OnTime Temps, "TopChrono"
      .Range(co4 & li4).Value = .Range(c4).Value
      li5 = .Range(co5 & Rows.Count).End(xlUp).Row + 1
      Temps = Now + TimeValue("00:01:00")
      Application.OnTime Temps, "TopChrono"
      .Range(co5 & li5).Value = .Range(c5).Value
      End With
      End Sub

      Public Sub StopChrono()
      On Error Resume Next
      Application.OnTime Temps, "TopChrono", , False
      End Sub
      0
    4. papedu44 Messages postés 29 Statut Membre 2
       
      J'ai résolu mon problème tout seul en simplifiant le code :

      Public Sub TopChrono()
      Dim li As Long
      Dim li2 As Long
      Dim li3 As Long
      Dim li4 As Long
      Dim li5 As Long
      With Sheets(NF)
      li = .Range(co & Rows.Count).End(xlUp).Row + 1
      li2 = .Range(co2 & Rows.Count).End(xlUp).Row + 1
      li3 = .Range(co3 & Rows.Count).End(xlUp).Row + 1
      li4 = .Range(co4 & Rows.Count).End(xlUp).Row + 1
      li5 = .Range(co5 & Rows.Count).End(xlUp).Row + 1
      Temps = Now + TimeValue("00:01:00")
      Application.OnTime Temps, "TopChrono"
      .Range(co & li).Value = .Range(c).Value
      .Range(co2 & li2).Value = .Range(c2).Value
      .Range(co3 & li3).Value = .Range(c3).Value
      .Range(co4 & li4).Value = .Range(c4).Value
      .Range(co5 & li5).Value = .Range(c5).Value
      End With
      End Sub

      Merci encore pour ton aide ccm81. Je marque le sujet comme résolu.
      0
    5. ccm81 Messages postés 11033 Statut Membre 2 434
       
      Il n'y a pas de raison de relancer le timer pour chaque report, les 5 copies se feront au top en cours

      With Sheets(NF)
      li = .Range(co & Rows.Count).End(xlUp).Row + 1
      Temps = Now + TimeValue("00:01:00")
      Application.OnTime Temps, "TopChrono"
      .Range(co & li).Value = .Range(c).Value
      li2 = .Range(co2 & Rows.Count).End(xlUp).Row + 1

      .Range(co2 & li2).Value = .Range(c2).Value
      li3 = .Range(co3 & Rows.Count).End(xlUp).Row + 1

      .Range(co3 & li3).Value = .Range(c3).Value
      li4 = .Range(co4 & Rows.Count).End(xlUp).Row + 1

      .Range(co4 & li4).Value = .Range(c4).Value
      li5 = .Range(co5 & Rows.Count).End(xlUp).Row + 1

      .Range(co5 & li5).Value = .Range(c5).Value
      End With

      RQ. et si les lignes de report sont identiques tu peux supprimer li2= ... , li3 = ... etc.
      0
  2. papedu44 Messages postés 29 Statut Membre 2
     
    Pour précision, ma connexion de données avec actualisation est bien sûr faite sous Excel.
    0
  3. papedu44 Messages postés 29 Statut Membre 2
     
    Je reste bloqué sur mon problème. J'essaie de trouver quelque chose comme :

    Si "le contenu de ma cellule" est différent "du contenu de ma cellule précédemment"
    Alors "je copie ma cellule

    Mais évidemment ça ne fonctionne pas, car ma cellule en question s'actualise chaque minute par connexion de données.

    J'ai donc créé une deuxième connexion de données, identique en valeur, mais avec une actualisation par heure (au lieu d'une par minute). Comme cela ça pourrait marcher, mais encore faut-il pouvoir automatiser la copie de ma cellule chaque minute...
    0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Peux tu nous donner le code de la macro qui réalise l'importation des données
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. papedu44 Messages postés 29 Statut Membre 2
     
    Bonsoir,

    Il ne s'agit pas d'une macro, mais d'une connexion de données (dans l'onglet Données, Données externes, A partir du web. Et là je donne l'adresse de l'intranet et je récupère le tableau de données.

    Dans mon tableau de données, j'ai 4 informations de production (débits) et la date/heure/min/sec de la mesure.
    0
  7. papedu44 Messages postés 29 Statut Membre 2
     
    Personne n'a d'idée pour mon problème ? Je me pose toujours des questions, sans trouver les réponses...
    0
    1. papedu44 Messages postés 29 Statut Membre 2
       
      Peut-être que la description de mon problème est insuffisante ? Si tel est le cas, je peux donner des détails !

      Je cherche à :
      à t=0, copier A1 dans B1
      à t=1mn, copier A1 dans B2
      à t=2mn, copier A1 dans B3
      à t=3mn, copier A1 dans B4
      ...
      0
    2. papedu44 Messages postés 29 Statut Membre 2
       
      Je peux également arriver à mes fins si je réussi à faire :

      si(A1<>"0"), copier A1 en B1
      si(et(A1<>"0";A1<>B1)), copier A1 en B2
      si(et(A1<>"0";A1<>B2)), copier A1 en B3
      ...

      en considérant que ma case A1 est actualisée chaque minute.

      Le problème, c'est de faire une copie de valeurs périodique pour faire un historique des valeurs de A1.
      0