J'ai les chiffres des ventes mensuelles stockés dans des feuilles séparées. J'aimerais créer un graphique des ventes de plusieurs produits par mois. Chaque produit serait représenté par une ligne de couleur différente sur le même graphique, chaque mois suivant l'axe x.
Quel est le meilleur moyen de créer un graphique à une seule ligne à partir des mêmes cellules relatives sur plusieurs feuilles?
Utilisez l'assistant graphique.
A l'étape 2 sur 4, il y a un onglet intitulé "Série". Il y a 3 champs et une zone de liste sur cet onglet. La liste contient les différentes séries que vous incluez déjà dans le graphique. Chaque série possède à la fois un champ "Nom" et un champ "Valeurs" spécifiques à cette série. Le dernier champ est le champ "Étiquettes d'axe de catégorie (X)", commun à toutes les séries.
Cliquez sur le bouton "Ajouter" sous la liste. Cela ajoutera une série vierge à votre liste. Notez que les valeurs de "Nom" et de "Valeurs" changent lorsque vous mettez une série en surbrillance dans la zone de liste.
Sélectionnez votre nouvelle série.
Il y a une icône dans chaque champ du côté droit. Cette icône vous permet de sélectionner des cellules dans le classeur pour extraire les données. Lorsque vous cliquez dessus, le Wizard se cache temporairement (sauf pour le champ dans lequel vous travaillez), vous permettant ainsi d'interagir avec le classeur.
Sélectionnez la feuille appropriée dans le classeur, puis sélectionnez les champs avec les données que vous souhaitez afficher dans le graphique. Vous pouvez cliquer sur le bouton situé à droite du champ pour afficher l’Assistant.
J'espère que cela pourra aider.
EDIT: Ce qui précède s’applique à 2003 et avant. Pour 2007, lorsque le graphique est sélectionné, vous devriez pouvoir effectuer une action similaire à l'aide de l'option "Sélectionner des données" de l'onglet "Conception" du ruban. Cela ouvre une boîte de dialogue listant la série pour le graphique. Vous pouvez sélectionner la série exactement comme dans Excel 2003, mais vous devez utiliser les boutons "Ajouter" et "Modifier" pour définir une série personnalisée.
Voici du code d'Excel 2010 qui pourrait fonctionner. Il a quelques spécificités (comme le filtrage des caractères mal encodés dans les titres), mais il a été conçu pour créer plusieurs graphiques multi-séries à partir de données à 4 dimensions contenant à la fois des données absolues et des pourcentages. Modifiez-le comme bon vous semble:
Sub createAllGraphs()
Const chartWidth As Integer = 260
Const chartHeight As Integer = 200
If Sheets.Count = 1 Then
Sheets.Add , Sheets(1)
Sheets(2).Name = "AllCharts"
ElseIf Sheets("AllCharts").ChartObjects.Count > 0 Then
Sheets("AllCharts").ChartObjects.Delete
End If
Dim c As Variant
Dim c2 As Variant
Dim cs As Object
Set cs = Sheets("AllCharts")
Dim s As Object
Set s = Sheets(1)
Dim i As Integer
Dim chartX As Integer
Dim chartY As Integer
Dim r As Integer
r = 2
Dim curA As String
curA = s.Range("A" & r)
Dim curB As String
Dim curC As String
Dim startR As Integer
startR = 2
Dim lastTime As Boolean
lastTime = False
Do While s.Range("A" & r) <> ""
If curC <> s.Range("C" & r) Then
If r <> 2 Then
seriesAdd:
c.SeriesCollection.Add s.Range("D" & startR & ":E" & (r - 1)), , False, True
c.SeriesCollection(c.SeriesCollection.Count).Name = Replace(s.Range("C" & startR), "Â", "")
c.SeriesCollection(c.SeriesCollection.Count).XValues = "='" & s.Name & "'!$D$" & startR & ":$D$" & (r - 1)
c.SeriesCollection(c.SeriesCollection.Count).Values = "='" & s.Name & "'!$E$" & startR & ":$E$" & (r - 1)
c.SeriesCollection(c.SeriesCollection.Count).HasErrorBars = True
c.SeriesCollection(c.SeriesCollection.Count).ErrorBars.Select
c.SeriesCollection(c.SeriesCollection.Count).ErrorBar Direction:=xlY, Include:=xlBoth, Type:=xlCustom, Amount:="='" & s.Name & "'!$F$" & startR & ":$F$" & (r - 1), minusvalues:="='" & s.Name & "'!$F$" & startR & ":$F$" & (r - 1)
c.SeriesCollection(c.SeriesCollection.Count).ErrorBar Direction:=xlX, Include:=xlBoth, Type:=xlFixedValue, Amount:=0
c2.SeriesCollection.Add s.Range("D" & startR & ":D" & (r - 1) & ",G" & startR & ":G" & (r - 1)), , False, True
c2.SeriesCollection(c2.SeriesCollection.Count).Name = Replace(s.Range("C" & startR), "Â", "")
c2.SeriesCollection(c2.SeriesCollection.Count).XValues = "='" & s.Name & "'!$D$" & startR & ":$D$" & (r - 1)
c2.SeriesCollection(c2.SeriesCollection.Count).Values = "='" & s.Name & "'!$G$" & startR & ":$G$" & (r - 1)
c2.SeriesCollection(c2.SeriesCollection.Count).HasErrorBars = True
c2.SeriesCollection(c2.SeriesCollection.Count).ErrorBars.Select
c2.SeriesCollection(c2.SeriesCollection.Count).ErrorBar Direction:=xlY, Include:=xlBoth, Type:=xlCustom, Amount:="='" & s.Name & "'!$H$" & startR & ":$H$" & (r - 1), minusvalues:="='" & s.Name & "'!$H$" & startR & ":$H$" & (r - 1)
c2.SeriesCollection(c2.SeriesCollection.Count).ErrorBar Direction:=xlX, Include:=xlBoth, Type:=xlFixedValue, Amount:=0
If lastTime = True Then GoTo postLoop
End If
If curB <> s.Range("B" & r).Value Then
If curA <> s.Range("A" & r).Value Then
chartX = chartX + chartWidth * 2
chartY = 0
curA = s.Range("A" & r)
End If
Set c = cs.ChartObjects.Add(chartX, chartY, chartWidth, chartHeight)
Set c = c.Chart
c.ChartWizard , xlXYScatterSmooth, , , , , True, Replace(s.Range("B" & r), "Â", "") & " " & s.Range("A" & r), s.Range("D1"), s.Range("E1")
Set c2 = cs.ChartObjects.Add(chartX + chartWidth, chartY, chartWidth, chartHeight)
Set c2 = c2.Chart
c2.ChartWizard , xlXYScatterSmooth, , , , , True, Replace(s.Range("B" & r), "Â", "") & " " & s.Range("A" & r) & " (%)", s.Range("D1"), s.Range("G1")
chartY = chartY + chartHeight
curB = s.Range("B" & r)
curC = s.Range("C" & r)
End If
curC = s.Range("C" & r)
startR = r
End If
If s.Range("A" & r) <> "" Then oneMoreTime = False ' end the loop for real this time
r = r + 1
Loop
lastTime = True
GoTo seriesAdd
postLoop:
cs.Activate
End Sub