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 :

Sélection de plusieurs colonnes dans un graphique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 49
    Par défaut Sélection de plusieurs colonnes dans un graphique
    Bonjour le forum

    J'utilise le code ci-dessous proposé par mercatog dans ce forum, je l'ai légèrement modifié pour qu'il s'adapte au nombre de cellule de la colonne.
    Il me permet de générer un graphique après le traitement d'une autre macro.
    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
    Sub Graphique()
    'Macro proposée par mercatog
    Dim Grf As ChartObject
    Dim Sh As Worksheet
     
    Set Sh = Sheets("Feuil1")
    'On supprime tous les graphiques
    For Each Grf In Sh.ChartObjects
        Grf.Delete
    Next Grf
    'On crée notre graphique
    Set Grf = Sh.ChartObjects.Add(620, 30, 500, 200)
    With Grf.Chart
        .ChartType = xlLineMarkers
        .SeriesCollection.NewSeries
        With .SeriesCollection(1)
            .Values = Sh.Range("J2:J" & Range("J" & Cells.Rows.Count).End(xlUp).Row)
            .XValues = Sh.Range("D2:D" & Range("D" & Cells.Rows.Count).End(xlUp).Row)
        End With
    End With
    Set Grf = Nothing
    Set Sh = Nothing
     
    End Sub
    Ce code fonctionne très bien mais je voudrais rajouter une colonne (voir plusieurs autres qui ne sont pas forcement à côté) en .Values.
    XValues resterait sur une colonne unique (D).

    Je voudrais également pouvoir avec cette même macro modifier le nom des courbes qui par défaut s'appellent Série xxxx.

    Je n'arrive pas à solutionner ces deux questions.

    Pouvez-vous m'indiquer des pistes.

    Merci pour votre aide

  2. #2
    Expert éminent 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
    Par défaut
    Bonjour

    Exemple avec 2 séries (colonnes J et P)
    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
    Option Explicit
     
    Sub Graphique()
    Dim Grf As ChartObject
    Dim Sh As Worksheet
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    Set Sh = Worksheets("Feuil1")
    With Sh
        'On supprime tous les graphiques
        For Each Grf In Sh.ChartObjects
            Grf.Delete
        Next Grf
        LastLig = .Range("D" & .Rows.Count).End(xlUp).Row
     
        'On crée notre graphique
        Set Grf = .ChartObjects.Add(620, 30, 500, 200)
    End With
    Set Sh = Nothing
     
    With Grf.Chart
        .ChartType = xlLineMarkers
     
        With .SeriesCollection.NewSeries
            .Name = Sh.Range("J1")
            .XValues = Sh.Range("D2:D" & LastLig)
            .Values = Sh.Range("J2:J" & LastLig)
        End With
     
        With .SeriesCollection.NewSeries
            .Name = Sh.Range("P1")
            .Values = Sh.Range("P2:P" & LastLig)
        End With
    End With
    Set Grf = Nothing
    End Sub
    S'il y a plusieurs séries à ajouter on peut simplifier le code initial en faisant appel à une sous procédure qui se charge du traçage
    (Exemple J, L et Q)
    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
    Option Explicit
     
    Sub Graphique()
    Dim Grf As ChartObject
    Dim Sh As Worksheet
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    Set Sh = Worksheets("Feuil1")
    With Sh
        'On supprime tous les graphiques
        For Each Grf In Sh.ChartObjects
            Grf.Delete
        Next Grf
        LastLig = .Range("D" & .Rows.Count).End(xlUp).Row
        'On crée nos graphiques
        Set Grf = .ChartObjects.Add(620, 30, 500, 200)
    End With
    Set Sh = Nothing
    Grf.Chart.ChartType = xlLineMarkers
     
    TraceSerie Grf.Chart, 10, LastLig                     'colonne 10 J
    TraceSerie Grf.Chart, 12, LastLig                     'colonne 12 L
    TraceSerie Grf.Chart, 17, LastLig                     'colonne 17 Q
    'on peut ajouter tant de colonnes...
     
    Set Grf = Nothing
    End Sub
     
    Private Sub TraceSerie(ByVal Ch As Chart, ByVal Col As Integer, ByVal N As Long)
     
    With Ch.SeriesCollection.NewSeries
        .Name = Ch.Parent.Parent.Cells(1, Col)
        .XValues = Ch.Parent.Parent.Range("D2:D" & N)
        .Values = Ch.Parent.Parent.Cells(2, Col).Resize(N - 1)
    End With
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 49
    Par défaut
    Bonjour mercatog

    Merci pour ta réponse rapide.
    Pour l'instant je teste la première solution qui me génère une erreur d'exécution 91: variable ou objet de bloc with non définie.
    L'erreur se situe ici:
    J'ai déclaré "name" en temps que variable sans succès.
    Je remarque que dans ton code name est écrit Name.
    Dans "mon" code le N est systématiquement ramené à n.

    Merci pour ton aide


    Je viens d'essayer la solution N°2 qui fonctionne sans problème.
    Pour l'instant je ne clos pas le post à cause du petit souci sur la solution N°1.

    Merci

  4. #4
    Expert éminent 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
    Par défaut
    C'est mon manque d'inattention
    Déplace la ligne 20 à la fin du code

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 49
    Par défaut
    effectivement c'est mieux.

    Je vais néanmoins partir sur la solution N°2 qui est vraiment sympathique (sélection "multi" colonnes).

    Dernière question:
    Je voudrais insérer à coté de chaque points la valeur de la cellule correspondante.
    Avec l'enregistreur de macro j'ai abouti à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ActiveSheet.ChartObjects("Graphique 2").Activate
        ActiveChart.FullSeriesCollection(2).Select
        ActiveChart.ClearToMatchStyle
        ActiveChart.ChartStyle = 228
    Celà fonctionne quand on le fait en live mais le bout de code seul ou intégré à la macro ne fonctionne pas.

    Merci encore mercatog

  6. #6
    Expert éminent 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
    Par défaut
    Ajouter .ApplyDataLabels


    Sinon code 2 légèrement modifié
    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
    Sub Graphique()
    Dim Grf As ChartObject
    Dim Sh As Worksheet
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    Set Sh = Worksheets("Feuil1")
    With Sh
        'On supprime tous les graphiques
        For Each Grf In Sh.ChartObjects
            Grf.Delete
        Next Grf
        LastLig = .Range("D" & .Rows.Count).End(xlUp).Row
        'On crée nos graphiques
        Set Grf = .ChartObjects.Add(620, 30, 500, 200)
    End With
    Set Sh = Nothing
    Grf.Chart.ChartType = xlLineMarkers
     
    TraceSerie Grf, 10, LastLig                     'colonne 10 J
    TraceSerie Grf, 12, LastLig                     'colonne 12 L
    TraceSerie Grf, 17, LastLig                     'colonne 17 Q
    'on peut ajouter tant de colonnes...
     
    Set Grf = Nothing
    End Sub
     
    Private Sub TraceSerie(ByVal Ch As ChartObject, ByVal Col As Integer, ByVal N As Long)
     
    With Ch.Chart.SeriesCollection.NewSeries
        .Name = Ch.Parent.Cells(1, Col)
        .XValues = Ch.Parent.Range("D2:D" & N)
        .Values = Ch.Parent.Cells(2, Col).Resize(N - 1)
        .ApplyDataLabels
    End With
    End Sub

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

Discussions similaires

  1. [VBA-E]Sélection de plusieurs colonnes
    Par illight dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 27/11/2017, 23h19
  2. Sélection de plusieurs colonnes dans un IN
    Par Sankasssss dans le forum Langage SQL
    Réponses: 10
    Dernier message: 17/06/2010, 11h44
  3. [VB.Net 2005]Afficher plusieurs colonnes dans un listbox
    Par DonF dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/11/2006, 19h26
  4. Plusieurs colonnes dans CListBox
    Par lio33 dans le forum MFC
    Réponses: 4
    Dernier message: 26/04/2006, 11h14
  5. Lister sur plusieurs colonnes dans état
    Par armagued dans le forum Access
    Réponses: 3
    Dernier message: 30/10/2005, 21h21

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