Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Temps de calcul pour changement de couleur dans un graph hyper long !

2 réponses
Avatar
Franck
Bonsoir à tous,

J'ai écris une petite routine permettant de changer la couleur des points
dans un graph pour faire apparaître 3 périodes distinctes.
L'axe des abscisses en heures, la courbe représentant les variations
d'un paramètre sur 3 heures par exemple, la première heure apparaît en
rouge, la seconde en vert
et la troisième en bleu.
Cela fonctionne très bien, mais bonjours le temps de traitement, même sur un
XP3000.
voici une partie de mon code :

'pour un graphique de 2 séries de données
If c_triplement = True And périod = "p0" Then
Set zone1àtester = Range(bloc_axe_y)
Set zone2àtester = Range(bloc_axe_y2)
For y = 1 To zone1àtester.Rows.Count
If zone1àtester.Cells(y, 1).Row >= tabligdébfinp123(1) And
zone1àtester.Cells(y, 1).Row <= tabligdébfinp123(2) Then

ActiveChart.SeriesCollection(1).Points(y).Border.ColorIndex = 3 'en rouge
End If
If zone1àtester.Cells(y, 1).Row >= tabligdébfinp123(3) And
zone1àtester.Cells(y, 1).Row <= tabligdébfinp123(4) Then

ActiveChart.SeriesCollection(1).Points(y).Border.ColorIndex = 4 'en vert
End If
If zone1àtester.Cells(y, 1).Row >= tabligdébfinp123(5) And
zone1àtester.Cells(y, 1).Row <= tabligdébfinp123(6) Then

ActiveChart.SeriesCollection(1).Points(y).Border.ColorIndex = 5 'en bleu
End If
Next y
For y = 1 To zone2àtester.Rows.Count
If zone2àtester.Cells(y, 1).Row >= tabligdébfinp123(1) And
zone2àtester.Cells(y, 1).Row <= tabligdébfinp123(2) Then

ActiveChart.SeriesCollection(2).Points(y).Border.ColorIndex = 3 'en rouge
End If
If zone2àtester.Cells(y, 1).Row >= tabligdébfinp123(3) And
zone2àtester.Cells(y, 1).Row <= tabligdébfinp123(4) Then

ActiveChart.SeriesCollection(2).Points(y).Border.ColorIndex = 4 'en vert
End If
If zone2àtester.Cells(y, 1).Row >= tabligdébfinp123(5) And
zone2àtester.Cells(y, 1).Row <= tabligdébfinp123(6) Then

ActiveChart.SeriesCollection(2).Points(y).Border.ColorIndex = 5 'en bleu
End If
Next y
Set zone1àtester = Nothing
Set zone2àtester = Nothing
End If

La même chose pour un graph à 1 serie de données mais sans la partie
"zone2àtester".

Pour info, ce test doit ce faire au maxi sur 14 graphs dont 1 avec 2 séries
de données.
Chaque séries possèdent environ 8000 valeurs.

Au bout de 2 à 3 min seulement 3 courbes ont été traitées.

Comme vous l'avez compris, mon problème c'est le temps que met cette partie
du code
à changer la couleur de mes courbes.

Ma question, comment optimisé ces boucles For Next ?

Merci d'avance pour vos réponses.

Franck.

2 réponses

Avatar
Alain CROS
Bonjour

Je n'ais pas analyser le code mais tu pourrai avoir 3 séries au lieu d'une seule
par exemple en colonne A, tes données brutes
en colonne B seulement les valeurs répondant au critère rouge
en colonne C " " " " " " vert
etc ...
puis tes 3 séries avec colonne B, colonne C etc ...
plus de routine pour changement de couleur , affichage instantané ou presque.

Alain CROS

"Franck" a écrit dans le message de news: c69j07$8t6$
Bonsoir à tous,

J'ai écris une petite routine permettant de changer la couleur des points
dans un graph pour faire apparaître 3 périodes distinctes.
L'axe des abscisses en heures, la courbe représentant les variations
d'un paramètre sur 3 heures par exemple, la première heure apparaît en
rouge, la seconde en vert
et la troisième en bleu.
Cela fonctionne très bien, mais bonjours le temps de traitement, même sur un
XP3000.
voici une partie de mon code :

