Insérer une échelle automatique ET symétrique pour les graphiques [Résolu]

Signaler
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
-
SERIEUXETCOOL
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
-
Bonjour le Forum,

Je me pose actuellement une question et j'aimerais savoir si elle serait facilement résolue par VBA.

Par macro je crée mon graphique et je définis les échelles en automatique. Jusque la tout va bien. La contrainte suivante que je souhaite imposer est de faire en sorte que l'échelle soit symétrique et centrée sur 0.

Par exemple je veux que mon axe principal en ordonnée soit en automatique et qu'il indique +10/-10 s'il détecte que la plus grande valeur absolue est 10.

J'aimerais faire de même pour mon axe secondaire des ordonnées.

Comment pourrait-on s'y prendre ?

(Je pense qu'il faut essayer de récupérer la valeur absolue des extremums, puis chercher qu'elle est la plus grande, puis appliquer cette valeur une fois en positif et une autre fois en négatif)


Merci à ceux qui voudront bien essayer de m'aider.


Bien cordialement,

André

9 réponses

Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Bonsoir le Forum,

Je reviens clore la discussion sur mon idée de mise en place d'échelle automatique et automatiquement centrée pour les graphiques.

Après y avoir passé un peu de temps, voici la solution que j'ai mis en place et qui me satisfait pleinement du coup.

    Dim Valmin As Double, Valmax As Double
    Valmin = -Application.WorksheetFunction.Max(ActiveChart.Axes(xlValue).MaximumScale, Abs(ActiveChart.Axes(xlValue).MinimumScale))
    Valmax = Application.WorksheetFunction.Max(ActiveChart.Axes(xlValue).MaximumScale, Abs(ActiveChart.Axes(xlValue).MinimumScale))
    ActiveChart.Axes(xlValue).MinimumScale = Valmin
    ActiveChart.Axes(xlValue).MaximumScale = Valmax



Et voila, c'était pas si méchant si on s'y plonge la tête. Je suis content de moi. Merci à vous tous pour l'aide apportée.

Passez une bonne soirée et j'espère que sa servira à d'autres.

Bien cordialement,

André
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

Pourquoi ne pas faire simplement ?
ActiveChart.Axes(xlValue).MaximumScale = Application.WorksheetFunction.Max(ActiveChart.Axes(xlValue).MaximumScale, Abs(ActiveChart.Axes(xlValue).MinimumScale))
ActiveChart.Axes(xlValue).MinimumScale=-ActiveChart.Axes(xlValue).MaximumScale


---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Personne n'aurait une petite idée ou je me suis mal exprimé peut-être ?

N'hésitez pas à me demander plus d'infos si besoin est.

André
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

Je pense qu'en faisant un Max et un Min (voir WorkSheeetFunctions), tu pourras connaitre les bornes.

Ensuite pour l'échèle, voir avec l'enregistreur de macro.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Bonsoir NHenry,

C'est la conclusion sur laquelle je suis arrivé. Je pense que je vais essayer de me bricoler un truc tout seul.

Je pensais essayer de récupérer la valeur de l'échelle automatique pour le maximum ET le minimum. Ensuite de faire une valeur absolue sur ces 2 valeurs et de comparer laquelle est la plus grande.
Pour finir j'applique cette valeur à mon axe en positif ET négatif.

Évidement, dis comme ça, c'est simple. Mais à coder, ça l'est plus du tout.

Si quelqu'un a un début de code pour m'aider, ce serait sympa. Au moins pour me lancer sur la voie...


Merci en tout cas.

André

Bonjour Serieux,
Je relis ton titre: Insérer une échelle automatique...
Pourquoi tu ne mets pas un ascenseur? (désolé)

J'ai vu un site qui pourrait peut-être t'aider:
SUR CE LIEN

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Merci pour le lien il peut me servir en effet.

Qu'appelle tu mettre un ascenseur ?

Je vais me coucher il est tard pour moi maintenant...

Non, mais je plaisantais quand je parlais de l’ascenseur... tu parlais d’échelle et moi d'ascenseur, ça m'a pris comme ça

Oui en effet, il y a pas mal de sujets et c'est bien expliqué, je vais le garder ce site.


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Merci à toi NHenry pour la petite correction.

J'avais au tout début pratiquement fait la même chose que toi avec ce code la :

ActiveChart.Axes(xlValue).MaximumScale = Application.WorksheetFunction.Max(ActiveChart.Axes(xlValue).MaximumScale, Abs(ActiveChart.Axes(xlValue).MinimumScale))
ActiveChart.Axes(xlValue).MinimumScale=-Application.WorksheetFunction.Max(ActiveChart.Axes(xlValue).MaximumScale, Abs(ActiveChart.Axes(xlValue).MinimumScale))


Sa fonctionnait un peu mais pas tout le temps. J'ai vite compris pourquoi ça ne fonctionnait pas. Les membres situés à droite du égal sont des variables et non des constantes. C'est pourquoi j'ai ensuite voulu forcé le stockage dans une constante avec Valmax et Valmin.

J'aurais du tilter plus rapidement, et atterrir sur la même proposition que toi. Je m'en veux pour le coup. C'était tout bête. Les membres à gauche du égal sont déjà mes constantes^^. Mais au moins c'est parfaitement logique dans ma tête grâce à toi.

Donc merci.

André

Ps : Modifs testées et approuvées