Decouper une courbe avec minimisation

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 !

Carnage029

XLDnaute Occasionnel
Bonjour a tous,

Une demande un peu inhabituel je suppose... Je cherche a "decouper" une courbe de volumes avec des aires de differentes durees.

Attaché un exemple avec des donnees arbitraries (sur 20 jours, mais mes donnees de bases sont sur 500 jours a peu pres). Le but final etant de minimizer le nombre de decoupages.

La solution peut etre en VBA ou avec des formules, je suis tres a l'aise avec les deux... Je n'arrive pas a trouver une solution adaptable facilement a un nombre de donnees plus importante (sans le faire manuellement)

Par avance, merci beaucoup a toutes les ames charitables qui m'aident 🙂

Cordialement, Carnage029
 

Pièces jointes

Bonjour Carnage029, le forum,

Intéressant ce graphique en aires empilées.

Mais je ne comprends pas trop ce que vous voulez dire par "minimiser" le nombre de zones.

En effet le 1er graphique "minimise" très bien : il n'y a qu'une zone...

En fait il faut se donner un critère de découpage, voici le mien : je fixe le découpage au niveau des minima de la colonne E (Volume).

Cela entraîne la création par VBA de 6 séries, cliquez sur le bouton du fichier joint.

Nota : j'ai ignoré les formules que vous avez mises sous le tableau, elles me semblent assez farfelues.

Bon dimanche.
 

Pièces jointes

Merci beaucoup Job75, de retour a mon poste après quelques jours d'absense, je vais m'empresser de voir votre fichier. (j'editerai 🙂 )

J'ai une erreur lors de l'execution de la macro:

VB:
'---modification/création/suppression des séries---
With ChartObjects(1).Chart
  s = .SeriesCollection.Count
  For j = 1 To col
    If j > s Then .SeriesCollection.NewSeries
    .FullSeriesCollection(j).Name = col - j + 1

L'execution se stop a cette derniere ligne avec le code Run-time error '438' Object doesn't support this property or method.

Je pense avoir les librairies requises, et lors du test j etait egal a 1.

Je vais lire plus en detail le code pour comprendre un peu plus 🙂

Encore nerci Job75
 
Dernière édition:
Merci beaucoup Job75,

J'ai pu regarder, et votre niveau en VBA doit etre bien superieur au mien (autodidacte). Je ne suis pas familier avec plusieurs concepts, je me permet donc de poser quelques questions 🙂

Je ne comprend pas trop les "tetes de colones" 6 - 5 - 4 etc - 1

Pour etre complet, et honete la representation graphique n'est pas la plus importante. L'idee finale est de "resumer" la courbe en X segments ayant deux parametres: - la duree - le volume...

Je tiens a m'excuser, je ne savais pas que le maximum de series pour les graphes etait aussi vite atteint 🙁 desole de ma negligence...

Carnage029 🙂
 
Ahh, le 20 correspondait aux decoupages de 20 jours, du coup la colonne 6 "devrait" s'appeller 1000.
Je vais essayer de faire un algorithme qui va me creer une matrice carree, pour cet exemple de 1000*1000.

Vous avez entierement raison, le but etait de decouper la courbe, je n'avais pas connaissance de cette limitation de serie, je m'en excuse.
Je vais reflechir un peu plus avant de vous embeter, mais a priori je vais "decouper" mes donnees avec une matrice de 1000 par 1000 puis graphiquement regrouper les valeurs entre 0 et 5 jours 5 et 10 etc etc.

Je vais aussi trouver de la documentation pour apprendre a utiliser les dictionaires et les quelques concepts de votre function que je ne connais pas encore.

Cordialement,
Carnage029
 
Re,

Je ne suis pas sûr que vous ayez compris pourquoi je traite les minima de la courbe.

Pourtant il est évident qu'ils permettent de "minimiser" le nombre de zones.

Vous, vous faites un découpage pour chaque jour, vous n'irez pas loin comme ça.

A+
 
Bonjour Carnage029, le forum,

Une chose intéressante à noter avec un fichier .xls (256 colonnes).

Le graphique s'organise automatiquement pour ne pas dépasser la dernière colonne IV.

Et cela malgré le dimensionnement en largeur par 7 * rc.

Du moins chez moi sur Excel 2013, voyez les fichiers joints.

Bonne journée.
 

Pièces jointes

Re,

On peut aussi augmenter la largeur des colonnes à partir de la colonne F :
Code:
  '---largeur des colonnes (facultatif)---
  For j = 4 To 255
    If Range(Shapes(.Parent.Name).TopLeftCell.Offset(, 1), Columns(Columns.Count)).Width < 7 * rc Then _
      deb(1, 3).Resize(, Columns.Count - deb.Column - 1).ColumnWidth = j Else Exit For
  Next
   '---largeur du graphique---
  .Parent.Width = Application.Max(7 * rc, 370)
Fichiers (2), la largeur passe de 4 à 5 avec 1000 lignes.

A+
 

Pièces jointes

- 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

Discussions similaires

Retour