'pour un graphique de 2 séries de données
If c_triplement = True And périod = "p0" Then
Set zone1àtester = Range(bloc_axe_y)
Set zone2àtester = Range(bloc_axe_y2)
For y = 1 To zone1àtester.Rows.Count
If zone1àtester.Cells(y, 1).Row >= tabligdébfinp123(1) And
zone1àtester.Cells(y, 1).Row <= tabligdébfinp123(2) Then

ActiveChart.SeriesCollection(1).Points(y).Border.ColorIndex = 3 'en rouge
End If
If zone1àtester.Cells(y, 1).Row >= tabligdébfinp123(3) And
zone1àtester.Cells(y, 1).Row <= tabligdébfinp123(4) Then

ActiveChart.SeriesCollection(1).Points(y).Border.ColorIndex = 4 'en vert
End If
If zone1àtester.Cells(y, 1).Row >= tabligdébfinp123(5) And
zone1àtester.Cells(y, 1).Row <= tabligdébfinp123(6) Then

ActiveChart.SeriesCollection(1).Points(y).Border.ColorIndex = 5 'en bleu
End If
Next y
For y = 1 To zone2àtester.Rows.Count
If zone2àtester.Cells(y, 1).Row >= tabligdébfinp123(1) And
zone2àtester.Cells(y, 1).Row <= tabligdébfinp123(2) Then

ActiveChart.SeriesCollection(2).Points(y).Border.ColorIndex = 3 'en rouge
End If
If zone2àtester.Cells(y, 1).Row >= tabligdébfinp123(3) And
zone2àtester.Cells(y, 1).Row <= tabligdébfinp123(4) Then

ActiveChart.SeriesCollection(2).Points(y).Border.ColorIndex = 4 'en vert
End If
If zone2àtester.Cells(y, 1).Row >= tabligdébfinp123(5) And
zone2àtester.Cells(y, 1).Row <= tabligdébfinp123(6) Then

ActiveChart.SeriesCollection(2).Points(y).Border.ColorIndex = 5 'en bleu
End If
Next y
Set zone1àtester = Nothing
Set zone2àtester = Nothing
End If

La même chose pour un graph à 1 serie de données mais sans la partie
"zone2àtester".

Pour info, ce test doit ce faire au maxi sur 14 graphs dont 1 avec 2 séries
de données.
Chaque séries possèdent environ 8000 valeurs.

Au bout de 2 à 3 min seulement 3 courbes ont été traitées.

Comme vous l'avez compris, mon problème c'est le temps que met cette partie
du code
à changer la couleur de mes courbes.

Ma question, comment optimisé ces boucles For Next ?

Merci d'avance pour vos réponses.

Franck.




Avatar
Franck
Merci pour ta réponse

Le problème c'est que je ne peut pas faire comme tu le dit,
je veut que les 3 périodes apparaissent en couleur sur la courbe
de la période globale.

