Beurk, quel code horrible !
(T'inquiète je dis ça à chaque fois que je lis ActiveMachin, SelectTruc dans un code.)
Si tu n'es pas inquiet, en revanche, tu vas me faire le plaisir de revoir ça !
Bon, comme c'est les vacances, je m'y colle... (...T'as de la chance)
Sheets("CFR" ).Activate
Num = Range("B65536" ).End(xlUp).Row
-->
Num = Sheets("CFR" ).Range("B65536" ).End(xlUp).Row
C'est quand même plus classe (Oui, il y a un jeu de mots
![:D :D]()
)
Charts.Add
With ActiveChart
...
-->
Dim ch As Chart
Set ch = Charts.Add
With ch
...
etc.
Ca fait :
Sub AjoutBarreAvancement()
Dim num As Integer
Dim ch As Chart ' Une feuille graphique
Dim co As ChartObject
Num = WorkSheets("CFR" ).Range("B65536" ).End(xlUp).Row
Set ch = Charts.Add
ch.ChartType = xlBarStacked
ch.SetSourceData WorkSheets("CFR" ).Range("B6:B" & Num & ",V6:W" & Num), xlColumn
ch.SeriesCollection(1).XValues = "=CFR!R6C2:R" & Num & "C2"
ch.SeriesCollection(1).Values = "=CFR!R6C22:R" & Num & "C22"
ch.SeriesCollection(2).XValues = "=CFR!R6C2:R" & Num & "C2"
ch.SeriesCollection(2).Values = "=CFR!R6C23:R" & Num & "C23"
Set co = ch.Location(xlLocationAsObject, "CFR")
With co.Axes(xlValue)
.MinimumScaleIsAuto = True
.MaximumScale = 1
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
co.Axes(xlCategory).ReversePlotOrder = True
co.Axes(xlValue).MaximumScale = 1
co.HasAxis(xlCategory, xlPrimary) = False
co.HasAxis(xlValue, xlPrimary) = False
co.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic
co.Axes(xlCategory).HasMajorGridlines = False
co.Axes(xlCategory).HasMinorGridlines = False
co.HasLegend = False
co.HasDataTable = False
With co.ChartArea
.Left = Range("V6" ).Left
.Top = Range("V6" ).Top
.Height = Range("V6" ).Height
.Width = 200
End With
With co.PlotArea
.Left = 1
.Top = 1
.Width = 198
.Height = ChartArea.Height - 2
.Border.LineStyle = xlNone
.Interior.ColorIndex = xlNone
End With
End Sub
Tu jongles avec des feuilles de calcul (Worksheet), des feuilles graphiques (Chart), qui sont des feuilles (Sheet) et des graphiques (ChartObject) qui sont des formes (shape). Donc pour ne pas s'emmêler les pinceaux, on va tout bien préciser : lignes 3 et 4, on définit nos variables. Ligne 6, CFR est une feuille de
calcul, c'est plus qu'une Sheet, c'est une Worksheet.
Ligne 7, on crée une feuille graphique. On se sert d'une variable pour la référencer, on ne compte pas sur le fait qu'elle est active ou pas. Ligne 15, la méthode Location va détruire la feuille graphique (Chart) et créer un graphique (ChartObject) à la place, sur la feuille donnée. Donc on ne se sert pas du fait que l'objet est peut être actif, mais on se sert d'une variable. Attention, à partir de cette ligne, l'objet co dans mon code, ou ActiveChart dans le tien, n'est plus le même et n'est plus de même classe.
Ligne 38. Ah bah, ça ne marche toujours pas. Et bien au lieu de bouger le contenu de la forme, on va bouger la forme :
With co.ChartArea
.Left = Range("V6" ).Left
.Top = Range("V6" ).Top
.Height = Range("V6" ).Height
.Width = 200
End With
-->
co.Left = Range("V6" ).Left
co.Top = Range("V6" ).Top
co.Height = Range("V6" ).Height
co.Width = 200
Tadaaaaaaaaaa !