Sub SetChartScales()
Dim cht As Chart
Dim cht1 As Chart
Dim cht2 As Chart
'Graphique 1
Set cht = Worksheets("Graphiques").ChartObjects("Chart 1").Chart
cht.Axes(xlValue).MinimumScale = Range("A5").Value
'Graphique 2
Set cht1 = Worksheets("Graphiques").ChartObjects("Chart 3").Chart
cht1.Axes(xlValue).MinimumScale = Range("A31").Value
'Graphique 3
Set cht2 = Worksheets("Graphiques").ChartObjects("Chart 5").Chart
cht2.Axes(xlValue).MinimumScale = Range("A58").Value
Lors du run, je recois la runtime error 13: type mismatch, avec cht1.Axes(xlValue).MinimumScale = Range("A31").Value surligné en jaune dans le Debug,
Je ne comprends pas car j'ai bien nommé ces variables dans les dim en débu de code. Quelqu'un peut m'expliquer? Je suis assez novice en VB.
En gros ce que je voulais faire c'est lier l'échelle minimale de plusieurs graphiques (1,2,3 etc...) à des cellules spécifiques (A1,A2,A3, etc...).
Sans utiliser des "Active / Activate" ou "select" car j'aimerais que tous ces calculs se fassent en fond.
Alors peut-être qu'il vous faut référencer la feuille à laquelle appartiennent ces cellules
Range("A31") sans référence de feuille se rapporte à la feuille active à un instant T.
Si pour une raison ou une autre la feuille active change à un instant T au cours de votre macro alors A31 peut ne pas contenir la bonne donnée.
Ou genre With ... End With et les points idoines :
Code:
With ThisWorkbook.Sheets("LaBonneFeuille")
'Graphique 1
Set cht = Worksheets("Graphiques").ChartObjects("Chart 1").Chart
cht.Axes(xlValue).MinimumScale = .Range("A5").Value
'Graphique 2
Set cht1 = Worksheets("Graphiques").ChartObjects("Chart 3").Chart
cht1.Axes(xlValue).MinimumScale = .Range("A31").Value
'Graphique 3
Set cht2 = Worksheets("Graphiques").ChartObjects("Chart 5").Chart
cht2.Axes(xlValue).MinimumScale = .Range("A58").Value
End With
Ou avec variable et déclaration :
Code:
Dim wsSource as WorkSheet
Set wsSource = ThisWorkbook.Sheets("LaBonneFeuille")
'Graphique 1
Set cht = Worksheets("Graphiques").ChartObjects("Chart 1").Chart
cht.Axes(xlValue).MinimumScale = wsSource.Range("A5").Value
'Graphique 2
Set cht1 = Worksheets("Graphiques").ChartObjects("Chart 3").Chart
cht1.Axes(xlValue).MinimumScale = wsSource.Range("A31").Value
'Graphique 3
Set cht2 = Worksheets("Graphiques").ChartObjects("Chart 5").Chart
cht2.Axes(xlValue).MinimumScale =wsSource.Range("A58").Value
Lorsqu'il s'agit de feuilles et d'objets range j'ai l'habitude pour avoir eu des surprises en déploiement, d'utiliser des références pleinement qualifiées : Classeur.Feuille.PlageDeCellule
Car à un instant T le classeur actif peut ne pas être le bon et la feuille active peut ne pas être celle qu'on espère.
Peut-etre que mon code de base n'est pas correct.
C'est pour ca que j'explique ce que j'aimerais faire:
Pour différents graphiques dont les données changes en fonction de variables (mois, trimestres, semestres,... )
Les échelles minimales sont stockées et varient donc en fonction de variables plus haut, dans les cellules A5, A31, A58
Ces échelles sont donc utilisées par les graphiques pour ajuster les informations visibles.
La seule chose que j'aimerais c'est que ces calculs se fasse en fond, donc pas de "activate, active, select, "etc...
C'est pour ca que j'ai pensé à la function Set...
Alors peut-être qu'il vous faut référencer la feuille à laquelle appartiennent ces cellules
Range("A31") sans référence de feuille se rapporte à la feuille active à un instant T.
Si pour une raison ou une autre la feuille active change à un instant T au cours de votre macro alors A31 peut ne pas contenir la bonne donnée.
Ou genre With ... End With et les points idoines :
Code:
With ThisWorkbook.Sheets("LaBonneFeuille")
'Graphique 1
Set cht = Worksheets("Graphiques").ChartObjects("Chart 1").Chart
cht.Axes(xlValue).MinimumScale = .Range("A5").Value
'Graphique 2
Set cht1 = Worksheets("Graphiques").ChartObjects("Chart 3").Chart
cht1.Axes(xlValue).MinimumScale = .Range("A31").Value
'Graphique 3
Set cht2 = Worksheets("Graphiques").ChartObjects("Chart 5").Chart
cht2.Axes(xlValue).MinimumScale = .Range("A58").Value
End With
Ou avec variable et déclaration :
Code:
Dim wsSource as WorkSheet
Set wsSource = ThisWorkbook.Sheets("LaBonneFeuille")
'Graphique 1
Set cht = Worksheets("Graphiques").ChartObjects("Chart 1").Chart
cht.Axes(xlValue).MinimumScale = wsSource.Range("A5").Value
'Graphique 2
Set cht1 = Worksheets("Graphiques").ChartObjects("Chart 3").Chart
cht1.Axes(xlValue).MinimumScale = wsSource.Range("A31").Value
'Graphique 3
Set cht2 = Worksheets("Graphiques").ChartObjects("Chart 5").Chart
cht2.Axes(xlValue).MinimumScale =wsSource.Range("A58").Value
Lorsqu'il s'agit de feuilles et d'objets range j'ai l'habitude pour avoir eu des surprises en déploiement, d'utiliser des références pleinement qualifiées : Classeur.Feuille.PlageDeCellule
Car à un instant T le classeur actif peut ne pas être le bon et la feuille active peut ne pas être celle qu'on espère.