Graphique

Bonjour,

J'ai voulu faire un graphique en macro à partir de donnée d'un tableau.

J'ai donc fait une nouvelle macro pour générer le code automatiquement d'une partie du tableau (pour tester). Je met le tout dans un bouton et la ca marche niquel, le graphe s'ouvre.

En revanche je n'arrive pas à le modifier pour éviter de rentrer toutes les valeurs..

Sub graphe()
    Charts.Add
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Sheets("Results").Range("A19")
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).XValues = "=(Results!R1C3,Results!R1C6)"
    ActiveChart.SeriesCollection(1).Values = "=(Results!R4C3,Results!R4C6)"
    ActiveChart.SeriesCollection(1).Name = "=Results!R2C3"
    ActiveChart.SeriesCollection(2).XValues = "=(Results!R1C3,Results!R1C6)"
    ActiveChart.SeriesCollection(2).Values = "=(Results!R4C4,Results!R4C7)"
    ActiveChart.SeriesCollection(2).Name = "=Results!R2C4"
    ActiveChart.SeriesCollection(3).XValues = "=(Results!R1C3,Results!R1C6)"
    ActiveChart.SeriesCollection(3).Values = "=(Results!R4C5,Results!R4C8)"
    ActiveChart.SeriesCollection(3).Name = "=Results!R2C5"
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Results"
End Sub

Je ne connais pas la syntaxe pour sélectionner au lieu de deux colonnes comme :

ActiveChart.SeriesCollection(1).XValues = "=(Results!R1C3,Results!R1C6)"

Je voudrais en fait selectionner à partir de R1C3 et les autres avec un pas de 3

C'est à dire R1C3, R1C6, R1C9 etc...

Et cela pareil pour les autres "ActiveChart.SeriesCollection" .Xvalues et .values

Si quelqu'un peu m'aider ....

Merci le forum et ceux qui y participe

Cdt

juju

T'aider serait plus facile en connaissant la présentation de ta base de données

Voila le tableau

Axe des abscisse :les mois

3 courbes : -Somme ano

  • Somme ano réso
  • Somme ano aban

https://www.excel-pratique.com/~files/doc/Nouveau_Feuille_de_calcul_Microsoft_Excel_2_.xls

Bonjour,

je suis en train de chercher peut etre pour rien...(ca fait du bien parfois je sais) mais personne peut me dire si cela est possible ou s'il faut procéder autrement.

Merci d'avance

Je suis en train de tester une solution directe... mais je rame.

Le plus simple serait peut-être de recopier les valeurs sur une autre feuille, avec une présentation différente (par macro bien sûr) :

toutes les sommes ano sur la même colonne

toutes les sommes ano résolues sur une autre colonne

toutes les sommes ano abandonnées sur une autre colonne

Tu peux t'essayer à ça en attendant...

Ok je vais essayer ca mais ca me parait vraiment bizarre qu'on ne puisse pas selectionner une plage de valeur en rajoutant un step..pour un graphique

Si tu trouve une autre macro et que cela marche je suis prenneur aussi!!

Cdt

juju

Bon je crois que je tiens une piste...

Au fait d'après ta première macro tu veux tracer que pour 2007_Pack_Mob_02 ?

Bonsoir Julien

Bonsoir, Sylvain

Avec ce code, tu crées les 3 graphiques ("2007_PACK_MOB_04", "2007_PACK_MOB_02" , "2008_PACK_MOB_02")

Seulement, les trois graphiques se chevauchent, il te suffit de les déplacer à la main, pour les voir

Sub graphe()
Dim DerCol As Integer
For Each ChO In ActiveSheet.ChartObjects
    ChO.Delete
