Utiliser un tableau excel pour faire defiler une courbe en scrolling.

Résolu
HansGruber Messages postés 8 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 9 septembre 2008 - 6 sept. 2008 à 17:11
HansGruber Messages postés 8 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 9 septembre 2008 - 9 sept. 2008 à 22:04
Bonjour

Je souhaite faire defiler une courbe sur un tableau dans une petite application didactique (où l'on parametre certains reglages).
J'ai utilisé un code assez simple; une procedure modifie la valeur d'une colonne de 20 cellules, et cette colonne est liée au tableau.

J'effectue une pause de 1 seconde à chaque modification des valeurs. Les valeurs se modifient bien dans les cellules, mais la courbe sur le graphique ne change pas...Celle ci n'est reactualisé qu'à l'arret de l'execution du code.

Quelqu'un pourrait il me donner une astuce pour reactualiser le graph en temps reel ?

4 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
9 sept. 2008 à 02:35
Essaie comme ceci

Public Sub CommandButton1_Click()

    'effectue 30 fois le changement des valeurs de la 2eme colonne
    For t = 1 To 30
        Application.ScreenUpdating = False 'empêche le clignotement un peu
        If t = 30 Then Stop
        'modifie la valeur de la cellule 17.2 de façon à modifier l'ensemble des valeurs
        'cette commande n'est ici qu'à titre d'essai
        'dans l'application finale la valeur de cette cellule sera fonction du resultat d'une mesure 'pas certain que ça serve à quoique ce soit...
        Cells(17, 2).Value = Cells(1, 2).Value + 1
       
        For i = 1 To 16
            'appele la procedure permettant de modifier la pile des valeurs
            'la valeur de i permet d'identifier la cellule concernée
            Call modifcellules       
        Next i
       
        Actualiser  'routine qui réinitialise les données sources du graph
       
        'appelle la procedure permettant une temporisation afin d'avoir un defilement chaque seconde
        Call Form_Load
   
        Application.ScreenUpdating = True
    Next t

End Sub

'Actualiser le graphique
Sub Actualiser()
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.ChartArea.Select
    ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("B1:B16"),  _
               PlotBy:=xlColumns
    Range("A1").Select
End Sub

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
7 sept. 2008 à 19:43
Si ton code n'est pas trop long, il serait bien de le mettre, du moins la partie concernant le problème.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
HansGruber Messages postés 8 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 9 septembre 2008
8 sept. 2008 à 21:52
Merci pour ta réponse.

Une petite explication avant tout:
Mon graphique utilise les valeurs de la 2eme colonne de la feuille de données.
Ces valeurs sont  stoquées de la ligne 1 à 17

Le code fonctionne tres bien, le probleme reside dans la reactualisation du graphique; la courbe sur le graph ne se modifie qu'à la fin de l'execution, alors que je voudrais que l'aspect change entre chaque boucle de tempo

Voici le code:

Public i As Integer
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

---------------------------------------------

Private Sub CommandButton1_Click()

'effectue 30 fois le changement des valeurs de la 2eme colonne
For t = 1 To 30

'modifie la valeur de la cellule 17.2 de façon à modifier l'ensemble des valeurs
'cette commande n'est ici qu'à titre d'essai
'dans l'application finale la valeur de cette cellule sera fonction du resultat d'une mesure
Cells(17, 2).Value = Cells(1, 2).Value + 1

For i = 1 To 16
'appele la procedure permettant de modifier la pile des valeurs
'la valeur de i permet d'identifier la cellule concernée
Call modifcellules

Next i
'appelle la procedure permettant une temporisation afin d'avoir un defilement chaque seconde
Call Form_Load

Next t

End Sub

----------------------------------------

Private Sub modifcellules()
' deplace la valeur de chaque cellule vers le haut
Cells(i, 2).Value = Cells(i + 1, 2).Value

End Sub

---------------------------------------------

Private Sub Form_Load()
' temporisation de 1 seconde

    Sleep 1000

End Sub
0
HansGruber Messages postés 8 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 9 septembre 2008
9 sept. 2008 à 22:04
Fantastique, ça fonctionne !

Merci pour ta réponse
0
Rejoignez-nous