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

  • Initiateur de la discussion Initiateur de la discussion Gorodan
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
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
 
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

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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour