IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

classer les series d'un histogramme empilé par comparaison de leur derniere valeur [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Par défaut classer les series d'un histogramme empilé par comparaison de leur derniere valeur
    Bonjour,

    j'ai un soucis de logique:

    J'ai un tableau de + de 50,000 ligne et des colonnes jusque CC, que je ne peux pas m'amuser a tripoter. Par macro, je fais tout le necessaire pour creer ce graph. J'obtient (schématiquement) les donnes sources suivantes:

    . 2000 2001 2002
    livres xxx - xxx - 5
    regles xxx - xxx - 25
    classeurs xxx - xxx - 10
    stylo xxx - xxx - 50

    J'aimerais que les series de mon histogramme empile soient representees en ayant la serie ayant le plus gros nombre en bas:
    ^
    | livres (5)
    | classeurs (10)
    | regles (25)
    | stylo (50)
    ------------>

    je ne trouve pas la bonne structure - méthode - logique pour faire ce tri...

    Pour que vous me compreniez, je montre ce vers quoi je tends (à main levée):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for n=1 to series.count
        if serie(n).value(5) < serie(n+1).value(5) then
            serie(n).position(n+1)
        endif
    next n
    Avec cette exemple, si je classe: 5 - 10 - 15, j'obtiens:10-15-5.
    Je suis donc obligé de relancer le tri!

    Je pense que je ne suis pas logique et que quelqu'un avec un peu de bouteille s'aura m'eclairer...

    Quelqu'un pourrait-il me depanner s'il vous plait?

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    Un exemple de code pour trier les cellules de A1 à A6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub trie()
        For i = 1 To 5
            For j = i + 1 To 6
                If Range("A" & i) > Range("A" & j) Then
                    n = Range("A" & i)
                    Range("A" & i) = Range("A" & j)
                    Range("A" & j) = n
                End If
            Next
        Next
    End Sub
    A adapter a ton probleme.

    ++
    Minick

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Par défaut
    Merci de ton aide!

    voici le resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Sub TrierSeries()
    'sort the series according to the last Xvalue from the biggest (bottom) to the most little (up) value.
     
    Dim valueI As Integer
    Dim valueJ As Integer
    Dim i As Integer
    Dim j As Integer
    Dim last As Integer
     
        ActiveSheet.ChartObjects("Diagramm 2").Activate                             'select the chart
        last = ActiveChart.SeriesCollection(1).Points.Count                         'get the last X value
        For i = ActiveChart.SeriesCollection.Count To 2 Step -1
            For j = i - 1 To 1 Step -1                                              'Tipp: j is function of i!
                With ActiveChart.SeriesCollection(i).Points(last)
                    .HasDataLabel = True                                            'show the label
                    valueI = .DataLabel.Characters.Text                             'get the value stored in the label
                    .HasDataLabel = False                                           'hide the label
                End With
                With ActiveChart.SeriesCollection(j).Points(last)
                    .HasDataLabel = True                                            'show the label
                    valueJ = .DataLabel.Characters.Text                             'get the value stored in the label
                    .HasDataLabel = False                                           'hide the label
                End With
                If valueI > valueJ Then                                             'if the highest value is bigger than the next value
                  ActiveChart.SeriesCollection(j).Select                            'then select this second serie
                  ActiveChart.ChartGroups(1).SeriesCollection(j).PlotOrder = i      'and put it in the place of the first one
                End If
            Next
        Next
    End Sub
    désolé pour les commentaires, je pgm pour des utilisateurs dans differents pays...

    bon code a tous!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/04/2011, 10h46
  2. Classer les vente par periode
    Par toutou2000 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 28/10/2008, 11h45
  3. classer des series de nombres par synthese
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/11/2007, 18h10
  4. Classer les résultats d'une recherche par "pertinence"
    Par echataig dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/04/2007, 11h54
  5. Classer les procédures par ordre alphabétique
    Par ouskel'n'or dans le forum Général VBA
    Réponses: 4
    Dernier message: 27/02/2007, 21h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo