VBA: créer un graphique excel

bernaroff

XLDnaute Junior
Bonjour, cette question est surement d'un niveau débutant, mais je commence tout juste
J'ai besoin de créer un graphique dont les abscisses sont
Cells(34,7),Cells(34,cr_max)
les valeurs des deux courbes sont
Cells(35,7),Cells(35,cr_max)
Cells(37,7),Cells(37,cr_max)

(cr_max est un paramètre définis et égale à une valeur fixe)
De plus, il faut que mes abscisses soit en ordre chronologique et proportionnelles (10 est à 9 unité de 1 et à 7 unité de 3 par exemple)

Merci beaucoup
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA: créer un graphique excel

Bonjour Bernaroof, bonjour le forum,

Une idée.... Tu lances l'enregistreur de macros (menu Outils/Macro/Nouvelle macro...) tu fait ton graphique manuellement avec tous les paramètres que tu cites car l'enregistreur enregistre tout (même trop souvent). À la fin tu arrêtes l'enregistreur et tu regardes le code...
 

bernaroff

XLDnaute Junior
Re : VBA: créer un graphique excel

j'ai réussi à créer mon graphique:
Dim rg_data1 As Range
Dim rg_data10 As Range

Set rg_data1 = Range(Cells(37, 7), Cells(37, cr_max))
Set rg_data10 = Range(Cells(34, 7), Cells(34, cr_max))

Range(Cells(35, 7), Cells(35, cr_max)).Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(Cells(35, 7), Cells(35, cr_max))
ActiveChart.ChartType = xlLine
ActiveChart.SeriesCollection(1).Name = "='Données'!$A$35"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Name = "='Données'!$A$31"
ActiveChart.SeriesCollection(2).Values = rg_data1
ActiveChart.SeriesCollection(2).XValues = rg_data10
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).CategoryType = xlTimeScale

ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.ChartArea.Select
ActiveChart.PlotVisibleOnly = False
Rows("37:37").Select
Selection.EntireRow.Hidden = True

Mais normalement quand je passe l'axe des adscisses en "date"
( ActiveChart.Axes(xlCategory).CategoryType = xlTimeScale)
il me les met en ordre croissant en respectant les intervales seulement ça ne se produit pas.

le problème avec le nuage de point c'est que mes données ne sont pas en ordre croissant ... :-(
839 839 630 650 600
3,46% 3,46% 4,60% 4,31% 3,83%

Si quelqu'un a une solution pour ce problème je suis preneur, je m'arrache les cheveux sur ce graphe depuis le début de l'après midi ...
 

bernaroff

XLDnaute Junior
Re : VBA: créer un graphique excel

Voila ce que j'essaie de faire, sur le graphique, je souhaiterai mettre les valeurs en abscisses par ordre croissant avec les points correspondants, malheureusement je n'arrive toujours pas à trouver de solutions

(à gauche, ce que j'obtiens, à droite ce que je souhaite obtenir)

Merci pour votre patience et votre aide
 

Pièces jointes

  • Exemple.xls
    41.5 KB · Affichages: 488
  • Exemple.xls
    41.5 KB · Affichages: 513
  • Exemple.xls
    41.5 KB · Affichages: 543

mécano41

XLDnaute Accro
Re : VBA: créer un graphique excel

J'ai juste enregistré la mise en ordre et je l'ai copiée dans ton code. [EDIT : il faut bien entendu adapter le code à un tableau variable]

Les valeurs actuelles sont dans l'ordre que tu leur a donné ; clique le bouton et cela met en ordre et trace le nouveau graphique (évidemment, ici comme le premier est lié aux mêmes valeurs, il se met à jour aussi)

Cordialement
 

Pièces jointes

  • Copie de Exemple-2.xls
    45.5 KB · Affichages: 554
  • Copie de Exemple-2.xls
    45.5 KB · Affichages: 598
  • Copie de Exemple-2.xls
    45.5 KB · Affichages: 629
Dernière édition:

y.boukhalfa

XLDnaute Nouveau
Bonjour,

et d'abord merci pour les réponses.

Mecano41, j'ai réutilisé ton fichier pour faire ma macro, cependant j'aimerai pouvoir utiliser une variable pour l'indice de la fin de la plage de données. Voici ce que j'essaye de faire mais je ne sais pas comment écrire cela en VBA.
Voici le code que j'utilise :

Dim N%

With Worksheets("Feuil1")
N = .Cells(.Rows.Count, 1).End(xlUp).Row
Set F = Worksheets("feuil1")
Charts.Add
With ActiveChart
.SetSourceData Source:=F1.Range("K13")
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.ChartType = xlXYScatterLinesNoMarkers
.XValues = F.[B1:B&N&]
.Values = F.[H1:H&N&]
.Name = "V en cm/s"
End With
.SeriesCollection.NewSeries
With .SeriesCollection(2)
.ChartType = xlXYScatterLinesNoMarkers
.XValues = F.[B1:B&N&]
.Values = F.[J1:J&N&]
.Name = "A en cm²/s²"
End With
.Location Where:=xlLocationAsObject, Name:=F.Name
End With
ActiveChart.Parent.Name = "Graphique"
With ActiveSheet.Shapes("Graphique")
.Left = 50
.Top = 50
.Width = 1000
.Height = 500
End With
[A1].Select

Merci d'avance
 

mécano41

XLDnaute Accro
Bonjour,

et d'abord merci pour les réponses.

Mecano41, j'ai réutilisé ton fichier pour faire ma macro, cependant j'aimerai pouvoir utiliser une variable pour l'indice de la fin de la plage de données. Voici ce que j'essaye de faire mais je ne sais pas comment écrire cela en VBA.
Voici le code que j'utilise :

Dim N%

With Worksheets("Feuil1")
N = .Cells(.Rows.Count, 1).End(xlUp).Row
Set F = Worksheets("feuil1")
Charts.Add
With ActiveChart
.SetSourceData Source:=F1.Range("K13")
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.ChartType = xlXYScatterLinesNoMarkers
.XValues = F.[B1:B&N&]
.Values = F.[H1:H&N&]
.Name = "V en cm/s"
End With
.SeriesCollection.NewSeries
With .SeriesCollection(2)
.ChartType = xlXYScatterLinesNoMarkers
.XValues = F.[B1:B&N&]
.Values = F.[J1:J&N&]
.Name = "A en cm²/s²"
End With
.Location Where:=xlLocationAsObject, Name:=F.Name
End With
ActiveChart.Parent.Name = "Graphique"
With ActiveSheet.Shapes("Graphique")
.Left = 50
.Top = 50
.Width = 1000
.Height = 500
End With
[A1].Select

Merci d'avance


Bonjour,

Essaie ceci pour le premier (et pareil pour les autres) :

Code:
.XValues = F.[B1.Resize(1,N)]

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 464
Messages
2 088 649
Membres
103 903
dernier inscrit
chrisbe