Decouper une courbe avec minimisation

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

  • Book4.xlsx
    23.4 KB · Affichages: 50

job75

XLDnaute Barbatruc
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

  • Book4(1).xlsm
    36.1 KB · Affichages: 37

job75

XLDnaute Barbatruc
Re,

J'ai testé avec un tableau de 1000 lignes.

La macro s'exécute chez moi en [Edit] 0,04 seconde (il n'y a toujours que 6 séries).

Attention, un graphique n'accepte qu'un maximum de 256 séries.

Fichier joint.

A+
 

Pièces jointes

  • Book4 1000 lignes(1).xlsm
    52.8 KB · Affichages: 43
Dernière édition:

Carnage029

XLDnaute Occasionnel
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:

Carnage029

XLDnaute Occasionnel
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 :)
 

Carnage029

XLDnaute Occasionnel
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
 

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
Re,

Et avec une MFC sur les colonnes D:E c'est encore plus clair, fichiers (2 bis).

Edit : j'ai ajouté le dimensionnement en largeur du graphique.

Encore bonne nuit.
 

Pièces jointes

  • Book4(2 bis).xlsm
    36.7 KB · Affichages: 40
  • Book4 1000 lignes(2 bis).xlsm
    47.5 KB · Affichages: 34
Dernière édition:

job75

XLDnaute Barbatruc
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

  • Aires empilées(1).xls
    91 KB · Affichages: 35
  • Aires empilées 1000 lignes(1).xls
    125 KB · Affichages: 25

job75

XLDnaute Barbatruc
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

  • Aires empilées(2).xls
    88 KB · Affichages: 34
  • Aires empilées 1000 lignes(2).xls
    127.5 KB · Affichages: 40

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260