Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création automatique d'un graphique en VBA

Affectation des valeurs aux axes

Sujet résolu
    26 mai 2016 à 15:43:15

    Bonjour à tous, 

    Je fais appel à votre aide pour un problème qui est sûrement pourtant basique.

    Je souhaite créer via VBA un graphique représentant l'évolution d'un nombre de programmes par rapport à l'année. Pour cela, je traite une liste de programmes et leur année de lancement, et écrit dans des colonnes cachées chaque année et le nombre de programmes correspondants. Si cette première partie d'extraction marche sans problème, je n'arrive pas à créer un graphique en colonnes avec les années en abscisses et le nombre de programmes en ordonnées : les deux colonnes sont considérées comme deux séries distinctes, et tracées en fonction de valeurs croissantes de 1 à 9. 

    Pourriez-vous m'aider ?

    Ci-joint mon code actuel (je débute en VBA, il est très simpliste :D)

    Sub statistique()
    
    'Ecrit les différentes années dans la colonne K
        Dim i As Integer
        Dim k As Integer
        k = 2
        
        For i = 3 To 22
            'Si l'année écrite est différente de la précédente, alors on l'écrit dans la colonne K
            If Range("E" & i).Value <> Range("E" & i - 1).Value Then
                Range("K" & k).Value = Range("E" & i).Value
                k = k + 1
            End If
        Next
        
    'Compte le nombre de programmes par an et les écrit dans la colonne L
        Dim l As Integer
        
        For l = 2 To 10
            Range("L" & l) = WorksheetFunction.CountIf(Range("E3:E22"), Range("K" & l))
        Next
        
    'Cache les colonnes K et L
        'Columns("K:L").Hidden = True
        
    'Génère un graphique nombre de programmes/an
        Range("K2:L10").Select
        ActiveSheet.Shapes.AddChart.Select
              
    End Sub
    

    Merci de votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
      26 mai 2016 à 18:31:54

      Yo voila deux exemple (même selection et ce que tu aimerais faire c'est la 2nd celle avec seulement les points c'est sa ?

      http://www.noelshack.com/2016-21-1464289582-capture.png
      http://www.noelshack.com/2016-21-1464289633-nouvelle-image-bitmap.png

      tu dis juste que c'est un nuage de point en lui donnant comme valeur de plage =Feuil1!$A:$A (avec seulement la ligne sans la colonne ^^)

      ha au faite ce n'est pas parce que c'est une serie de point que tu ne peux les relier ^^

      -
      Edité par Maxime Leblond 26 mai 2016 à 21:08:03

      • Partager sur Facebook
      • Partager sur Twitter
        27 mai 2016 à 8:57:19

        Non, je voudrais le faire sous forme de graphique en barres... Merci de ta réponse :)

        En utilisant l'enregistreur de macro, j'ai adapté un code qui me fait ce que je veux. Seul problème : ça ne marche qu'avec le Graphique 43. Comment pourrais-je le modifier pour qu'il adapte la taille quel que soit le nom du graphique ? 

        'Création et positionnement du graphique
            ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
            ActiveSheet.Shapes("Graphique 43").IncrementLeft 500
            ActiveSheet.Shapes("Graphique 43").IncrementTop 50
            
        'Affectation valeurs abscisses et ordonnées
            ActiveChart.SeriesCollection.NewSeries
                With ActiveChart.FullSeriesCollection(1)
                    .Name = "=""Evolution du nombre de programmes en fonction de l'année"""
                    .Values = "=Test_programmes!$L$2:$L$10"
                    .XValues = "=Test_programmes!$K$2:$K$10"
                End With
                
        'Choix échelle
            With ActiveChart.Axes(xlValue)
                .MaximumScale = 4
                .MajorUnit = 1
            End With

        -
        Edité par LeïlaOllivier 27 mai 2016 à 9:02:15

        • Partager sur Facebook
        • Partager sur Twitter
          27 mai 2016 à 10:33:42

          tu peux me montrer une image de ce que tu veux obtenir a la fin j'ai du mal a voir

          puis graphique 43 ne m'aide pas du tout ><

          Ha et pourquoi obligatoirement VBA ?

          -
          Edité par Maxime Leblond 27 mai 2016 à 10:34:40

          • Partager sur Facebook
          • Partager sur Twitter
            27 mai 2016 à 14:02:43

            Voilà ce que je voudrais obtenir. "Graphique 43" a été créé par l'enregistrement de la macro, je voudrais justement pouvoir générer ce graphique juste en cliquant sur un bouton (d'où l'utilisation de VBA).
            Ma question était donc, comment faire pour créer un graphique tel que celui ci-dessus en n'utilisant pas ce nom spécifique amené par l'enregistrement de la macro ? Comment paramétrer la position du graphique sans utiliser un nom particulier (lignes 3 et 4) ?
            • Partager sur Facebook
            • Partager sur Twitter
              27 mai 2016 à 14:24:17

              Bonjour,

              La fonction AddChart2() renvoie un objet Shape qui représente le graphique créé. Il te suffit de le récupérer dans une variable, et tu peux alors faire le traitement que tu veux dessus.

              Dim monGraphique as Shape
              Set monGraphique = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered)
              monGraphique.IncrementLeft 500
              monGraphique.IncrementTop 50
              • Partager sur Facebook
              • Partager sur Twitter
                27 mai 2016 à 16:05:19

                Bonjour, 

                Merci beaucoup de ta réponse Sarkas !  

                Je t'embête encore un peu, car j'arrive pas à mettre en forme mon graphique : comme il est de type Shape, et que SeriesCollection est un Objet, je n'arrive pas à assigner mes valeurs afin de les afficher... 

                Faut-il utiliser une autre méthode qu'avec SeriesCollection ? Je suis repartie du code de l'enregistreur de macro, quelques posts plus haut.

                • Partager sur Facebook
                • Partager sur Twitter
                  27 mai 2016 à 17:23:02

                  N'hésite pas à regarder dans l'aide d'Excel pour avoir ce genre d'informations, elle est très bien faite. Sur SeriesCollection , il est indiqué qu'il lui faut un objet Chart. Sur Shape, on peut voir qu'il possède justement une propriété Chart. Tu peux donc accéder à la collection des séries du graphique comme ceci:

                  monGraphique.Chart.SeriesCollection

                  Il en sera de même pour FullSeriesCollection et Axes.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 mai 2016 à 8:56:37

                    Je n'avais pas vu cette propriété Chart sur l'aide d'Excel. Merci beaucoup à toi !
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 décembre 2018 à 14:22:03

                      Bonjour je suis nouveau en VBA aussi, et je rencontre un problème équivalent. J'ai un problème de définition d'objet avec mon code: 

                      Dim monGraphique As Shape

                      Set monGraphique = ActiveSheet.Shapes.AddChart2(290, xl3DColumnClustered).Select        (erreur objet sur cette ligne en particulier)

                         monGraphique.IncrementLeft 270

                         monGraphique.IncrementTop 27

                        '  Application.CutCopyMode = False

                        '  Application.CutCopyMode = False

                        '  Application.CutCopyMode = False

                        '  Application.CutCopyMode = False

                        '  Application.CutCopyMode = False

                        'Affectation valeurs abscisses

                          monGraphique.Chart.SeriesCollection.NewSeries

                          monGraphique.Chart.FullSeriesCollection(1).Name = "=Feuil2!$B$15"

                          monGraphique.Chart.FullSeriesCollection(1).Values = "=Feuil2!$B$16:$B$27"

                          monGraphique.Chart.SeriesCollection.NewSeries

                          monGraphique.Chart.FullSeriesCollection(2).Name = "=Feuil2!$D$15"

                          monGraphique.Chart.FullSeriesCollection(2).Values = "=Feuil2!$D$16:$D$27"

                          monGraphique.Chart.FullSeriesCollection(2).XValues = "=Feuil2!$A$16:$A$26"

                          monGraphique.Chart.FullSeriesCollection(2).XValues = "=Feuil2!$A$16:$A$27"

                          monGraphique.ClearToMatchStyle

                          monGraphique.ChartStyle = 294

                      Merci infiniment à la personne qui pourrait m'aider. 
                      Cordialement, 
                      Dylan 
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Création automatique d'un graphique en VBA

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown