Problème de création de série graphique en VBA
Dernière réponse : dans Programmation
Bonjour à tous,
On m'a il y a quelques jours demander de codé une routine Excel qui aurait pour but de réaliser automatiquement des graphique de comparaison, sous forme de radar, entre plusieurs listes de données que l'on aura au préalablement sélectionné.
J'ai d'or est déjà créer un petit UserForm permettant de selectionner les différentes listes que l'on voudrait selectionner.
Le problème à l'heure actuelle viens de la création du graphique.
En effet en fonction des listes selectionnées apparaissent différentes erreurs de type run-time '1004' ou '1005' le plus souvent.
Bien qu'ayant des bases solide en programation je débute en vba.
Je cherche depuis un certain moment sur divers forums mais j'ai trouvé très peu de solution aux problèmes similaires et elles ont toutes échoué pour moi.
Je joins donc le code de la fonction posant problème:
Je vous remercie d'avance pour vos réponses si possible rapide SVP
PS: Si ça peut être utile il s'agit d'une suite office 2007
On m'a il y a quelques jours demander de codé une routine Excel qui aurait pour but de réaliser automatiquement des graphique de comparaison, sous forme de radar, entre plusieurs listes de données que l'on aura au préalablement sélectionné.
J'ai d'or est déjà créer un petit UserForm permettant de selectionner les différentes listes que l'on voudrait selectionner.
Le problème à l'heure actuelle viens de la création du graphique.
En effet en fonction des listes selectionnées apparaissent différentes erreurs de type run-time '1004' ou '1005' le plus souvent.
Bien qu'ayant des bases solide en programation je débute en vba.
Je cherche depuis un certain moment sur divers forums mais j'ai trouvé très peu de solution aux problèmes similaires et elles ont toutes échoué pour moi.
Je joins donc le code de la fonction posant problème:
Sub Create_graph(StartV As Integer, EndV As Integer)
'StartV:first line index EndV: last line index
Dim n As Integer, pos As Integer
Worksheets("matrix").Activate
'Graph creation
Charts.Add
ActiveChart.ChartType = xlRadarMarkers
For n = 0 To (Worksheets("ggg").Cells(1, 1) - 1) 'loop on total list number
If UserForm1.Frame1(n).Value = True Then 'Frame1 is a controls collection of checkbox
'Serie creation for each list of data selected
ActiveChart.SeriesCollection.NewSeries
pos = n * 2 + 3 'Colunm index calcul
ActiveChart.SeriesCollection(n + 1).Values = "=matrix!R" & StartV & "C" & pos & ":R" & EndV & "C" & pos
ActiveChart.SeriesCollection(n + 1).Name = "=matrix!R130C" & pos
End If
Next n
'Values names
ActiveChart.SeriesCollection(1).XValues = "=matrix!R" & StartV & "C2:R" & EndV & "C2"
'Graph design elements
ActiveChart.Location Where:=xlLocationAsObject, Name:="ggg"
ActiveChart.HasTitle = False
End Sub
Je vous remercie d'avance pour vos réponses si possible rapide SVP
PS: Si ça peut être utile il s'agit d'une suite office 2007
Autres pages sur : probleme creation serie graphique vba
Lassé par la pub ? Créez un compte
Meilleure solution
Bon problème résolu...
Il a suffit que je poste ce message au bout de 3h de recherche pour que ça me saute au yeux!
Il s'agit d'un simple problème algorithmique les seriecollection ne devant pas utiliser la variable n mais une autre variable compteur...
Ceci semble avoir résolu la majorité des erreurs, mais j'ai toujours en revanche l'apparition dans mon graphique d'une série fantôme dont l'unique valeur est {1}... Des idées quand à ce défaut?
Il a suffit que je poste ce message au bout de 3h de recherche pour que ça me saute au yeux!
Il s'agit d'un simple problème algorithmique les seriecollection ne devant pas utiliser la variable n mais une autre variable compteur...
Ceci semble avoir résolu la majorité des erreurs, mais j'ai toujours en revanche l'apparition dans mon graphique d'une série fantôme dont l'unique valeur est {1}... Des idées quand à ce défaut?
J'avais posé un drapeau sur ton sujet pour pouvoir y revenir. Comme tu avais donné la solution, ça n'urgait pas. Et pis voilà, je l'avais oublié.
Or donc, je voulais critiquer, très objectivement ton code.
A la ligne 6, tu actives une feuilles, je me demande bien pourquoi.
Ligne 10 et suivantes, tu utilises l'objet courant, c'est maladroit. Définit une variable plutôt que de faire confiance à Excel.
Ligne 12, tu utilises trop de parenthèses, ça surcharge.
Ligne 13, tu testes par rapport à vrai. C'est vrai que vraiment, en vrai, ça change rien à ce qui est vrai, toute chose étant vraie par ailleurs Mais c'est un peu lourd (moins que mes commentaires, il est vrai
)
Rhooo, ligne 22, tu reportes la variables derrière le Next. Depuis les années 1990, c'est l'indentation qui permet de revoir le code, pas ce vestige des temps préhistoriques.
Ces remarques pour que tu puisses prochainement dire "Ayant des bases solide en programation (sic) dont VBA." !
Ton code, revu :
Peux-tu sur cette base, apporter tes corrections ?
On verra ensuite pour "{1}".
Or donc, je voulais critiquer, très objectivement ton code.
A la ligne 6, tu actives une feuilles, je me demande bien pourquoi.
Ligne 10 et suivantes, tu utilises l'objet courant, c'est maladroit. Définit une variable plutôt que de faire confiance à Excel.
Ligne 12, tu utilises trop de parenthèses, ça surcharge.
Ligne 13, tu testes par rapport à vrai. C'est vrai que vraiment, en vrai, ça change rien à ce qui est vrai, toute chose étant vraie par ailleurs Mais c'est un peu lourd (moins que mes commentaires, il est vrai
)Rhooo, ligne 22, tu reportes la variables derrière le Next. Depuis les années 1990, c'est l'indentation qui permet de revoir le code, pas ce vestige des temps préhistoriques.
Ces remarques pour que tu puisses prochainement dire "Ayant des bases solide en programation (sic) dont VBA." !
Ton code, revu :
Dim n As Integer, pos As Integer Dim gr As Chart Set gr = Charts.Add gr.ChartType = xlRadarMarkers For n = 0 To Worksheets("ggg").Cells(1, 1) - 1 If UserForm1.Frame1(n).Value Then gr.SeriesCollection.NewSeries pos = n * 2 + 3 gr.SeriesCollection(n + 1).Values = "=matrix!R" & StartV & "C" & pos & ":R" & EndV & "C" & pos gr.SeriesCollection(n + 1).Name = "=matrix!R130C" & pos End If Next gr.SeriesCollection(1).XValues = "=matrix!R" & StartV & "C2:R" & EndV & "C2" gr.Location Where:=xlLocationAsObject, Name:="ggg" gr.HasTitle = False
Peux-tu sur cette base, apporter tes corrections ?
On verra ensuite pour "{1}".
Bon pour répondre à tes commentaires:
l'activation de la feuille... oui effectivement surement un résidu du moment ou j'ai démarrer mon code, je pensais avoir besoin d'activer la feuille pour aller chercher les données qu'elle contient sans la rappeler à chaque fois. Depuis j'ai complètement changer le système.
Pour l'objet courant j'avoue qu'encore maintenant après une bonne semaine de prog sur VB et VBA je m'y fit encore trop. (l'appli fonctionne du tonnerre cependant, je verrais si je renvois à mon partron une version corrigé... ils ne sont pas très exigeant sur la qualité du code... Mais j'ai pris note pour la suite)
A les parenthèses! Une réminiscence de mes études lorsque je travaillais sur le Lisp?
Le true... bon ok là j'ai un peu honte...
Ok pour le next j'avais trouver ça sur un cours qui apparemment n'est plus tout à fait à jour!
Concernant au final cette histoire de {1} j'ai finalement fait une suppression conditionnelle sur l'éventuelle série supplémentaire... c'est du bricolage... c'est moche mais ça marche...
Bref merci de tous tes conseils, comme je l'ai dit je ne suis pas sur de revenir sur ce programme en particulier mais je suis quand même intéressé par ton avis sur l'apparition de cette série supplémentaire, par curiosité et pour une possible utilisation futur.
J'en avais pour ma part conclu qu'il s'agissait d'une plage de donnée selectionné au moment de l'activation de la macro créant ainsi automatique une série vide, comme lorsqu'on lance une création graphique manuellement avec une cellule selectionnée.
l'activation de la feuille... oui effectivement surement un résidu du moment ou j'ai démarrer mon code, je pensais avoir besoin d'activer la feuille pour aller chercher les données qu'elle contient sans la rappeler à chaque fois. Depuis j'ai complètement changer le système.
Pour l'objet courant j'avoue qu'encore maintenant après une bonne semaine de prog sur VB et VBA je m'y fit encore trop. (l'appli fonctionne du tonnerre cependant, je verrais si je renvois à mon partron une version corrigé... ils ne sont pas très exigeant sur la qualité du code... Mais j'ai pris note pour la suite)
A les parenthèses! Une réminiscence de mes études lorsque je travaillais sur le Lisp?
Le true... bon ok là j'ai un peu honte...
Ok pour le next j'avais trouver ça sur un cours qui apparemment n'est plus tout à fait à jour!
Concernant au final cette histoire de {1} j'ai finalement fait une suppression conditionnelle sur l'éventuelle série supplémentaire... c'est du bricolage... c'est moche mais ça marche...
Bref merci de tous tes conseils, comme je l'ai dit je ne suis pas sur de revenir sur ce programme en particulier mais je suis quand même intéressé par ton avis sur l'apparition de cette série supplémentaire, par curiosité et pour une possible utilisation futur.
J'en avais pour ma part conclu qu'il s'agissait d'une plage de donnée selectionné au moment de l'activation de la macro créant ainsi automatique une série vide, comme lorsqu'on lance une création graphique manuellement avec une cellule selectionnée.
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumProblème création de réseau local
- ForumProblème création dvd windows
- ForumFaire un graphique vba
- ForumRedimensionner graphique vba
- ForumInterface graphique vba
- ForumAffichage graphique vba
- ForumCrã ation graphique vba
- articlesAgrandir graphique vba
- ForumPositionner graphique vba
- ForumProgrammation graphique vba
- Voir plus
![[:patch] [:patch]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/e5/c5/patch.gif)