Adaptation graphique plage variable VBA
Bonjour à tous ! J'ai une question qui va peut être paraître évidente à la majorité d'entre vous mais je débute tout juste Excel :)
Alors voilà : j'ai dû faire, à l'aide d'Excel, une feuille avec un tableau d'amortissement. Dans ce dernier, l'utilisateur du tableau renseigne : le montant emprunté ; la durée de l'emprunt et le taux annuel (c.f cases orangées dans mon documents Excel). Il y a plusieurs feuilles dans mon document mais on ne s'intéresse ici qu'à la première ("Emprunt annuités constantes"). Le nombre de ligne visible s'adapte en fonction de la durée de l'emprunt (inscrit en B4).
Le problème est là : j'aimerai faire un graphique pour modéliser l'évolution des intérêts et des amortissements en fonction de l'échéance après emprunt. Le graphique le plus adapté à ma situation est l'histogramme empilé 100%. Le problème est qu'il ne s'adapte pas en fonction des cellules "vides" (qui ne sont pas affichées mais il y a une formule dedans) c'est à dire que l'axe des abscisses reste bloqué sur 30.
Maintenant, rentrons dans le concret : j'ai après maintes et maintes recherches compris qu'il fallait sûrement que je passe par du VBA et de l'enregistrement de macro. J'ai donc enregistré une macro où je créer mon graphique et le met en forme pour regarder le code et voir ce que je peux modifier. Voici le code en entier : (Il n'y a que les premières lignes qui sont à modifier notamment le "ActiveChart.SetSourceData Source :=[...]")
Sub Test1()
'
' Test1 Macro
'
'
Application.ScreenUpdating = False
ActiveSheet.ChartObjects("Test1").Activate
ActiveChart.Parent.Delete
Range("C8").Select
Range(Selection, Selection.End(xlDown)).Select
Range("C8:C38,E8").Select
Range("E8").Activate
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeFormulas, 1).Select
ActiveSheet.Shapes.AddChart2(297, xlColumnStacked100).Select
ActiveChart.SetSourceData Source:=Range( _
"'Emprunt annuités constantes'!$C$9:$C$20,'Emprunt annuités constantes'!$E$9:$E$20" _
)
ActiveChart.Parent.Name = "Test1"
With ActiveSheet.ChartObjects("Test1")
.Left = Range("J11:M31").Left
.Top = Range("J11:M31").Top
.Width = Range("J11:M31").Width
.Height = Range("J11:M31").Height
End With
ActiveChart.ChartArea.Select
ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
ActiveChart.SetElement (msoElementChartTitleNone)
ActiveChart.SetElement (msoElementDataLabelCenter)
ActiveChart.FullSeriesCollection(1).DataLabels.Select
Selection.Orientation = xlUpward
Selection.Format.TextFrame2.Orientation = msoTextOrientationUpward
Selection.Position = xlLabelPositionInsideBase
Selection.Format.TextFrame2.TextRange.Font.Bold = msoTrue
Selection.Format.TextFrame2.TextRange.Font.Size = 12
With Selection.Format.TextFrame2.TextRange.Font.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
.Solid
End With
ActiveChart.FullSeriesCollection(2).DataLabels.Select
Selection.Position = xlLabelPositionInsideEnd
Selection.Orientation = xlDownward
Selection.Format.TextFrame2.Orientation = msoTextOrientationDownward
Selection.Format.TextFrame2.TextRange.Font.Bold = msoTrue
With Selection.Format.TextFrame2.TextRange.Font.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
.Solid
End With
ActiveChart.Axes(xlCategory).AxisTitle.Select
Selection.Caption = "Échéance en année"
ActiveChart.SetElement (msoElementLegendTop)
Application.CutCopyMode = False
ActiveChart.FullSeriesCollection(1).Name = "=""Intérêts"""
ActiveChart.FullSeriesCollection(2).Name = "=""Amortissement"""
Application.CommandBars("Format Object").Visible = False
ActiveSheet.ChartObjects("Test1").Activate
Application.CommandBars("Format Object").Visible = False
ActiveSheet.Shapes("Test1").Line.Visible = msoFalse
Application.ScreenUpdating = True
End SubDans mon cas j'aimerai que le graphique soit créer à partir des plages : C8:C38 et E8:E38 MAIS que les cellules vides ne soient pas prise en compte ! J'ai déjà fait beaucoup de recherches mais n'ai pas réussi à adapter quelque chose pour ma situation (c'est pour cela que j'appelle à l'aide ^^)
Voilà j'espère avoir été clair si vous avez des questions, j'y répondrai dans les plus brefs délais :)
Merci à vous et bonne soirée !
Bonjour
Il suffit de baser la graphique sur la tableau structuré et non une plage et d'utiliser un segment pour filtrer le tableau
Quelques exemples pour comprendre l'intérêt des tableaux structurés et segments pour les graphiques