Insérer une échelle automatique ET symétrique pour les graphiques

Résolu
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 - 10 mai 2012 à 11:29
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 - 22 mai 2012 à 11:02
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

SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
21 mai 2012 à 18:34
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é
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
21 mai 2012 à 19:51
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
3
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
10 mai 2012 à 15:08
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é
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
11 mai 2012 à 22:17
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 mai 2012 à 00:02
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é
0
Utilisateur anonyme
12 mai 2012 à 02:46
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
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 mai 2012 à 03:36
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...
0
Utilisateur anonyme
12 mai 2012 à 14:20
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
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
22 mai 2012 à 11:02
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
0
Rejoignez-nous