Next ChO
DerCol = [IV3].End(xlToLeft).Column
On Error Resume Next
[C3:E5].SpecialCells(xlCellTypeBlanks).Value = 0  'pour avoir une valeur de départ
On Error GoTo 0
For j = 1 To 3
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=Sheets("Results").Range("A19")
For i = 1 To 3
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(i).XValues = "=(Results!R1C" & 2 + i & ",Results!R1C" & DerCol - 3 + i & ")"
ActiveChart.SeriesCollection(i).Values = "=(Results!R" & j + 2 & "C" & 2 + i & ",Results!R" & j + 2 & "C" & DerCol - 3 + i & ")"
ActiveChart.SeriesCollection(i).Name = "=Results!R2C" & 2 + i
Next i
With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = Sheets("Results").Cells(j + 2, 2).Value
        .Location Where:=xlLocationAsObject, Name:="Results"
End With
Next j
End Sub

Bonsoir tous,

Bon, ben toutes mes recherches pour m'apercevoir au final que je me suis fait avoir...

Je partais du principe de nommer les différentes plages (abscisses, séries 1, 2 et 3) dans la feuille Excel, pour pouvoir ensuite insérer les noms pendant la création du graphique.

Oui mais voilà il s'avère que Insertion/Nom/Coller ne marche pas avec cette méthode de construction de graphique...

Du coup j'ai changé mon fusil d'épaule, et j'ai fait comme j'avais conseillé à Juju (en partant de là où j'étais arrivé quand même).

Ca donne une macro un peu bizarre, mais qui te tracera tes courbes comme tu voulais.

Tu peux bien sûr ajouter de nouvelles dates et valeurs.

https://www.excel-pratique.com/~files/doc/Plage_discontinue.xls

Sub graphique()
Sheets("Results").[A1].Select

'définition des variables
Dim max As Integer
max = [C2].End(xlToRight).Column
Dim pac, cel, plagano, plaganoreso, plaganoaba, plagemois As Range
Set pac = Range("C4", Cells(4, max))
Dim ano, anoreso, anoaba, mois, c As String

'définition des chaînes de caractères
ano = ""
anoreso = ""
anoaba = ""
mois = ""
    For Each cel In pac
        If cel.Offset(-2, 0) = "Somme Anos" Then
            c = Split(cel.Address, "$")(1)
            ano = ano & c & "4,"
            mois = mois & c & "1,"
        Else
        If cel.Offset(-2, 0) = "Somme Anos résolues" Then
            c = Split(cel.Address, "$")(1)
            anoreso = anoreso & c & "4,"
        Else
        If cel.Offset(-2, 0) = "Somme Anos abandonnées" Then
            c = Split(cel.Address, "$")(1)
            anoaba = anoaba & c & "4,"
        End If
        End If
        End If
    Next cel
ano = Left(ano, Len(ano) - 1)
anoreso = Left(anoreso, Len(anoreso) - 1)
anoaba = Left(anoaba, Len(anoaba) - 1)
mois = Left(mois, Len(mois) - 1)

'définition des plages
Set plagano = Range(ano)
Set plaganoreso = Range(anoreso)
Set plaganoaba = Range(anoaba)
Set plagemois = Range(mois)

'créationdes plages dans les classeur (non utilisé finalement)
'ActiveWorkbook.Names.Add Name:="plagano", RefersTo:=plagano
'ActiveWorkbook.Names.Add Name:="plaganoreso", RefersTo:=plaganoreso
'ActiveWorkbook.Names.Add Name:="plaganoaba", RefersTo:=plaganoaba
'ActiveWorkbook.Names.Add Name:="plagemois", RefersTo:=plagemois

'copie des plages sur feuille Recap
Sheets("Recap").UsedRange.Clear
plagemois.Copy Destination:=Sheets("Recap").[b1]
plagano.Copy Destination:=Sheets("Recap").[b2]
plaganoreso.Copy Destination:=Sheets("Recap").[b3]
plaganoaba.Copy Destination:=Sheets("Recap").[b4]
    With Sheets("Recap")
        .[A2] = "Somme ano"
        .[a3] = "Somme ano résolues"
        .[a4] = "Somme ano abandonnées"
    End With

'tracé des courbes
For Each ChO In ActiveSheet.ChartObjects
    ChO.Delete
Next ChO
Charts.Add
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Sheets("Recap").[A2].CurrentRegion, PlotBy:= _
    xlRows
ActiveChart.Location Where:=xlLocationAsObject, Name:="Results"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Résultats"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
End Sub

Bonjour et déja merci d'avoir trouvé ces deux solutions..

En gros :

-sylvain ta solution me plait beaucoup car elle marche ak mon classeur, le seul problème est qu'il faudrait voir les mois au lieu des années en bas du graphique..Mais je ne veux pas t'en demander trop non plus..

  • Felix, je comprends déja moins ton code, mais dès que je cole ton code (dans un bouton) dans mon classeur et que je rajoute une feuill "Recap" ca bloque..
  • ---------->plagemois.Copy Destination:=Sheets("Recap").[b1]
De plus il n'y a qu'un graphe qui s'affiche au lieu de un pour chaque palier. Je n'arrive pas a modifier le code pour résoudre ce pb.

je te passe le fichier que j'utilise :

https://www.excel-pratique.com/~files/doc/essai_jstefani_v2.rar

Mais merci et encore merci

juju

Petite inversion au niveau des prénoms... La solution de Félix te met les années, la mienne coince.

Je voulais pourtant te le préciser, j'ai oublié. Alors voilà pour pouvoir coller les cellules dates dans la feuille Recap, je les avais dé-fusionnées. C'est ça qui bloque avec ton classeur.

Dé-fusionne tous tes groupes de 3 cellules, et à la place tu fais Format/Cellule/Alignement ; horizontal : centré sur plusieurs colonnes.

Il n'y a qu'un seul graphe qui se crée effectivement, en l'absence de réponse à ma question

Sylvain a écrit :

tu veux tracer que pour 2007_Pack_Mob_02 ?

On peut modifier la procédure pour faire les 3 si tu veux

Salut,

excuse moi si je t'ai mal compris.

Le plus simple est d'ajouter les mois avec le code le plus court mais je suis confu car tu as tappé tout ce code pour moi et au final j'utilise celui d'un autre..

Pour les cellule fusionnées ,j'aurais pas trouvé donc merci

Cdt

julien

jstefani a écrit :

Le plus simple est d'ajouter les mois avec le code le plus court

Le plus simple pour qui ?

Moi en tous cas je ne suis pas encore arrivé à modifier le code de Félix...

Pour le reste pas de soucis.

Personnellement pour moi ce forum est aussi un moyen de progresser en essayant de résoudre des problèmes concrets, vu que je manque cruellement d'imagination pour m'imposer des exercices...

Donc quand une question m'intéresse je m'y attaque, je regarde attentivement les solutions des autres, je les compare aux miennes, et j'essaye de tirer mes conclusions pour l'avenir...

Il me semble qu'à ce jeu là tout le monde y trouve son compte.

On ne remerciera jamais assez Sébastien et les principaux acteurs du forum, mais aussi tous ceux qui amènent de l'eau au moulin avec leurs nouvelles questions.

Vive le forum !

Re,

Après recherche je ne vois toujours pas comment modifier le code de félix, qui en fait ne prend en compte pour chaque "Expr1012", et pour chaque "Somme ano", que la première et la dernière valeur.

C'est pourquoi je m'étais vite écarté de cette solution.

La mienne adaptée pour tracer 3 graphiques :

https://www.excel-pratique.com/~files/doc/Plage_discontinue_2.xls

Je n'arrive pas non plus à placer les graphiques sur la feuille, donc ils s'empilent les trois l'un sur l'autre.

"Quand on cherche, on trouve" 8)

Je savais qu'après une bonne bière dans un pub j'aurais les idées plus claires...

Je me suis rendu compte que (par macro) le graphique attendait absolument comme cellules de séries, une déclaration sous la forme = "=(Results!R4C3,...)"

Alors que je m'étais entêté à vouloir lui fare avaler du =(C4;F4;...):oops:

Donc en modifiant mes chaînes de caractères ça marche, sans passer par des plages nommées, ni une feuille intermédiaire.

Ensuite un petit coup de pouce du frangin pour savoir comment déclarer une variable multiple ( je sais pas si ça a un nom précis, un truc du style tableau de variable je crois...)

ça c'est le "Dim pac(0 To 2) As Range". Ensuite For i = 0 to 2 ; Pac(i)=....

Plutôt pratique non ? Merci frérot !

Du coup ça me donne une macro plutôt légère et fonctionnelle :

Sub graphique()
Application.ScreenUpdating = False
    For Each ChO In ActiveSheet.ChartObjects
        ChO.Delete
    Next ChO
Dim pac(0 To 2) As Range
Dim max As Integer
max = Range("C2").End(xlToRight).Column
Dim ano(0 To 2) As String, anoreso(0 To 2) As String, anoaba(0 To 2) As String, mois As String, c As String

For i = 0 To 2 ' i=0 pour 2007_Pack_Mob_04 ; i=1 pour 2007_Pack_Mob_02 ; i=2 pour 2008_Pack_Mob_02

'création des chaînes de caractères
Sheets("Results").Range("A1").Select
Set pac(i) = Range(Cells(3 + i, 3), Cells(3 + i, max))
mois = ""
   For Each cel In pac(i)
        If cel.Offset(-i - 1, 0) = "Somme Anos" Then
            ano(i) = ano(i) & "Results!R" & cel.Row & "C" & cel.Column & ","
            mois = mois & "Results!R1" & "C" & cel.Column & ","
        ElseIf cel.Offset(-i - 1, 0) = "Somme Anos résolues" Then
            anoreso(i) = anoreso(i) & "Results!R" & cel.Row & "C" & cel.Column & ","
        ElseIf cel.Offset(-i - 1, 0) = "Somme Anos abandonnées" Then
            anoaba(i) = anoaba(i) & "Results!R" & cel.Row & "C" & cel.Column & ","
        End If
    Next cel
ano(i) = (Left(ano(i), Len(ano(i)) - 1))
anoreso(i) = Left(anoreso(i), Len(anoreso(i)) - 1)
anoaba(i) = Left(anoaba(i), Len(anoaba(i)) - 1)
mois = Left(mois, Len(mois) - 1)

'création des 3 graphiques
Charts.Add
With ActiveChart
    .ChartType = xlLineMarkers
    .SetSourceData Source:=Sheets("Results").Range("B8")
    .SeriesCollection.NewSeries
    .SeriesCollection.NewSeries
    .SeriesCollection.NewSeries
    .SeriesCollection(1).XValues = "=(" & mois & ")"
    .SeriesCollection(1).Values = "=(" & ano(i) & ")"
    .SeriesCollection(1).Name = "=Results!R2C3"
    .SeriesCollection(2).Values = "=(" & anoreso(i) & ")"
    .SeriesCollection(2).Name = "=Results!R2C4"
    .SeriesCollection(3).Values = "=(" & anoaba(i) & ")"
    .SeriesCollection(3).Name = "=Results!R2C5"
    .Location Where:=xlLocationAsObject, Name:="Results"
End With
With ActiveChart
    .HasTitle = True
    .ChartTitle.Characters.Text = Range("B" & 3 + i)
    .Axes(xlCategory, xlPrimary).HasTitle = False
    .Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

(Au passage du coup ça remarche avec tes cellules fusionnées Juju...)

Maintenant il y a encore 3 trucs que je ne comprends pas :

  • Pourquoi je suis obligé d'ajouter un End With, suivi d'un With ActiveChart en plein milieu de la création de mes graphiques ?
  • Comment positionner les graphiques ?
  • Comment déclarer une plage de cellules non adjacentes, sans passer par une chaîne de caractères ? ça m'étonnerait quand même que ça ne soit pas possible, mais pour l'instant j'ai toujours pas trouvé...

Allez bonne nuit le forum ! Et bon week-end !

Rechercher des sujets similaires à "graphique"