Faire un graphique de suivi en temps réel efficace

Bonjour, à tous, je cherchais à faire suivre l'évolution de mesures récupérées d'une station d'acquisition Agilent avec une fréquence élevée, minimum 4 nouvelles mesures par seconde

J'ai utilisé VBA pour afficher chaque mesure dans les colonnes A(l'unité) et B(la valeur)
Ensuite, dans mon fichier actuel, j'utilise un graphique normal avec une fonction "DECALER" pour actualiser la plage de donnée, mais ce n'est pas assez efficace et Excel fini par saturer au bout de quelques minutes...

Existe-t-il une façon plus optimale pour réaliser ce graphique ?
Passez une excellente bonne journée

Bonjour,

S'il y a beaucoup de données, j'opterai plutôt pour une macro qui appliquerait directement la plage de données dans le graphique, ainsi pas de calculs en permanence. Vous pouvez lancer cette macro soit par un bouton(ce que j'ai fait dans le fichier joint), soit l'appeler à la fin de l'exécution de l'action de l'un des 2 boutons existants.

Essayez ceci:

La macro dans le Module 1:

Sub Remplissage_Graphique()
    Dim f1 As Worksheet
    Dim DerLig As Long
    Dim Graph As ChartObject

    Set f1 = Sheets("Régulation")
    DerLig = f1.Range("A" & Rows.Count).End(xlUp).Row
    Set Graph = f1.ChartObjects("Graphique 1")
    Graph.Chart.SetSourceData Source:=f1.Range("A1:B" & DerLig)
    Set f1 = Nothing
    Set Graph = Nothing
End Sub

Cdlt

Bonjour,

Tout d'abord merci beaucoup pour votre aide, je m'attendais pas à une réponse aussi rapide :)

Cependant, je ne suis pas sur de bien comprendre le fonctionnement de votre programme, ou alors je veut dire, il faudrait que je temporise la macro (toutes les secondes par exemple) pour afficher les dernières valeurs qui viennent d'être incrémenté dans les colonnes A et B non ?

Merci encore !

bonjour Dim1244534, Aturo83 salut,

presque pareil que Arturo83, mais moi, j'utilise des plages nommées "_X" et "_Y" dans le graphique.

Puis, dans la macro "StartAcquisitionReg_Click", par exemple chaque 4eme nouvelle ligne, "_X" se met à jour et donc "_Y" et le graphique aussi.

Cela demande eventuellement aussi un modif de la macro "StopAcquisitionReg_Click" pour montrer les dernieres nouvelles lignes.

(ps. pour cela, j'ai bloqué temporairement la macro d'Arturo83)

si vous avez encore des problèmes, utiliser "application.screenupdating=false" à certaines places.

Bonjour Bart, j'ai bien un petit problème d'affichage, au niveau de la souris, il apparaît à chaque update, la fenêtre frise une milliseconde, mais sinon le programme bien !

Merci en tout cas !

re,

peut-être 2 choses encore ...

1. comme ceci, on écrit les 2 cellules en même temps pour gagner () du temps

2. je me demande la nécessité de modifier la plage "_X", je suppose si on prend suffisant grand, alors, il ne faut plus le modifier et donc on peut supprimer ces lignes qui font cela ...

     Do While acquisitionActive
          agilent.WriteString "DATA:POINTS?"
          points = Val(agilent.ReadString())
          DoEvents
          If points >= 1 Then
               agilent.WriteString "DATA:REMOVE? 1"
               I = I + 1
               ws.Cells(I, 1).Resize(, 2).Value = Array(I, Val(agilent.ReadString()))     'les 2 en même temps pour gagner du temps

               With Me.Range("_X") 'de temps en temps modifier cette plage
                    Select Case I - .Row + .Rows.Count - 1     'différence entre I et dernière ligne de X
                         Case Is < -10, Is >= 0: .Resize(I + 10).Name = "_X"     'si la plage vraiment plus petiti que  I (plus que 10 lignes) ou est egalee, alors modifier la plage vers I+10
                    End Select
               End With

          End If
     Loop

Bonjour Bart,

Je suis désolé, je ne suis pas sûr d'avoir compris votre message précédent, et je me retrouve avec un souci de taille..

En fait le programme marche très bien !... Pendant quelques minutes, mais après la plage de données deviens trop grande j'imagine pour le graphique de se rafraîchir toutes les secondes..

re,

j'ai utilisé le fichier de l'autre question avec ces changements

1. j'ai ajouté 2 macros pour mettre à jour (pour le moment tous les 5 sec) ces 2 plages nommées du graphique

2. un macro "Workbook_BeforeClose" dans Thisworkbook pour arrêter ce mise à jour en cas que vous fermez le fichier

3. quelque ajustements dans les 2 macros de la module de la feuille "Régulation"

Ces macros pour ce mise à jour dure <100 msec dans mon ordinateur, donc j'éspère que cela évitera le problème de rafraîchir.

Je crains (pas sûr) que votre définition de ces 2 plages nommées (avec ce décalage en comptage sur +1.048.000 lignes) prennait un peu trop de temps.

Hello Bart,

Encore une fois, merci beaucoup pour votre aide, un samedi à 9h !

Je souhaite explorer une approche alternative encore plus légère en termes de consommation de données. Plutôt que de stocker l'intégralité de la plage de mesure, je prévois de conserver uniquement les 4 dernières valeurs récupérées. Lorsqu'une nouvelle valeur arrive, elle remplacera la 4ème valeur précédente, tandis que la dernière valeur sera remplacée par l'avant-dernière

J'ai déjà fait un test non fructueux étant donné que les nouvelles mesures recommence à s'incrémenter à la première ligne plutôt que de décaler les précédentes..

Si je peux me permette de vous sollicitez une fois de plus..

En attendant, passez une très bonne journée

re, il faut minimaliser les interactions avec la feuille, c'st pourquoi dans les fichiers précédents, on écrivait les 2 cellules en même temps et dans votre fichier, vous ne l'avez pas fait. Je n'ai pas encore fait votre demande parce que je ne la comprends pas, au lieu, maintenant, je conserve jusqu'à 5 mesures en mémoire et au moment du 5eme, on écrit un array de 5x3 vers la feuille, donc cela est 10 fois moins d'interactions avec la feuille.

C'est quoi le problème pour le moment, la macro se plante encore après quelque minutes ? J'ai l'idée que vous recevez trop de mesures (??? 100 par seconde ????), regardez la colonne F. C'est le nombre de secondes+millisecondes depuis minuit. Combien est l'intervalle entre 2 lignes ? Et entre un multiple de 5 en colonne D et la ligne suivante ? Si vous voulez,on peut fixer l'intervalle entre 2 mesures à par exemple 100 ou 250 msec. (environ, 4 ou 10 mesures par seconde)

PS. pouvez-vous me donner un exemple d'un test que vous avez fait, surtout la colonne F m'intéresse.

Rechercher des sujets similaires à "graphique suivi temps reel efficace"