1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
| Public Sub Créergraphe()
Dim NumSerie As Variant, NbLigne As Integer, J As Variant 'derniere ligne
NumSerie = 1
On Error GoTo Err_créergraphe
'--------------------------------
'Etape 1 création du type de graphique et son nom doit être numéroté 1 ou CHart(1)
'suppression de l'ancien
Sheets(1).Select
Application.DisplayAlerts = False
Charts(1).Delete
Application.DisplayAlerts = True
'création du graphe
Charts.Add
ActiveChart.ChartType = xlXYScatterLines 'définit le type de graphique, ici un nuage de points relié par des traits
ActiveChart.SetSourceData Source:=Sheets("Données").Range("B17")
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Graphe"
'----------------------------------------------------------------
'ETAPE 2 : Récupération du nombres de lignes à traiter
'déclaration des variables
'NbLigne : compte le nombre de lignes du tableau
For J = 4 To 50 'parcourt les 50 premieres lignes (c'est ce qu'on appelle une boucle)
If Sheets("Données").Cells(J, 1) = "" Then 'Or Sheets("Données").Cells(J, 3) = "" Then 'à la premiere case vide de la colonne A (numéro1), on récupère la dernière ligne où une valeur y figure une valeur, et on interrompt la boucle
NbLigne = J - 1
Exit For 'interruption de la boucle
End If
Next J
J = 0
'----------------------------------------------------------------
'ETAPE 3 : (Re)Création des séries
For J = 4 To NbLigne 'ex : la série(1 ou j-1) recoit les valeurs dela ligne 2 (ou j), la série2 recoit les valeurs de la ligne3 etc
'nextJ:
If Sheets("Données").Cells(J, 3) = "" And Sheets("Données").Cells(J, 4) = "" Then
' If " & Données!R" & J & "C3 & " = "" Then ' And Données.Range("C" & J).Value = "" Then
Else
ActiveChart.ChartArea.Select
ActiveChart.SeriesCollection.NewSeries 'seriescollection (j-1) sinon on commence par n°série=2 et donc ça bug après
ActiveChart.SeriesCollection(NumSerie).Name = "=Données!R" & J & "C1"
ActiveChart.SeriesCollection(NumSerie).XValues = _
"=(Données!R2C9,Données!R" & J & "C4,Données!R" & J & "C7,Données!R" & J & "C5)" 'ces lignes de défintion des sources est propre à ce graphique,à adapter selon les graphiques spécifiques à des tableaux particuliers
ActiveChart.SeriesCollection(NumSerie).Values = _
"=(Données!R" & J & "C3,Données!R" & J & "C3,Données!R" & J & "C6,Données!R2C9)"
' If Sheets("Données").Cells(J, 3) = "" Then
' If J < NbLigne Then
' J = J + 1
' GoTo nextJ
' Else
' Exit For
' End If
' Else
NumSerie = NumSerie + 1
End If
'MsgBox "" & NumSérie & ""
Next J
J = 0
'-----------------------------------------------------------------
'ETAPE 4 : MISE EN FORME DU GRAPHE
ActiveChart.HasLegend = True 'activation de la légende
ActiveChart.Legend.Select 'transparence, mise en forme... de la legende
Selection.Position = xlRight
Selection.Shadow = False
Selection.Interior.ColorIndex = xlNone
With Selection.Border
.Weight = xlHairline
.LineStyle = xlNone
End With
ActiveChart.PlotArea.Select
With Selection.Border
.ColorIndex = 16
.Weight = xlThin
.LineStyle = xlContinuous
End With
Selection.Fill.OneColorGradient Style:=msoGradientHorizontal, Variant:=2, _
Degree:=1
With Selection
.Fill.Visible = True
.Fill.ForeColor.SchemeColor = 36
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
ActiveChart.Axes(xlValue).MajorGridlines.Select
With Selection.Border
.ColorIndex = 15
.Weight = xlHairline
.LineStyle = xlDot
End With
ActiveChart.Axes(xlCategory).MajorGridlines.Select
With Selection.Border
.ColorIndex = 15
.Weight = xlHairline
.LineStyle = xlDot
End With
ActiveChart.PlotArea.Width = ActiveChart.ChartArea.Width
Sheets("Données").Activate 'retour a la feuille
ActiveSheet.Cells(1, 1).Select
Err_créergraphe:
Exit Sub
End Sub
'''''NE SERT PLUS MAINTENANT, ET PAS MIS A JOUR COMME AVEC NumSerie PAR EXEMPLE, DONC PAS UTILISABLE POUR LE MOMENT
Public Sub Séries()
'ETAPE 1 : Suppression des séries du graphique
Dim NbLigne As Integer, SautLigne As Integer, NbSérie As Long, J As Variant, var As Variant 'derniere ligne
'NbLigne = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'ne prend pas en compte si un gars met une valuer n'importe où plus bas dans la premiere colonne, nbligne comptera meme les lignes a cases vide, donc fausserait tout
For J = 1 To 1000 ' Limite à adapter à tes besoins
If ActiveSheet.Cells(J, 1) = "" Then
NbLigne = J - 1
Exit For
End If
Next J
J = 0
MsgBox "" & NbLigne & ""
Charts("Graphe").Activate
NbSérie = ActiveChart.SeriesCollection.Count
For J = 1 To NbSérie
With ActiveChart
.SeriesCollection(1).Delete 'si seriescollection(i), ça ne peut marcher car quand on i va delete le seriescollection(1) , eh bine le numéro 2 devient numéro 1 !
End With
Next J
J = 0
'ETAPE 2 : (Re)Création des séries
For J = 2 To NbLigne
ActiveChart.ChartArea.Select
ActiveChart.SeriesCollection.NewSeries 'seriescollection (j-1) sinon on commence par n°série=2 et donc ça bug après
ActiveChart.SeriesCollection(J - 1).XValues = _
"=(Données!R2C10,Données!R" & J & "C5,Données!R" & J & "C7,Données!R" & J & "C8)"
ActiveChart.SeriesCollection(J - 1).Values = _
"=(Données!R" & J & "C4,Données!R" & J & "C4,Données!R" & J & "C6,Données!R2C10)"
ActiveChart.SeriesCollection(J - 1).Name = "=Données!R" & J & "C1"
Next J
If ActiveChart.HasLegend = False Then 'si pas de légende, la cré, puis transparente, puis redimension de la largeur du graph
ActiveChart.HasLegend = True
ActiveChart.Legend.Select 'transparence de la legende
Selection.Position = xlRight
Selection.Shadow = False
Selection.Interior.ColorIndex = xlNone
With Selection.Border
.Weight = xlHairline
.LineStyle = xlNone
End With
ActiveChart.PlotArea.Select
ActiveChart.PlotArea.Width = ActiveChart.ChartArea.Width
End If
Sheets("Données").Activate 'retour a la feuille
ActiveSheet.Cells(1, 1).Select
End Sub |
Partager