Microsoft 365 Astuce pour optimiser les graphique TRES grandes séries

Gorodan

XLDnaute Nouveau
Bonjour à tous,

Après avoir longtemps cherché sans vraiment trouver de solution, je m'en remets à vous.
Je recherche une astuce pour optimiser le temps de traitement et d'affichage de graphique contenant des séries de plusieurs centaines de milliers de lignes (~500 000 lignes)

Je construis les graphiques dont j'ai besoin en VBA. Mais les temps de traitement lorsque j'implémente les séries sont juste super long ! (>1min par série). Auriez vous une astuce pour accélérer ? Une autre façon d'écrire ? Ou à défaut une façon de réduire la série avec un échantillonnage (1 valeur sur 100) qui permette de gagner du temps ?

Merci beaucoup pour vos conseils !

VB:
With GraphsSheet.ChartObjects(j).Chart

    .ChartType = xlXYScatterLinesNoMarkers

    NameRng = DataSheet.Cells(1, 2).Value
    Set xRng = DataSheet.Range(DataGraphSheet.Cells(2, 1), DataGraphSheet.Cells(2, 1).End(xlDown))
    Set yRng = DataSheet.Range(DataGraphSheet.Cells(3, 2), DataGraphSheet.Cells(3, 2).End(xlDown))

    .SeriesCollection.NewSeries
    .SeriesCollection(1).XValues = xRng  ' c'est la que c'est super long
    .SeriesCollection(1).Values = yRng  ' et la aussi
    .SeriesCollection(1).Name = NameRng

End With
 
Solution
Bonjour Gorodan,
Avec 500 000 lignes, toute approche en VBA sera longue car tous les points seront traités.
Je vous propose une autre approche avec un nombre fixe de points par courbe, 1000 en l’occurrence. L'avantage est qu'on a que 1000 points à calculer quelque soit le nombre de points d'entrée.
Sur chaque segment on fait la moyenne min et max. ( faire de l’échantillonnage peut conduire à des artefacts qui fausse le jugement qu'on a sur la courbe. A éviter. )
On a un curseur qui va de 0 à 100%
Puis une seconde courbe qui donne tous les points à partir de ce curseur, et ce sur 1000 points aussi.
En PJ une maquette ... qui n'a que 10k points en entrée.

laurent950

XLDnaute Accro
Bonjour,

Propriété Series.XValues (Excel)

Renvoie ou définit un tableau de valeurs X pour une série de graphiques. La **** propriété propriétéX peut être définie sur une plage dans une feuille de calcul (Set xRng) ou sur un tableau de valeurs(xRgn), mais elle ne peut pas être une combinaison des deux. Variant en lecture/écriture.

Donc :
With GraphsSheet.ChartObjects(j).Chart

.ChartType = xlXYScatterLinesNoMarkers

NameRng = DataSheet.Cells(1, 2).Value
xRng = DataSheet.Range(DataGraphSheet.Cells(2, 1), DataGraphSheet.Cells(2, 1).End(xlDown))
yRng = DataSheet.Range(DataGraphSheet.Cells(3, 2), DataGraphSheet.Cells(3, 2).End(xlDown))

.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = xRng ' c'est la que c'est super (Moins long !)
.SeriesCollection(1).Values = yRng ' et la aussi
.SeriesCollection(1).Name = NameRng

End With

Lien : https://docs.microsoft.com/fr-fr/office/vba/api/excel.series.xvalues

Laurent
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Gorodan,
Avec 500 000 lignes, toute approche en VBA sera longue car tous les points seront traités.
Je vous propose une autre approche avec un nombre fixe de points par courbe, 1000 en l’occurrence. L'avantage est qu'on a que 1000 points à calculer quelque soit le nombre de points d'entrée.
Sur chaque segment on fait la moyenne min et max. ( faire de l’échantillonnage peut conduire à des artefacts qui fausse le jugement qu'on a sur la courbe. A éviter. )
On a un curseur qui va de 0 à 100%
Puis une seconde courbe qui donne tous les points à partir de ce curseur, et ce sur 1000 points aussi.
En PJ une maquette ... qui n'a que 10k points en entrée.
 

Pièces jointes

  • EssaiCourbes.xlsm
    613.4 KB · Affichages: 10

Gorodan

XLDnaute Nouveau
Excellent ! Merci beaucoup à vous deux !

Je ferai la modification pour afficher le min/max/moyenne par segment de x valeurs. Mais ça va me prendre un peu plus de temps.

Je remarque que quand je passe par l'intermédiaire d'un tableau de valeurs (xRng), il ne m'affiche qu'une partie des points (environs les premiers 22 000). Y-a-t-il une limite max en nombre de points dans un tableau? Sachant que je ne l'ai pas explicitement défini ?

A+
 

Statistiques des forums

Discussions
312 234
Messages
2 086 470
Membres
103 226
dernier inscrit
smail12