Création d'un graphique via VB

  • Auteur de la discussion balooow
  • Date de début

balooow

Nouveau membre
Bonjour à tous !

Mon problème ne me semble pas compliqué mais je suis novice en VB et je n'arrive pas à m'en sortir, même après moulte recherche...

Je désire créer un graphique (type nuage de points) à partir d'une série de données contenu dans un tableau de taille variable


je voudrais que le graphique soit contenu dans la feuille active et placé à une position donné , qu'il porte un nom (pour pouvoir l'effacer à l'aide d'une autre fonction)ainsi qu'un titre en X et en Y .

J'ai enregistré une macro, mais elle nomme automatiquement le tableau à chaque fois que je l'appel. Mon tableau n'a donc pas de nom précis graph1, puis 2.... il n'a donc pas d'attribut spécifique pour le supprimer.

De plus lorsque j'exécute cette macro je sélectionne la totalité de la colonne où sont contenu mes valeurs... ce n'est pas vraiment variable

[cpp] Columns("T:T").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Feuil1!$T:$T")
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetElement (msoElementChartTitleCenteredOverlay)
ActiveSheet.ChartObjects("Graphique 20").Activate
ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
ActiveSheet.ChartObjects("Graphique 20").Activate
ActiveSheet.ChartObjects("Graphique 20").Activate
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleRotated)
ActiveSheet.ChartObjects("Graphique 20").Activate
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Y"
ActiveSheet.ChartObjects("Graphique 20").Activate
ActiveChart.ChartArea.Select
ActiveSheet.ChartObjects("Graphique 20").Activate
ActiveChart.Legend.Select
Selection.Delete
ActiveSheet.ChartObjects("Graphique 20").Activate
ActiveChart.Axes(xlValue).MajorGridlines.Select
ActiveChart.SeriesCollection(1).Name = "=""titre"""
ActiveSheet.ChartObjects("Graphique 20").Activate
ActiveChart.SeriesCollection(1).Select
Selection.MarkerStyle = -4142
ActiveSheet.ChartObjects("Graphique 20").Activate
ActiveChart.ChartArea.Select
ActiveSheet.ChartObjects("Graphique 20").Activate[/cpp]


si quelqu'un pourrait me venir en aide, en me donnant les noms des fonctions et la synthaxe

pour nommer un graphique, le positionner, nommer ses axes ce serait déjà formidable

cordialement:)
 

balooow

Nouveau membre
voila j'ai cherché sur le web anglais et j'ai reussi a trouver qq fonction qui m'aide

mon code ressemble donc à ça maintenant

:
[cpp] With ActiveSheet.ChartObjects.Add _
(Left:=450, Width:=375, Top:=200, Height:=225)
.Chart.Parent.Name = "Histogramme de répartition fréquentielle"
.Chart.SetSourceData Source:=Sheets("Feuil1").Range("Feuil1!$T:$T")
.Chart.ChartType = xlXYScatter
.Chart.Legend.Delete

End With

Call graph
Call Macro1

End Sub

Sub graph()

ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.SetElement (msoElementChartTitleCenteredOverlay)
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.ChartTitle.Text = "Histogramme de répartition fréquentielle"
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.PlotArea.Select
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleRotated)
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Nombre de particules"
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.PlotArea.Select
Range("A1").Select
End Sub
Sub Macro1()
'
' Macro1 Macro
'

'
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.ChartArea.Select
ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Distance(m)"
ActiveSheet.ChartObjects("Histogramme de répartition fréquentielle").Activate
ActiveChart.ChartArea.Select
Range("A1").Select
End Sub
[/cpp]


j'ai donc un affichage où je veux tout est bien


j'ai une chose qui marche mal c'est l'affichage des noms X et Y j'ai fais un enregistrement de macro pour ça, mais ça marche tres mal, surtout le X qui ne veux pas se renomer

voila si qqun peux m'aider ce serai cool
:D
 

zeb

Modérateur
Oh ! Il faut surtout comprendre ce que l'on fait :/

Par exemple, ligne 3, le ChartObjects.Chart.Parent.Name, c'est le ChartObjects.Name tout simplement...

Commençons par tout simplifier. On vite les SetElement qui font planter le code.
On vire les active/activate/select en double. Et j'écris HRF pour "Histogramme de répartition fréquentielle" parce que je fais ce que je veux :p
Code:
Sub Macro0
With ActiveSheet.ChartObjects.Add(Left:=450, Width:=375, Top:=200, Height:=225)
	.Name = "Histogramme"
  .Chart.SetSourceData Source:=WorkSheets("Feuil1" ).Range("$T:$T" )
  .Chart.ChartType = xlXYScatter
  .Chart.Legend.Delete
