Utiliser un tableau excel pour faire defiler une courbe en scrolling. [Résolu]

HansGruber 8 Messages postés mercredi 31 octobre 2007Date d'inscription 9 septembre 2008 Dernière intervention - 6 sept. 2008 à 17:11 - Dernière réponse : HansGruber 8 Messages postés mercredi 31 octobre 2007Date d'inscription 9 septembre 2008 Dernière intervention
- 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 ?
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention - 9 sept. 2008 à 02:35
3
Merci
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

Merci cs_MPi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_MPi
cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention - 7 sept. 2008 à 19:43
0
Merci
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
Commenter la réponse de cs_MPi
HansGruber 8 Messages postés mercredi 31 octobre 2007Date d'inscription 9 septembre 2008 Dernière intervention - 8 sept. 2008 à 21:52
0
Merci
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
Commenter la réponse de HansGruber
HansGruber 8 Messages postés mercredi 31 octobre 2007Date d'inscription 9 septembre 2008 Dernière intervention - 9 sept. 2008 à 22:04
0
Merci
Fantastique, ça fonctionne !

Merci pour ta réponse
Commenter la réponse de HansGruber

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.