XL 2007 - Graphique, Ordre des séries de données

Palteza Messages postés 79 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 6 septembre 2014 - 6 sept. 2014 à 09:55
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 6 sept. 2014 à 13:02
Bonjour,

Voici le fichier pour une meilleure compréhension : http://cjoint.com/14sp/DIgj3pazi32_cp_horaire.xlsm

Au bout d'une procédure j'obtiens ce tableau, puis le graphique créé par le bout de macro que j'ai lié à ce fichier (pour recréer le tableau, effacer l'existant avant).
Je voudrais que l'ordre d'apparition des noms d'équipes soit celui de l'ordre de position (c'est une course) sur la dernière heure (20h). Or en l'état il me liste les équipes selon l'ordre du classement de la 1ère heure (00h). Sur quoi jouer en VBA ?

Merci d'avance.

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2014 à 10:41
Bonjour,
Il est très peu probable que ton fichier xlsm soit ouvert. Seuls les moins prudents s'y risqueraient. Il peut être pollué à ton insu.
Isole ton problème et le bout de code qui le concerne et présente-le ici entre balises code.
Merci de bien vouloir te conformer à cette discipline.
0
Palteza Messages postés 79 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 6 septembre 2014
6 sept. 2014 à 10:59
Bonjour et merci de ta réponse.

Je ne peux rien isoler puisque c'est plus un ajout ou une modification (de je ne sais quel élément) auquel je dois opérer. Je réexplique donc le problème (très dur sans voir le graphique et le tableau) et colle le code de création du graphique.

J'ai un tableau avec en ligne des heures et en colonnes des équipes. En valeurs se trouvent le nombre de checkpoints franchis par l'équipes aux heures données (c'est une course virtuelle). Ainsi je vais de 0h à 20h. Une fois mon graphique tracé (suppression quadrillage principal, ajout quadrillage secondaire, axe des abcisses en haut, etc...), je me retrouve avec un ordre des séries de données selon la 1ère heure (0h donc), alors que je voudrais l'ordre suivant la dernière heure des données (20h), logique pour une question de confort de lecture. Ces séries de données sont déjà figées quand je veux modifier l'ordre "à la main", quelques chose doit forcer l'ordre.


Voici le code :

Sub quegraph()

Dim x, y As Integer
x = 13
y = 13

Workbooks("cp_horaire.xlsm").Worksheets("cp_horaire").Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(Cells(x, y), Cells(1, 1))
ActiveChart.ChartType = xlLineMarkers
ActiveChart.PlotBy = xlColumns

ActiveSheet.ChartObjects(1).Name = "Position_Evolution"

ActiveChart.Axes(xlValue).MinimumScale = 0
ActiveChart.Axes(xlValue).MaximumScale = y


ActiveChart.Axes(xlValue).Delete
ActiveChart.Axes(xlValue).MajorGridlines.Delete
ActiveChart.Axes(xlValue).HasMinorGridlines = True
ActiveChart.Axes(xlValue).MinorUnit = 10
ActiveChart.Axes(xlValue).MinorGridlines.Border.Color = RGB(255, 0, 0)

ActiveSheet.ChartObjects("Position_Evolution").Activate
Selection.Width = 746
Selection.Height = 522

ActiveChart.PlotArea.Height = 510
ActiveChart.PlotArea.Top = 5
ActiveChart.PlotArea.Width = 700
ActiveChart.PlotArea.Left = 10




'on affiche l'échelle de l'axe vertical
ActiveChart.SetElement (msoElementPrimaryValueAxisShow)

'on inverse le sens de l'axe vertical
ActiveChart.Axes(xlValue).ReversePlotOrder = True

'on affiche les étiquettes de données, puis on supprime toutes sauf la dernière
ActiveChart.ApplyDataLabels

'police des étiquettes abscisses et des ordonnées
ActiveChart.Axes(xlCategory).TickLabels.Font.Size = 8
ActiveChart.Axes(xlValue).TickLabels.Font.Color = RGB(255, 0, 0)

'suppression trait axe ordonnées
ActiveChart.Axes(xlValue).Border.LineStyle = xlNone

'couleur de fond du graphique
ActiveChart.PlotArea.Interior.Color = RGB(230, 230, 230)
ActiveChart.ChartArea.Interior.Color = RGB(230, 230, 230)


For i = 1 To (y - 1)

ActiveChart.SeriesCollection(i).DataLabels.ShowValue = False
ActiveChart.SeriesCollection(i).DataLabels.ShowSeriesName = True
ActiveChart.SeriesCollection(i).DataLabels.Orientation = 0
'taille des marqueurs
ActiveChart.SeriesCollection(i).MarkerSize = 3

For n = 2 To (x - 1)

ActiveChart.SeriesCollection(i).DataLabels(n).Delete
'on place les étiquettes de données à gauche du point
ActiveChart.SetElement (msoElementDataLabelLeft)
'on masque la légende
ActiveChart.SetElement (msoElementLegendNone)


Next n

Next i


End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2014 à 11:08
Il est vraisemblable que tout est la conséquence de l'ordre de tes données, dans cette plage :
ActiveChart.SetSourceData Source:=Range(Cells(x, y), Cells(1, 1))
et qu'il te faut donc travailler sur la plage elle-même
0
Palteza Messages postés 79 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 6 septembre 2014
Modifié par Palteza le 6/09/2014 à 11:15
J'ai déjà travaillé sur ça, puisqu'à la base l'ordre (logique) était (Cells(1, 1), Cells(x, y)). J'avais justement inversé pour tester : aucune conséquence.

Mon Range est bien le bon pourtant, je ne prends ni trop ni pas assez de données.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 sept. 2014 à 13:02
J'ai déjà travaillé sur ça, puisqu'à la base l'ordre (logique) était (Cells(1, 1), Cells(x, y))
J'y vois en ce qui me concernhe toujours la même plage que le range Range(Cells(x, y), Cells(1, 1)) !

La même, avec le même ordre. Je n'y vois aucune différence (résultant d'un tri).
0
Rejoignez-nous