Au départ les données sont dans un fichier ".txt" que je format pour une
présentation
plus conviviale. la colonne A représente les abscisses et les 14 colonnes
suivantes les séries.
Pour chaque série, sur la période globale de mesure j'extrait les valeurs
mini
moyenne et maxi, pour chaque série, la période globale de mesure est divisée
en 3 périodes qui ne se suivent pas forcément (je nomme tous simplement les
"range"
correspondant qui deviendront de nouvelles séries. Puis sur chacune de ces 3
périodes et
pour chacune de ces 14 séries, j'extrait les valeurs des min moy et max.

La partie graphique me trace alors les 14 courbes sur la période globale
puis les 14*3 autres courbes correspondant aux différentes périodes de
chaque série.
Au totale 56 courbes.

Mes periodes intermédiaires se tracent donc très bien et en un temps record.
Mais je désir tout de même les faire apparaître de couleur différentes
mes 3 périodes sur les 14 courbes représentant la période globale.

La procédure marche très bien, mais je ne comprend pas pourquoi
le pc sature. Même après calcul, à l'affichage, c'est le cadre du graph
qui apparaît en premier, après ce dessine la courbe avec les 3 couleurs,
puis viennent par la suite les titres et la zone de text d'infos.

J'ai l'impression que la mémoire est saturé, pourtant avec 1Go...

La fonction "set zone1àtester = nothing" est-elle bien placée ?
Peut-on aussi optimiser ces boucles ?

Merci d'avance pour vos nouveau conseils.

Franck.

"Alain CROS" a écrit dans le message de
news:
Bonjour

Je n'ais pas analyser le code mais tu pourrai avoir 3 séries au lieu d'une
seule

par exemple en colonne A, tes données brutes
en colonne B seulement les valeurs répondant au critère rouge
en colonne C " " " " " "
vert

etc ...
puis tes 3 séries avec colonne B, colonne C etc ...
plus de routine pour changement de couleur , affichage instantané ou
presque.


Alain CROS

"Franck" a écrit dans le message de news:
c69j07$8t6$

Bonsoir à tous,

J'ai écris une petite routine permettant de changer la couleur des
points


dans un graph pour faire apparaître 3 périodes distinctes.
L'axe des abscisses en heures, la courbe représentant les variations
d'un paramètre sur 3 heures par exemple, la première heure apparaît en
rouge, la seconde en vert
et la troisième en bleu.
Cela fonctionne très bien, mais bonjours le temps de traitement, même
sur un


XP3000.
voici une partie de mon code :

'pour un graphique de 2 séries de données
If c_triplement = True And périod = "p0" Then
Set zone1àtester = Range(bloc_axe_y)
Set zone2àtester = Range(bloc_axe_y2)
For y = 1 To zone1àtester.Rows.Count
If zone1àtester.Cells(y, 1).Row >= tabligdébfinp123(1)
And


zone1àtester.Cells(y, 1).Row <= tabligdébfinp123(2) Then

ActiveChart.SeriesCollection(1).Points(y).Border.ColorIndex = 3 'en
rouge


End If
If zone1àtester.Cells(y, 1).Row >= tabligdébfinp123(3)
And


zone1àtester.Cells(y, 1).Row <= tabligdébfinp123(4) Then

ActiveChart.SeriesCollection(1).Points(y).Border.ColorIndex = 4 'en vert
End If
If zone1àtester.Cells(y, 1).Row >= tabligdébfinp123(5)
And


zone1àtester.Cells(y, 1).Row <= tabligdébfinp123(6) Then

ActiveChart.SeriesCollection(1).Points(y).Border.ColorIndex = 5 'en bleu
End If
Next y
For y = 1 To zone2àtester.Rows.Count
If zone2àtester.Cells(y, 1).Row >= tabligdébfinp123(1)
And


zone2àtester.Cells(y, 1).Row <= tabligdébfinp123(2) Then

ActiveChart.SeriesCollection(2).Points(y).Border.ColorIndex = 3 'en
rouge


End If
If zone2àtester.Cells(y, 1).Row >= tabligdébfinp123(3)
And


zone2àtester.Cells(y, 1).Row <= tabligdébfinp123(4) Then

ActiveChart.SeriesCollection(2).Points(y).Border.ColorIndex = 4 'en vert
End If
If zone2àtester.Cells(y, 1).Row >= tabligdébfinp123(5)
And


zone2àtester.Cells(y, 1).Row <= tabligdébfinp123(6) Then

ActiveChart.SeriesCollection(2).Points(y).Border.ColorIndex = 5 'en bleu
End If
Next y
Set zone1àtester = Nothing
Set zone2àtester = Nothing
End If

La même chose pour un graph à 1 serie de données mais sans la partie
"zone2àtester".

Pour info, ce test doit ce faire au maxi sur 14 graphs dont 1 avec 2
séries


de données.
Chaque séries possèdent environ 8000 valeurs.

Au bout de 2 à 3 min seulement 3 courbes ont été traitées.

Comme vous l'avez compris, mon problème c'est le temps que met cette
partie


du code
à changer la couleur de mes courbes.

Ma question, comment optimisé ces boucles For Next ?

Merci d'avance pour vos réponses.

Franck.