Résolu Problème de création de série graphique en VBA

grindan

Nouveau membre
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:

[cpp]
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
[/cpp]

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
 

grindan

Nouveau membre
Meilleure réponse
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! :sweat:

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?
 

grindan

Nouveau membre
Oui bien sur! Mais j'avais chercher pendant un moment comment le faire sans trouver.
Donc je me suis rabbattu vers cette solution.
Je voulais régler ça car m'étant déjà occuper d'un forum je sais à quel point ça peut être ch.. pardon ennuyeux de repasser derrière chacun.

Merci quand même!
 

zeb

Modérateur
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 :D )
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 :
Code:
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}".
 

grindan

Nouveau membre
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.
 

zeb

Modérateur
A ton service pour t'aider à faire de trucs-moches-qui-marchent des programmes efficaces. ;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 064
Membres
1 586 286
Dernier membre
petitangebleu1977
Partager cette page
Haut