Graphique à partir de vba

houston87 Messages postés 26 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 28 septembre 2011 - 3 févr. 2010 à 18:27
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 3 févr. 2010 à 23:10
Bonjour,

je souhaiterais tracer un graphique à partir des données que j'ai paramétré sur vba et je voudrais voir donc mon graphe sur la page excel se tracer au fur à mesure que vba fait les calculs . et si comment on peut faire pour ne pas afficher les résultats d'un calcul sur la page d'excel par exemple dans mon cas ci dessous je récupère les données des pfaible et pfort sur deux colonnes

For i = 1 To 40382
f = FreeFile
Open chemin For Binary As #f
Get #f, ((2 * i) - 1) + 44, pfaible
Get #f, (2 * i) + 44, pfort
Close #f


Range("D" & [i]).Value = pfaible
Range("E" & [i]).Value = pfort


à partir de ce résultat obtenu cela va me mené à une deuxième étape qui me permettra de trouver finalement les données sur lesquels je vais me basé pour tracer mon graphe comme dans l'exemple suivant


If npiste 1 Then Range("H" & [i]).Value Range("D" & [i]).Value * 256 + Range("E" & [i]).Value
If npiste 2 Then Range("H" & [i]).Value Range("D" & (2 * i) - 1).Value * 256 + Range("E" & (2 * i) - 1).Value
If npiste 2 Then Range("I" & [i]).Value Range("D" & (2 * i)).Value * 256 + Range("E" & (2 * i)).Value


Si quelqu'un a une idée ça pourra vraiment me faciliter la vie. Merci

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 févr. 2010 à 19:52
Salut
Avant tout, je veux juste relever un truc bizarre :
Range("D" & (2 * i) - 1).Value
me parait audacieux parce qu'il manque une parenthèse et que cela pourrait mener à une erreur d'instruction : "D5 - 1" n'étant pas correct.
La syntaxe corrigée serait :
Range("D" & ((2 * i) - 1)).Value
En fait, mieux vaudrait utiliser la fonction permettant de cibler une cellule par rapport à l'adresse fournie :
Range("D" & (2 * i)).Offset(-1, 0).Value
où le -1 représente le décalage de ligne voulu.

Range("H" & [ i]).Value : Pourquoi des crochets [ et ] autour du i ?

Pour ce qui est de ta courbe :
Si tu veux faire tracer ta courbe à chaque cycle (bonjour la lenteur occasionnée), il te suffit de modifier la série utilisée pour la courbe :
Par exemple, au début, ta série sera petite, disons les 3 première lignes des colonnes A, B et C ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("A1:C3
"), PlotBy:=xlColumns
A chaque cycle, il te suffit de modifier cette série et d'incrémenter la plage représentant la série :
ActiveChart.SeriesCollection(1).Select
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("A1:C4
"), PlotBy :=xlColumns
Pense aussi à donner le temps au système de se rafraichir : Un simple DoEvents après la modification devrait suffire.

Enfin, en ce qui concerne le stockage temporaire dans des cellules, je ne vois pas comment tu pourrais faire autrement : l'argument Source de l'instruction SetSourceData n'accepte qu'un Range.
Tu peux, par contre, insérer ces données dans une autre feuille, dédiée au stockage temporaire que tu pourras peut-être masquer.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
houston87 Messages postés 26 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 28 septembre 2011
3 févr. 2010 à 21:21
et comment je fais pour afficher mes données sur une autre feuille?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 févr. 2010 à 23:10
Bah tu pourrais le trouver toi même en enregistrant une macro et en regardant le code qui est généré (le b.a.ba en VBA), mais je vais te le donner tout cuit.
Il te suffit de faire référence à la feuille en question :
Au lieu de Range("A1").Value = 10
Tu fais un Sheets("monAutreFeuille").Range("A1").Value = 10

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous