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 :

Double le nombre de série lors de la création d'un graphique [XL-2016]


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
    Chef de projet
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Par défaut Double le nombre de série lors de la création d'un graphique
    Bonjour, et bonne année à toutes et à tous

    Je viens de créer une macro qui me permet de générer un graphique sur la feuille sélectionné.
    Il ne retourne aucune erreur, mais il créé 2 fois plus de série que nécessaire, la première moitié avec ce que je veux, l'autre moitié vide de donnée.

    Voici le code
    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
    Sub CreationGraph()
    	Dim i, LastCol, LastRow As Integer
    	Dim NomFeuille As String
     
    	LastCol = ActiveSheet.Cells(1, Columns.Count).End(xltoLeft).Column
    	LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    	NomFeuille = ActiveSheet.Name
     
    	ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
     
    	For i = 2 to LastCol
    		ActiveChart.SeriesCollection.NewSeries
    		ActiveChart.FullSeriesCollection(i - 1).Name = "='" & NomFeuille & "'!$" & Col2Let(i) & "$1"
    		ActiveChart.FullSeriesCollection(i - 1).XValues = "='" & NomFeuille & "'!$A$2:$A$" & LastRow
    		ActiveChart.FullSeriesCollection(i - 1).Values = "='" & NomFeuille & "'!$" & Col2Let(i) & "$2:$" & Col2Let(i) & "$" & LastRow
    	Next i
     
     
    	ActiveChart.SetElement (msoElementLegendBottom)
    	ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
    	ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
     
    	ActiveChart.ChartTitle.Text = NomFeuille
    End Sub
     
    Public Function Col2Let(ByVal numCol As Long) As String
    	Col2Let = Split(Cells(, numCol).Address, "$")(1)
    End Function
    Avez-vous une idée de la raison qui pourrait conduire à cet effet ?
    J'ai déjà vérifié la variable "LastCol" qui renvoie la bonne valeur, et la boucle fait le bon nombre de passage.

    Aussi, en complément, pourquoi le titre de l'axe Y ne s'affiche pas ?

    Merci d'avance.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Bonjour,

    Aucune idée pour problème de série en double. La syntaxe a l'air bonne, donc à part venir des variables qui auraient un comportement bizarre je ne vois pas.

    En revanche pour le titre de l'axe Y, le problème vient d'Excel qui pour une raison inconnue interprète msoElementPrimaryValueAxisTitleAdjacentToAxis en tant que valeur 306, ce qui correspond en fait à msoElementPrimaryValueAxisTitleNone (pas de titre).

    La solution de contournement consiste à remplacer msoElementPrimaryValueAxisTitleAdjacentToAxis par 307.

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Par défaut
    Bonjour mat955,

    Merci pour ta réponse.
    Concernant le titre des Y, ça a fonctionné.

    Pour le reste, j'ai testé de faire ceci, et me disant que le problème venait peut-être du (i - 1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Set Serie = ActiveChart.SeriesCollection.NewSeries
            With Serie
                .Values = "='" & NomFeuille & "'!$" & Col2Let(i) & "$2:$" & Col2Let(i) & "$" & LastRow
                .XValues = "='" & NomFeuille & "'!$A$2:$A$" & LastRow
                .Name = "='" & NomFeuille & "'!$" & Col2Let(i) & "$1"
            End With
    Et ça créé toujours tous les cas en double. D'abord tous les cas dans le bon ordre, puis une duplication du premier au dernier

    J'ai testé de remplacer (i - 1) par (i), ça n'a rien changé.
    J'ai remplacé toutes les variables dans les 3 lignes 13 à 15 (de mon premier code), par des valeurs fixes (ca qui a fait (LastCol - 1)-fois la même courbe), j'ai toujours le double du nombre de série, et les dernières sont vides.

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Re,

    J'ai testé ton code mot pour mot avec un jeu de données fictif, le graphique se crée normalement, et j'obtiens le bon nombre de séries (testé avec 3 séries).
    Tu peux éventuellement joindre ton fichier pour que je teste dessus directement.
    Peut-être que ça vient de la version d'Excel, pour ma part je suis sur la version 2013. Mais je ne vois pas comment ça pourrait venir de ça sachant que tu as une version plus récente...

  5. #5
    Membre averti
    Homme Profil pro
    Chef de projet
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Par défaut
    Voici le fichier joint, je l'ai nettoyé de ce qui est inutile, et le problème survient toujours : (EDIT : pièce jointe non nécessaire, supprimée)

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Bonjour BackDev1,

    Je crois que j'ai trouvé !
    En fait ton code est bon. C'est juste qu'Excel est (comme très souvent) intelligent, et au moment où tu lui dis de créer le graph via l'instruction ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select, il remarque que tes données sont assez bien structurées pour en faire les séries d'un graph. Du coup, il te crée un graph déjà fait avec les séries qu'il a trouvé tout seul comme un grand.
    Donc les lignes que tu écris ensuite pour insérer autant de séries que de colonnes ont pour effet de doubler le nombre de séries (et d'ailleurs elles ne sont pas vides, c'est juste qu'elles ont les mêmes valeurs que celles directement créés par Excel).

    La solution pour éviter cela consiste à sélectionner une cellule qui n'est pas comprise dans ton jeu de données, par exemple la cellule A1000000, et ensuite lancer ton code.

    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
    Sub CreationGraph()
    	Dim i, LastCol, LastRow As Integer
    	Dim NomFeuille As String
     
    	LastCol = ActiveSheet.Cells(1, Columns.Count).End(xltoLeft).Column
    	LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    	NomFeuille = ActiveSheet.Name
     
            Range("A1000000").select
    	ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
     
    	For i = 2 to LastCol
    		ActiveChart.SeriesCollection.NewSeries
    		ActiveChart.FullSeriesCollection(i - 1).Name = "='" & NomFeuille & "'!$" & Col2Let(i) & "$1"
    		ActiveChart.FullSeriesCollection(i - 1).XValues = "='" & NomFeuille & "'!$A$2:$A$" & LastRow
    		ActiveChart.FullSeriesCollection(i - 1).Values = "='" & NomFeuille & "'!$" & Col2Let(i) & "$2:$" & Col2Let(i) & "$" & LastRow
    	Next i
     
     
    	ActiveChart.SetElement (msoElementLegendBottom)
    	ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
    	ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
     
    	ActiveChart.ChartTitle.Text = NomFeuille
    End Sub
     
    Public Function Col2Let(ByVal numCol As Long) As String
    	Col2Let = Split(Cells(, numCol).Address, "$")(1)
    End Function

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

Discussions similaires

  1. [AC-2010] Problème lors de la création d'un graphique via l'outil formulaire
    Par THOMAS314GREEN dans le forum Access
    Réponses: 1
    Dernier message: 21/11/2016, 13h26
  2. [XL-2010] Erreur lors de la création d'un graphique en VBA
    Par LesMotsLesChoses dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/02/2015, 17h10
  3. Réponses: 10
    Dernier message: 13/10/2008, 16h35
  4. [2.3] Action sur double-click sur une série
    Par Robiwan59 dans le forum BIRT
    Réponses: 1
    Dernier message: 19/08/2008, 11h43
  5. Réponses: 2
    Dernier message: 17/06/2008, 20h40

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