End With

graph
Macro1

End Sub

Sub graph()
    ActiveSheet.ChartObjects("HRF" ).Activate
    ActiveChart.ChartTitle.Text = "HRF"
    ActiveSheet.ChartObjects("HRF" ).Activate
    ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Nombre de particules"
End Sub

Sub Macro1()
    ActiveSheet.ChartObjects("HRF" ).Activate
    ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Distance(m)"
End Sub

Bon, maintenant, on vire les Active/Select parce que c'est moche, très moche et qu'ici, on apprend à programmer proprement, et on utilise des variables :
Code:
Sub Macro0
    Dim conteneur As ChartObject ' conteneur du graphe
    Dim graphe As Chart
    
    Set conteneur = ActiveSheet.ChartObjects.Add(Left:=450, Width:=375, Top:=200, Height:=225)
    conteneur.Name = "HRF"
    
    Set graphe = conteneur.Chart
    
    graphe.SetSourceData Source:=Worksheets("Feuil1").Range("$T:$T")
    graphe.ChartType = xlXYScatter
    graphe.Legend.Delete
    
    graphe.ChartTitle.Text = "HRF"
    graphe.Axes(xlValue, xlPrimary).AxisTitle.Text = "Nombre de particules"
    graphe.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Distance(m)"
End Sub

C'est presque ça. Faut maintenant dire à VB que si on veut mettre des titres c'est notre droit, après tout !
Code:
Sub Grapheur(feuille As Worksheet, titre As String, _
             left As Integer, top As Integer, width As Integer, height As Integer, _
             data As Range, titre_axe1 As String, titre_axe2 As string)
    
    Dim conteneur As ChartObject ' conteneur du graphe
    Dim graphe As Chart
    
    Set conteneur = feuille.ChartObjects.Add(Left, Top, Width, Height)
    conteneur.Name = titre
    
    Set graphe = conteneur.Chart
    
    graphe.SetSourceData data
    graphe.ChartType = xlXYScatter
    graphe.Legend.Delete
    
    graphe.HasTitle = True
    graphe.ChartTitle.Text = titre
    graphe.Axes(xlValue, xlPrimary).HasTitle = True
    graphe.Axes(xlValue, xlPrimary).AxisTitle.Text = titre_axe1
    graphe.Axes(xlCategory, xlPrimary).HasTitle = True
    graphe.Axes(xlCategory, xlPrimary).AxisTitle.Text = titre_axe2
End Sub

Tadaaaaa !
 

zeb

Modérateur
Ah ? Parce que tu en doutais :sol:

T'occupe pas du mec qui se la pète, comprends surtout ce qui a été proposé ;)
 

balooow

Nouveau membre
je m'étais trop fixé sur la syntaxe automatique des macro, avec un code propre à observer tout devient beaucoup beaucoup plus clair ! :)
 

antoine_16

Nouveau membre
Bonjour zeb,

Désolé de déterrer ce vieux sujet, mais j'ai une question sur ton code final.
Quand tu passes de l'avant-dernière étape à la dernière étape, tu ne mets plus directement les données tels que le titre, les dimensions, etc. Dans ce cas où est-ce que tu les mets ?

Je débute et pour l'instant j'apprends à comprendre un code... Mais là je ne comprends pas. Merci pour ton aide.
 

zeb

Modérateur
Salut,

Tiens, je ne savais pas que mes propositions de code étaient étudiées. :lol:

Avant tout sois le bienvenu.

Or donc, tu regardais les deux derniers codes. Le premier est plein de valeurs spécifiques, l'autre ne contient que des paramètres qu'il convient de donner quand on appelle la fonction ainsi crée.

Ce que tu ne vois pas, c'est que Balooow a dû réécrire sa fonction Macro0 :
Code:
Sub Macro0
    Grapheur ActiveSheet, "HRF", 450, 375, 200, 225, Worksheets("Feuil1").Range("T:T"), "Nombre de particules", "Distance(m)"
End Sub
Ainsi est-il plus facile de créer plusieurs graphes de la même manière, sans tout recommencer à chaque fois.
 

antoine_16

Nouveau membre
Merci.
Je suppose qu'il faudrait mettre [Résolu] mais je ne peux pas éditer le titre...
Je continue mon "étude du code de [strike]S[/strike]Zeb" (et des autres) ;-) ;-)
A bientôt !
 

zeb

Modérateur
Qui est ce Seb ?
Non, ce n'est pas ton topic mais celui de balooow. C'est à lui de juger si c'est résolu ou pas.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 098
Membres
1 586 286
Dernier membre
petitangebleu1977
Partager cette page
Haut