Mise en forme de l'axe d'un graphique Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
d
demonsares
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 9 août 2015
Version d'Excel : 2010

Message par demonsares » 13 décembre 2016, 13:52

Bonjour à toutes, à tous et le forum,

Je suis en train de réaliser une macro. Actuellement tout ce passe très bien.
Mais j'ai un soucis, je dois réaliser des graphiques via une macro. Cela fonctionne.
Mais je souhaite ajuster les valeurs minimale et maximale de l'axe des X.
Pour cela j'ai une macro :
Sheets("Données ciblées").Select

Lig2 = 1
While Cells(Lig2, 1).Value <> ""
    NumLig2 = NumLig2 + 1
    Lig2 = Lig2 + 1
Wend

Sheets("Graphique ciblé " & i).Select

    ActiveChart.ChartArea.Select
    ActiveChart.Axes(xlCategory).Select
    ActiveChart.Axes(xlCategory).MinimumScale = Sheets("Données ciblées").range("E2").Value
    ActiveChart.Axes(xlCategory).MaximumScale = Sheets("Données ciblées").range("E479").Value
Lorsque je place E479, mes 7 graphiques sont bien réajustés par rapport à la valeur en E479.
Mais cette ligne peut varier. J'ai donc écrit le programme suivant :
Sheets("Données ciblées").Select

Lig2 = 1
While Cells(Lig2, 1).Value <> ""
    NumLig2 = NumLig2 + 1
    Lig2 = Lig2 + 1
Wend

Sheets("Graphique ciblé " & i).Select

    ActiveChart.ChartArea.Select
    ActiveChart.Axes(xlCategory).Select
    ActiveChart.Axes(xlCategory).MinimumScale = Sheets("Données ciblées").range("E2").Value
    ActiveChart.Axes(xlCategory).MaximumScale = Sheets("Données ciblées").Cells(NumLig2,5).Value
Avec cette formulation
Cells(NumLig2,5).Value
qui doit être sous cette forme, j'arrive à modifier l'axe X de mon premier graphique, mais les N autres graphiques ne sont pas modifiés.
d
demonsares
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 9 août 2015
Version d'Excel : 2010

Message par demonsares » 21 décembre 2016, 14:18

UP

J'ai posé :
Sheets("Données ciblées").Select

Lig2 = 1
While Cells(Lig2, 1).Value <> ""
    NumLig2 = NumLig2 + 1
    Lig2 = Lig2 + 1
Wend

Sheets("Graphique ciblé " & i).Select

ActiveChart.ChartArea.Select
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).MinimumScale = Sheets("Données ciblées").range("E2").Value
ActiveChart.Axes(xlCategory).MaximumScale = Sheets("Données ciblées").range("E" & NumLig2).Value
Cela ne fonctionne toujours pas...
Le premier graphique c'est OK, mais les suivants non...
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'736
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 21 décembre 2016, 15:13

Bonjour,
Merci de joindre un fichier à ta demande.
Cdlt.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
d
demonsares
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 9 août 2015
Version d'Excel : 2010

Message par demonsares » 21 décembre 2016, 15:30

Le fichier est trop lourd même en compressant avec WinRAR je suis à 1378KO
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'736
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 21 décembre 2016, 15:53

Re,
Trouve une solution pour réduire la taille de ton fichier, mais qu'il soit représentatif de ta réalité.
Tu peux aussi utiliser ce lien pour joindre un fichier : http://www.cjoint.com/
Cdlt
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
d
demonsares
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 9 août 2015
Version d'Excel : 2010

Message par demonsares » 21 décembre 2016, 16:07

Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'736
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 21 décembre 2016, 19:55

Re,
Un début de réponse, mais j'ai travaillé sur les graphiques issus de la feuille Analyse des données. :oops:
Travaille sur une copie de ton fichier.
Supprime les graphiques issus de cette feuille et copie cette procédure dans un module standard.
A te relire.
Cdlt.
Option Explicit

Public Sub Create_Charts_1()
Dim wb As Workbook
Dim ws As Worksheet, wsData As Worksheet, newWS As Worksheet
Dim lCol As Long, lastRow As Long
Dim rngData As range, rng_X As range, rng_Y As range
'Dim min_x As Double, max_x As Double
Dim min_y As Double, max_y As Double
Dim objChart As ChartObject

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("Analyse des données")

    On Error Resume Next
    For Each ws In wb.Worksheets
        If Left(ws.Name, 3) = "RG_" Then ws.Delete
    Next ws
    On Error GoTo 0

    Application.DisplayAlerts = True

    With wsData
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set rng_X = .Cells(2, 5).Resize(lastRow)
        'min_x = WorksheetFunction.Min(rng_X)
        'max_x = WorksheetFunction.Max(rng_X)
        Set rngData = .Cells(2, 6).Resize(lastRow - 1, 7)
        'min_y = WorksheetFunction.Min(rngData)
        max_y = WorksheetFunction.Max(rngData)
        For lCol = 6 To 12
            Set rng_Y = .Cells(2, lCol).Resize(lastRow - 1)
            Set newWS = wb.Worksheets.Add(after:=Worksheets(Worksheets.Count))
            With newWS
                .Name = "RG_" & wsData.Cells(1, lCol).Value
                Set objChart = .ChartObjects.Add(.Cells(2, 2).Left, .Cells(2, 2).Top, 700, 450)
                objChart.Name = "RG_" & wsData.Cells(1, lCol).Value
                With objChart.Chart
                    .ChartType = xlXYScatterLines
                    .SeriesCollection.NewSeries
                    .SeriesCollection(1).Name = "RG " & wsData.Cells(1, lCol).Value
                    .SeriesCollection(1).XValues = rng_X
                    .SeriesCollection(1).Values = rng_Y
                    .HasLegend = False
                    .Axes(xlCategory).MinimumScale = 0
                    .Axes(xlCategory).MaximumScaleIsAuto = True
                    .Axes(xlValue).MinimumScale = 0
                    .Axes(xlValue).MaximumScale = max_y * 1.1
                End With
            End With
        Next lCol
    End With

    With wsData
        .Activate
        .Cells(1).Select
    End With

    Set objChart = Nothing
    Set rng_Y = Nothing: Set rng_X = Nothing: Set rngData = Nothing
    Set newWS = Nothing: Set wsData = Nothing
    Set wb = Nothing

End Sub
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
d
demonsares
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 9 août 2015
Version d'Excel : 2010

Message par demonsares » 22 décembre 2016, 08:18

Merci Jean-Eric mais concernant mes graphiques "Analyse des données" ils fonctionnent très bien...
Et le problème avec ton code c'est que je n'en comprend pas plus de 40%. Mon seul soucis était la cellule variable à intégrer dans cette ligne de code :
ActiveChart.Axes(xlCategory).MaximumScale = Sheets("Données ciblées").range("E" & NumLig2).Value


Pour les graphiques ciblées et non les graphiques
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'736
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 22 décembre 2016, 10:43

Bonjour,
La nouvelle procédure pour les graphiques ciblées.
Exécute la procédure Create_Charts_2 du fichier joint.
A te relire pour commenter les résultats. Les explications viendront après (je commenterai le code).
Cdlt.
http://www.cjoint.com/c/FLwjRm20hlj
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
d
demonsares
Jeune membre
Jeune membre
Messages : 37
Inscrit le : 9 août 2015
Version d'Excel : 2010

Message par demonsares » 22 décembre 2016, 10:53

FANTASTIQUE !!!

Blocage de ***** de l'entreprise...
Je ne peux pas DownLoad ton fichier Jean-Eric...
Je le ferais ce soir du coup :/

Tu as donc réussit à créer les graphiques ciblées et formater l'axe selon une variable ?
Je pense que tu dois t'arracher les cheveux en voyant mon code...
Mais n'ayant pas eu de cours dans ce domaine et étant en autonomie total (j'apprends à mes collègues à utiliser Paint, tu vois le niveau), j'utilise souvent l'enregistreur de macro puis j'adapte avec les variables et formulations que je connais.
Il y a donc beaucoup de .Select etc mais bon, tant que ça fonctionne ^^

En tout cas, merci de t'investir et de m'aider !
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message