XL 2019 Visual Basic: Run-time error '13': Type mismatch

snake21

XLDnaute Nouveau
Bonjour la communauté,

J'ai un petit souci avec le code VB suivant:

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.

Merci d'avance pour vos retours
 

snake21

XLDnaute Nouveau
Oui, ce n'est pas du texte c'est bien un format nombre.
Le code ne marche pas. ;(
Toujours le même problème...

Ce qui est bizarre c'est que cette erreur n'apparait pas à chaque fois que le code est exécuté seulement après quelques occurrences.

Donc selon vous le code est correct? il n'y a pas d'erreur dans le code en lui-même? il ne devrait pas avoir de d'erreur à son exécution?
Re,

Avez-vous vérifié qu'il n'est pas stocké sous forme de texte (un ' apparaît dans la barre de formule excel) ?
Testez :
VB:
.Axes(xlValue).MinimumScale = Cdbl(Range("A31").Value)
Cordialement
 

Hasco

XLDnaute Barbatruc
Repose en paix
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...).
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.

VB:
cht.Axes(xlValue).MinimumScale = ThisWorkbook.Sheets("LaBonneFeuille").Range("A31").Value

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.


Cordialement
 

snake21

XLDnaute Nouveau
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...
 

snake21

XLDnaute Nouveau
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.

VB:
cht.Axes(xlValue).MinimumScale = ThisWorkbook.Sheets("LaBonneFeuille").Range("A31").Value

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.


Cordialement
Merci bcp, j'ai essayé le code avec variable et déclaration...
C'était bien ca... il y avait surement des interférences entre classeur actifs...

Great
 

Discussions similaires

Réponses
7
Affichages
931

Statistiques des forums

Discussions
312 041
Messages
2 084 828
Membres
102 685
dernier inscrit
med_remi021