Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] MAJ echelle toujours de 10 pts en 10 pts

2 réponses
Avatar
twinley
Bonsoir à tous

En suivant une réponse de Nicolas B. "MAJ auto d'échelle",
je pense avoir enterré ma question, je la reformule dans un nouveau fil.

J'ai essayé d'adapter ton code d'échelle calée sur 10pts mais ça bloque.
J'ai déjà cette possibilité de réglage qui fonctionne bien mais elle est
moins élégante que ta sub.

Sub MaJEchelle()
ActiveSheet.ChartObjects("TonGraphique").Chart _
.Axes(xlValue).MaximumScale = 10 ^ Len(CStr(Int( _
WorksheetFunction.Max(Range("B:B")))))
End Sub

Voici ma sub :
Max et Min sont des zones définies dynamiques avec =decaler....etc.

Sub AutoScaleGraph ()
Dim Min, Max, over
' max & min des zones
Max = Int([MAX(Yhigh)])
Min = Int([MIN(Ylow)])
' pour regler l'espace entre le cours et la ligne sup du graph
over = Sheets("Graph1").Range("M1")
'pour avoir une echelle toujours calée de 5pts en 5pts
If Right(Min, 1) = 1 Or Right(Min, 1) = 6 Then Min = Min - 1
If Right(Min, 1) = 2 Or Right(Min, 1) = 7 Then Min = Min - 2
If Right(Min, 1) = 3 Or Right(Min, 1) = 8 Then Min = Min - 3
If Right(Min, 1) = 4 Or Right(Min, 1) = 9 Then Min = Min - 4
Workbooks("flux.xls").Sheets("Graph1").ChartObjects(1).Name = "Graphique
1"
With Workbooks("flux.xls").Worksheets("Graph1").ChartObjects("Graphique
1").Chart.Axes(xlValue)
.MinimumScale = Min
.MaximumScale = Max + over
.MajorUnit = 5
End With
End Sub

J'ai tenté entre autre :
ActiveSheet.ChartObjects("TonGraphique").Chart.Axes(xlValue).MaximumScale =
10 ^ Int([MAX(Yhigh)])

mais XL veut pas. D'ailleurs je suis surpris que tu prennes la chose par le
plus haut. Moi je me cale sur le min.
As tu une idée de ce qui cloche pour remplacer mes 4 if par ta belle fml ?

à+
twinley

2 réponses

Avatar
Nicolas B.
Salut,

Si tu veux appliquer une échelle 10 par 10, il ne faut pas essayer avec les
puissances (le code de la question précédente ne marche donc pas).

Voici une solution :

Sub MaJEchelle()
With ActiveSheet.ChartObjects("Graphique 1").Chart.Axes(xlValue)
.MinimumScale = 10 * (Int(WorksheetFunction.Min(Range("B:B")) _
/ 10) + (Right(Int(WorksheetFunction.Min(Range("B:B"))), 1) = "0"))
.MaximumScale = 10 * (Int(WorksheetFunction.Max(Range("B:B")) _
/ 10) + 1)
End With
End Sub

Pour les cas particuliers : si le minimum est un multiple de 10, l'échelle
débute par le multiple inférieur au minimum. Si le maximum est un multiple
de 10, alors l'échelle s'arrête au multiple suivant.


A+
--
Nicolas B.


twinley nous a écrit
dans le message OD% :
Bonsoir à tous

En suivant une réponse de Nicolas B. "MAJ auto d'échelle",
je pense avoir enterré ma question, je la reformule dans un nouveau
fil.

J'ai essayé d'adapter ton code d'échelle calée sur 10pts mais ça
bloque. J'ai déjà cette possibilité de réglage qui fonctionne bien
mais elle est moins élégante que ta sub.

Sub MaJEchelle()
ActiveSheet.ChartObjects("TonGraphique").Chart _
.Axes(xlValue).MaximumScale = 10 ^ Len(CStr(Int( _
WorksheetFunction.Max(Range("B:B")))))
End Sub

Voici ma sub :
Max et Min sont des zones définies dynamiques avec Þcaler....etc.

Sub AutoScaleGraph ()
Dim Min, Max, over
' max & min des zones
Max = Int([MAX(Yhigh)])
Min = Int([MIN(Ylow)])
' pour regler l'espace entre le cours et la ligne sup du graph
over = Sheets("Graph1").Range("M1")
'pour avoir une echelle toujours calée de 5pts en 5pts
If Right(Min, 1) = 1 Or Right(Min, 1) = 6 Then Min = Min - 1
If Right(Min, 1) = 2 Or Right(Min, 1) = 7 Then Min = Min - 2
If Right(Min, 1) = 3 Or Right(Min, 1) = 8 Then Min = Min - 3
If Right(Min, 1) = 4 Or Right(Min, 1) = 9 Then Min = Min - 4
Workbooks("flux.xls").Sheets("Graph1").ChartObjects(1).Name > "Graphique 1"
With
Workbooks("flux.xls").Worksheets("Graph1").ChartObjects("Graphique
1").Chart.Axes(xlValue) .MinimumScale = Min
.MaximumScale = Max + over
.MajorUnit = 5
End With
End Sub

J'ai tenté entre autre :
ActiveSheet.ChartObjects("TonGraphique").Chart.Axes(xlValue).MaximumScale
= 10 ^ Int([MAX(Yhigh)])

mais XL veut pas. D'ailleurs je suis surpris que tu prennes la chose
par le plus haut. Moi je me cale sur le min.
As tu une idée de ce qui cloche pour remplacer mes 4 if par ta belle
fml ?

à+
twinley


Avatar
twinley
J'ai essayé de changer aussi peu de chose que possible, c'est la raison,
pour laquelle j'ai gardé la puissance en me disant qu'un échelle log n'était
pas gênante pour le test.
Merci pour ta réponse que je vais intégrer dès demain.
Je te donnerai des nouvelles.

Bonsoir

à+
twinley

"Nicolas B." a écrit dans le message de
news:%
Salut,

Si tu veux appliquer une échelle 10 par 10, il ne faut pas essayer avec
les

puissances (le code de la question précédente ne marche donc pas).

Voici une solution :

Sub MaJEchelle()
With ActiveSheet.ChartObjects("Graphique 1").Chart.Axes(xlValue)
.MinimumScale = 10 * (Int(WorksheetFunction.Min(Range("B:B")) _
/ 10) + (Right(Int(WorksheetFunction.Min(Range("B:B"))), 1) = "0"))
.MaximumScale = 10 * (Int(WorksheetFunction.Max(Range("B:B")) _
/ 10) + 1)
End With
End Sub

Pour les cas particuliers : si le minimum est un multiple de 10, l'échelle
débute par le multiple inférieur au minimum. Si le maximum est un multiple
de 10, alors l'échelle s'arrête au multiple suivant.


A+
--
Nicolas B.


twinley nous a écrit
dans le message OD% :
Bonsoir à tous

En suivant une réponse de Nicolas B. "MAJ auto d'échelle",
je pense avoir enterré ma question, je la reformule dans un nouveau
fil.

J'ai essayé d'adapter ton code d'échelle calée sur 10pts mais ça
bloque. J'ai déjà cette possibilité de réglage qui fonctionne bien
mais elle est moins élégante que ta sub.

Sub MaJEchelle()
ActiveSheet.ChartObjects("TonGraphique").Chart _
.Axes(xlValue).MaximumScale = 10 ^ Len(CStr(Int( _
WorksheetFunction.Max(Range("B:B")))))
End Sub

Voici ma sub :
Max et Min sont des zones définies dynamiques avec Þcaler....etc.

Sub AutoScaleGraph ()
Dim Min, Max, over
' max & min des zones
Max = Int([MAX(Yhigh)])
Min = Int([MIN(Ylow)])
' pour regler l'espace entre le cours et la ligne sup du graph
over = Sheets("Graph1").Range("M1")
'pour avoir une echelle toujours calée de 5pts en 5pts
If Right(Min, 1) = 1 Or Right(Min, 1) = 6 Then Min = Min - 1
If Right(Min, 1) = 2 Or Right(Min, 1) = 7 Then Min = Min - 2
If Right(Min, 1) = 3 Or Right(Min, 1) = 8 Then Min = Min - 3
If Right(Min, 1) = 4 Or Right(Min, 1) = 9 Then Min = Min - 4
Workbooks("flux.xls").Sheets("Graph1").ChartObjects(1).Name > > "Graphique 1"
With
Workbooks("flux.xls").Worksheets("Graph1").ChartObjects("Graphique
1").Chart.Axes(xlValue) .MinimumScale = Min
.MaximumScale = Max + over
.MajorUnit = 5
End With
End Sub

J'ai tenté entre autre :

ActiveSheet.ChartObjects("TonGraphique").Chart.Axes(xlValue).MaximumScale


= 10 ^ Int([MAX(Yhigh)])

mais XL veut pas. D'ailleurs je suis surpris que tu prennes la chose
par le plus haut. Moi je me cale sur le min.
As tu une idée de ce qui cloche pour remplacer mes 4 if par ta belle
fml ?

à+
twinley