IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Enlever les graduations négatives sur un axe graphique [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut Enlever les graduations négatives sur un axe graphique
    bonjour,

    j'ai un graphique composé de 2 axes primaires, l'un présentant les montants financiers (axe primaire), l'autre présentant un nombre d'incidents (axe secondaire). Pour l'axe secondaire, je souhaiterai ne pas faire apparaître les graduation avec des nombres négatifs.

    Quel solution puis-je réaliser en vba ?
    ci-joint une partie du code de construction du graphe sur l'axe secondaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        ...
        ActiveSheet.ChartObjects(paramTCD(10)).Activate
        ActiveChart.Axes(xlValue, xlSecondary).Select
        ActiveChart.Axes(xlValue, xlSecondary).MinimumScale = -v_Axe2_Max
        ActiveChart.Axes(xlValue, xlSecondary).MaximumScale = v_Axe2_Max
        ActiveChart.Axes(xlValue, xlSecondary).MajorUnit = v_Axe2_MajorUnit
        ActiveChart.Axes(xlValue, xlSecondary).CrossesAt = 0
        ....
    en vous remerciant par avance pour votre retour

  2. #2
    Membre régulier Avatar de Fluch
    Homme Profil pro
    Méthodiste flux
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Méthodiste flux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 81
    Points
    81
    Par défaut Ne pas voir les valeurs négatives
    Avec les informations données, je ne pense qu'il soit utile d'utiliser du code.
    Peut-être faut-il simplement filtrer les données du graphique.
    Fluch

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    En fait, j'ai développé une macro qui génère automatiquement des graphes standards. afin d'affiner d'un point de vue fonctionnelle le contenu du graphe, il est demandé sur l'axe des nombres d'effacer les graduations négatives car cela n'a aucun sens.

    Si vous avez de plus de précision, n'hésitez pas à me les demander

  4. #4
    Membre régulier Avatar de Fluch
    Homme Profil pro
    Méthodiste flux
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Méthodiste flux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 81
    Points
    81
    Par défaut Demande informations supplémentaires
    Pourquoi associes-tu la variable -v_Axe2_Max à MinimumScale ? Existe-t-il une variable v_Axe2_Min qui découlerait de la valeur la plus faible de tes données ?
    J'essais de comprendre.
    Fluch

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    en fait j'utilise une variable v_Axe2_Max car pour l'axe secondaire de mon graphe ( présentation de nombre), je ne sais pas au départ le nombre d'incident que j'ai. Je l'identifie à travers la lecture de mon TCD.
    Dans mon TCD, par exemple, j'ai les valeurs suivantes :
    Domaine Fonction Nombre
    xxxxxxxx1 1
    xxxxxxxx2 29
    xxxxxxxx3 43
    xxxxxxxx4 16
    xxxxxxxx5 30
    xxxxxxxx6 35
    xxxxxxxx7 205
    xxxxxxxx8 9
    xxxxxxxx9 3
    xxxxxxxx10 12
    xxxxxxxx11 10
    xxxxxxxx12 109
    xxxxxxxx13 295
    xxxxxxxx14 3
    xxxxxxxx15 34
    xxxxxxxx16 13
    xxxxxxxx17 10
    xxxxxxxx18 11
    xxxxxxxx19 23
    xxxxxxxx20 8
    xxxxxxxx21 28
    xxxxxxxx22 22
    xxxxxxxx23 3
    pour construire mon axe secondaire, ma valeur v_Axe2_Max sera 295. Je crée en plus 5 divisions en positifs et négatifs pour être à l'identique avec le nombre de division de l'axe primaire. Je vais donc avoir des graduations avec un pas de 59. les valeurs seront : 0,59,118, 177, 236, 295 et en dessous de l'axe des abscisses, j'aurai -59,-118,-177,-236,-295. Je cherche donc à cacher ces dernières valeurs qui n'ont aucun sens fonctionnellement.

    Merci pour votre aide

  6. #6
    Membre régulier Avatar de Fluch
    Homme Profil pro
    Méthodiste flux
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Méthodiste flux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 81
    Points
    81
    Par défaut On continue
    Je ne dois pas tout comprendre, ce serait facile de fixer l'échelle minimum à 0 pour que les valeurs négatives n'apparaissent pas.
    Fluch

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    merci pour votre aide.
    En dehors de l'axe secondaire construit comme précisé dans mon dernier message, j'ai aussi sur le même graphe un axe primaire contenant des montants financiers qui eux peuvent être à la fois positifs et négatifs.
    voir l'exemple fictif d'un graphe

    cordialement
    Images attachées Images attachées  

  8. #8
    Membre régulier Avatar de Fluch
    Homme Profil pro
    Méthodiste flux
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Méthodiste flux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 81
    Points
    81
    Par défaut On continue
    J'ai essayé de forcé à 0 un des axes pour écrêter les valeurs négatives. Sur le deuxième axe, toutes les valeurs apparaissent négatives ou positives.
    L'objectif est-il atteint ? ...
    Fichiers attachés Fichiers attachés
    Fluch

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour Flush,
    Merci pour ton aide. L'objectif est bien d'avoir des valeurs positives et négatives sur l'axe de gauche du graphique (montant ) et sur l'axe de droite ( nombre), des valeurs uniquement positives. Donc, sur le fichier excel joint, il faut que les valeurs -5,-10,-15 ne soient pas visibles sur le graphe.
    Merci pour votre aide
    Fichiers attachés Fichiers attachés

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    Meilleurs voeux 2013 à toute la communauté des développeurs vba sous excel.
    Auriez-vous une idée à me proposer ?

    Merci pour votre aide.

  11. #11
    Membre régulier Avatar de Fluch
    Homme Profil pro
    Méthodiste flux
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Méthodiste flux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 81
    Points
    81
    Par défaut
    Hello,
    Je n'arrive pas à saisir ce qu'il manque à ma dernière réponse qui puisse compléter ton besoin.
    Ci_joint un fichier avec une autre présentation :
    les montants de -200 à +400 sont tous visibles et l'échelle est à gauche.
    les valeurs de -3 à +5 sont visibles uniquement si elles sont positives et l'echelle qui est à droite écrête avec un mini de 0.
    Fichiers attachés Fichiers attachés
    Fluch

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjor Fluch,
    Merci encore pour ton aide.
    En fait, dans le précédent fichier, je me suis trompé sur l'axe secondaire. Tu trouveras joint ce que je souhaitais. le 0 de l'axe secondaire se trouve au niveau du 0 de l'axe principale ( celui des montants ). Par contre, je souhaitais faire disparaître les graduations négatives ( impossible pour des nombres ) ainsi sur le tableau excel, je souhaite cacher les valeurs fictives -2, -4, -6.

    J'espère que mon besoin est plus clair.
    A bientôt
    Fichiers attachés Fichiers attachés

  13. #13
    Membre régulier Avatar de Fluch
    Homme Profil pro
    Méthodiste flux
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Méthodiste flux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 81
    Points
    81
    Par défaut Test valeur point pour le rendre invisible si inférieure à zéro
    Hello,
    Et si on rendait simplement visible ou non les points après avoir testé leur valeur.

    Pour l'échelle, il a été nécessaire de calculer le rapport des autres échelles pour que les zéros tombent en face

    Il faudra que tu adaptes le code à ton application...

    A+

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Private Sub CommandButton1_Click()
     
        Dim p As Point
        Dim t As String
        t = 0
        minigauche = 0
        maxigauche = 0
        minidroite = 0
        maxigauche = 0
        gauche = 0
        droite = 0
     
    For Each p In Worksheets("Feuil1").ChartObjects("Graphique 1").Chart.SeriesCollection(2).Points
        t = t + 1
     
        ActiveSheet.ChartObjects("Graphique 1").Activate
        ActiveChart.SeriesCollection(2).Points(t).Select
     
        gauche = Application.Index(Worksheets("Feuil1").ChartObjects("Graphique 1").Chart.SeriesCollection(1).Values, t)
        droite = Application.Index(Worksheets("Feuil1").ChartObjects("Graphique 1").Chart.SeriesCollection(2).Values, t)
        If droite > maxidroite Then maxidroite = droite
     
    'test valeur négative
        If Application.Index(Worksheets("Feuil1").ChartObjects("Graphique 1").Chart.SeriesCollection(2).Values, t) >= 0 Then
            Selection.MarkerStyle = 2
            Selection.MarkerBackgroundColorIndex = 46
            SV = "true"
        Else
            Selection.MarkerStyle = xlNone
            SV = "false"
        End If
     
    'rendre visible : invisible l'étiquette
        ActiveChart.SeriesCollection(2).Points(t).ApplyDataLabels AutoText:=True, _
            LegendKey:=False, ShowSeriesName:=False, ShowCategoryName:=False, _
            ShowValue:=SV, ShowPercentage:=False, ShowBubbleSize:=False
     
    Next p
    maxigauche = ActiveChart.Axes(xlValue, xlPrimary).MaximumScale
    minigauche = ActiveChart.Axes(xlValue, xlPrimary).MinimumScale
    maxidroite = Fix(maxidroite * 1.2)
     
    If CheckBox1 = 0 Then minigauche = 0
     
        ActiveChart.Axes(xlValue, xlSecondary).Select
        With ActiveChart.Axes(xlValue, xlSecondary)
            .MaximumScale = maxidroite
            .MinimumScale = minigauche * maxidroite / maxigauche
        End With
     
    Cells(1, 1).Select
    End Sub
    Fichiers attachés Fichiers attachés
    Fluch

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonsoir,
    Merci beaucoup Flush. J'apprends également d'autres formes de présentation.
    Mais pour préciser le besoin des utilisateurs, j'ai repris l'option 0 échelle droite et ait caché par une image les valeurs négatives des nombres

    Le résultat est présenté dans le fichier joint

    Je ne sais pas s'il est facile de générer du code qui permette de faire la même action que l'image qui cache les chiffres négatifs de l'échelle de droite du graphique.

    Merci encore pour ton aide
    Fichiers attachés Fichiers attachés

  15. #15
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je ne sais pas s'il est facile de générer du code qui permette de faire la même action que l'image qui cache les chiffres négatifs de l'échelle de droite du graphique.
    Pour cacher les graduations négatives de l'axe secondaire, il suffit de mettre une mise en forme personnalisée de type [>=0]#,##0;"" sur cet axe.

    Sinon, ci-après code pour générer le graphique basé sur les données de ton fichier (ta dernière version)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Sub GraphiqueSpecial()
    Dim NomY As String, NomZ As String
    Dim LastLig As Long, i As Long
    Dim M As Double, N As Double
    Dim Grf As ChartObject
    Dim X, Y, Z
     
    Application.ScreenUpdating = False
    With Feuil1
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        With .Range("A8:A" & LastLig)
            X = .Value
            Y = .Offset(0, 1).Value
            NomY = .Offset(-1, 1)(1, 1)
            N = Application.Max(Abs(Application.Min(.Offset(0, 1))), Application.Max(.Offset(0, 1)))
     
            Z = .Offset(0, 2).Value
            NomZ = .Offset(-1, 2)(1, 1)
            M = Application.Max(.Offset(0, 2))
        End With
        Set Grf = .ChartObjects.Add(200, 100, 500, 300)
    End With
     
    For i = 1 To UBound(Z, 1)
        If Z(i, 1) < 0 Then Z(i, 1) = -1 - M
    Next i
     
    With Grf.Chart
        .ChartType = xlLineMarkers
        With .SeriesCollection.NewSeries
            .Name = NomY
            .XValues = X
            .Values = Y
            .Format.Line.Visible = msoFalse
            .MarkerSize = 8
            .MarkerStyle = 2
        End With
     
        With .Axes(xlValue, xlPrimary)
            .MinimumScale = -1 * N
            .MaximumScale = N
        End With
     
        With .SeriesCollection.NewSeries
            .Name = NomZ
            .Values = Z
            .Format.Line.Visible = msoFalse
            .MarkerSize = 8
            .MarkerStyle = 2
            .AxisGroup = 2
        End With
     
        With .Axes(xlValue, xlSecondary)
            .MinimumScale = -1 * M
            .MaximumScale = M
            .TickLabels.NumberFormat = "[>=0]#,##0;"""""
        End With
    End With
    Set Grf = Nothing
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  16. #16
    Membre régulier Avatar de Fluch
    Homme Profil pro
    Méthodiste flux
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Méthodiste flux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 81
    Points
    81
    Par défaut Mix avec Mercatog
    En ajoutant le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .TickLabels.NumberFormat = "[>=0]#,##0;"""""
    cela fonctionne.

    L'objectif est-il atteint ?
    Fichiers attachés Fichiers attachés
    Fluch

  17. #17
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    bonjour Fluch

    Bravo. c'est tout à fait cela.
    Merci beaucoup

    je clos le sujet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Graphique : graduations qui se superposent sur l'axe des x et superposition légende/courbe
    Par Clacla21 dans le forum Calcul scientifique
    Réponses: 12
    Dernier message: 17/11/2014, 08h36
  2. Réponses: 1
    Dernier message: 27/09/2014, 15h00
  3. semilogX + mettre les valeurs réelles sur l'axe
    Par valarko dans le forum MATLAB
    Réponses: 7
    Dernier message: 07/07/2010, 12h01
  4. enlever les espace sur un champ texte
    Par lazzeroni dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/09/2006, 13h41
  5. [JUnit] Les tests sur des interfaces graphiques
    Par adilo dans le forum Tests et Performance
    Réponses: 5
    Dernier message: 01/02/2006, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo