Axe x dynamique sur historigramme

Fermé
PelurDeGrz Messages postés 3 Date d'inscription mercredi 1 juillet 2015 Statut Membre Dernière intervention 2 juillet 2015 - 1 juil. 2015 à 15:05
PelurDeGrz Messages postés 3 Date d'inscription mercredi 1 juillet 2015 Statut Membre Dernière intervention 2 juillet 2015 - 2 juil. 2015 à 10:30
Bonjour à vous, les patients qui sauront me renseigner.

Pour commencer je suis une bille en VBA ça fait trois jours que j'en fais, car je dois réaliser des macros assez complètes.

Je souhaite réaliser un histogramme dont les valeurs en y ainsi qu'en x varie de manières dynamique.

J'ai déjà pu bien améliorer des partie de mon code grâce à la lecture de tuto/forum mais là je sèche...

Pour la sélection dynamique sur l'axe y pas de soucis j'ai trouvé (voir à la fin), mais pour l'axe x je bloque.

J'ai bricolé une solution mais elle ne me plaît pas, car pas du tout esthétique, la voici:

Function plot_hist(nb_colonne)
'Plot les graphes à l'écran

'Afin de rendre les graphiques dynamique, cette condition permet de choisir un nombre de colonne au graphique ainsi que les valeurs indiquée sur l'axe x
If nb_colonne = 5 Then

'graphique

ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).Name = "=""Répartition mesure sur l'axe x"""

ActiveChart.FullSeriesCollection(1).Values = "=Graphique!$J$2:$J$6"
ActiveChart.FullSeriesCollection(1).XValues = "=Graphique!$I$2:$I$6"

ActiveSheet.ChartObjects(1).Left = Range("P10").Left
ActiveSheet.ChartObjects(1).Top = Range("P10").Top

ElseIf nb_colonne = 15 Then

'graphique

ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = "=""Répartition mesure sur l'axe x"""
ActiveChart.SeriesCollection(1).Values = "=Graphique!$J$2:$J$16"
ActiveChart.SeriesCollection(1).XValues = "=Graphique!$I$2:$I$16"

ActiveSheet.ChartObjects(1).Left = Range("P10").Left
ActiveSheet.ChartObjects(1).Top = Range("P10").Top


Ainsi de suite pour un maximum de possibilité

Puis j'ai trouver comment rendre l'axe y dynamique d'une façon plus jolie

nb_colonne = nb_colonne + 1
ActiveChart.SetSourceData Source:=Sheets("Mesure").Range("J2:J" & nb_colonne)

Mais je trouve pas comment faire quelque chose d'identique pour le XValues

Voilà J'espère avoir été clair dans la difficulté que je rencontre.
Je rappel que je suis pas un expert en programmation et que peut-être des choses basique m'échappe dans ce langage.

En tout les cas je vous remercie d'avance pour vos réponses.

Salutations à tous
PelurDeGrz

1 réponse

ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
1 juil. 2015 à 18:58
Bonjour

Es tu sur d'avoir besoin d'une macro ?
Peux tu envoyer la partie concernée de ton fichier, au format excel 2003, sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu

Cdlmnt
0
PelurDeGrz Messages postés 3 Date d'inscription mercredi 1 juillet 2015 Statut Membre Dernière intervention 2 juillet 2015
Modifié par PelurDeGrz le 2/07/2015 à 09:53
Bonjour,

Merci pour ta réponse.
Oui j'ai besoin d'une macro, tu le verra mieux une fois le fichier Excel téléchargé.
J'ai essayé de commenter au mieux le code mais je reste dispo pour tout complément d'infos.

Merci d'avance pour ton aide.

http://www.cjoint.com/c/EGchYkHvXO5
0
PelurDeGrz Messages postés 3 Date d'inscription mercredi 1 juillet 2015 Statut Membre Dernière intervention 2 juillet 2015
2 juil. 2015 à 10:30
Re, déjà,

Voilà après avoir posté ma réponse j'ai eu une illumination hasardeuse.
Je comprend pas encore très bien la "grammaire" de ce langage, mais en essayant à tâton j'ai trouvé quelque chose qui fonctionne assez bien et qui me convient pleinement.


Function plot_hist(nb_colonne)
'Plot les graphes à l'écran

'graphique a
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Sheets("Graphique").Range("J2:J" & nb_colonne + 1), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).XValues = "=Graphique!$I$2:$I$" & nb_mesure + 7
ActiveChart.SeriesCollection(1).Name = "=""Répartition mesure sur l'axe a"""


ActiveSheet.ChartObjects(1).Left = Range("P10").Left
ActiveSheet.ChartObjects(1).Top = Range("P10").Top

'graphique b
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Sheets("Graphique").Range("L2:L" & nb_colonne + 1), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).XValues = "=Graphique!$K$2:$K$" & nb_mesure + 7
ActiveChart.SeriesCollection(1).Name = "=""Répartition mesure sur l'axe b"""


ActiveSheet.ChartObjects(2).Left = Range("V2").Left
ActiveSheet.ChartObjects(2).Top = Range("V2").Top

'graphique c
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Sheets("Graphique").Range("N2:N" & nb_colonne + 1), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).XValues = "=Graphique!$M$2:$M$" & nb_mesure + 7
ActiveChart.SeriesCollection(1).Name = "=""Répartition mesure sur l'axe c"""

ActiveSheet.ChartObjects(3).Left = Range("V22").Left
ActiveSheet.ChartObjects(3).Top = Range("V22").Top

End Function


Si malgré tout tu souhaite regarder le code pour me proposer quelque chose libre à toi sinon pour moi c'est tout bon ça fonctionne.

Merci :)
0