Faire un graph par VBA

fifi

XLDnaute Occasionnel
Bonjour,

j'ai du mal à écrire une ligne de code pour construire un graphique par VBA.

Les valeurs sont liées à des plages nommées dont les noms termine par une valeur de 1 à 96.

Code:
Dim I as integer
    With ActiveChart.SeriesCollection(I)
            .XValues = "='maBoite.xls'!ASY_ligne_disso_tp"
             .Values = "='maBoite.xls'!ASY_ligne_disso" & I
   end with
le code bloc sur le I dans .Value.

si quelqu'un peut me dépanner svp .

merci
 

mutzik

XLDnaute Barbatruc
Re : Faire un graph par VBA

bonjour,
c'est normal qu'il bloque sur I, tu ne l'as défini nulle part (la place mémoire est réservée (ton dim I) mais tu ne lui affectes aucune valeur, d'ou l'erreur
ActiveChart.SeriesCollection.Count te donne le nombre de séries de ton graph
 

fifi

XLDnaute Occasionnel
Re : Faire un graph par VBA

euh si en fait j'ai pas collé les informations de la boucle.

la sélection du graph est aussi opérationnelle.
Je pense que le problème vient de la syntaxe pour écrire une formule dans le champ .Values

le code entier pour cette partie :

Code:
Dim I as integer
ActiveSheet.ChartObjects("mon_graph").Activate
For I = 1 To 96
 ActiveChart.SeriesCollection.NewSeries
    With ActiveChart.SeriesCollection(I)
            .XValues = "='maBoite.xls'!ASY_ligne_disso_tp"
             .Values = "='maBoite.xls'!ASY_ligne_disso" & I
    end with
Next I
 

fifi

XLDnaute Occasionnel
Re : Faire un graph par VBA

bonjou le forum
j'ai avancé mais toujours pas de solution fonctionnelle :s



Code:
Type StructAdresse
  Abs As String
  Ord As String
End Type


Sub Graphiques()
Dim i as integer
Dim T() As StructAdresse
Dim A$

Set S = ActiveSheet 
LastCol& = 182  
ReDim T(1 To 96) 
 A$ = "=" & S.Name & "!"

ActiveSheet.ChartObjects("graph").Activate
For i  = 1 to 96
 ActiveChart.SeriesCollection.NewSeries
    With ActiveChart.SeriesCollection(i)
            .Name = "Test" & i
            Ligne = S.Range("H39").Offset(0, 7) + 1
           '°°° Adresse des X °°°
            T(i).Abs = S.Range(S.Cells(1, 93), S.Cells(1, LastCol&)).Address(True, True, xlR1C1)
            '°°° Adresse des Y °°°
            T(i).Ord = S.Range(S.Cells(Ligne, 93), S.Cells(Ligne, LastCol&)).Address(True, True, xlR1C1)

'--- Construction des séries ---
         .SeriesCollection(i).XValues = A$ & T(i).Abs
         .SeriesCollection(i).Values = A$ & T(i).Ord

  End with
next i
end if


snif ca marche pas
 

mécano41

XLDnaute Accro
Re : Faire un graph par VBA

Bonjour,

J'avais fait cette petite appli. il y a quelque temps ; regarde si cela peut t'aider...

Cordialement
 

Pièces jointes

  • Créer nommer effacer graphiques1.zip
    21.3 KB · Affichages: 227
  • Créer nommer effacer graphiques1.zip
    21.3 KB · Affichages: 224
  • Créer nommer effacer graphiques1.zip
    21.3 KB · Affichages: 222

fifi

XLDnaute Occasionnel
Re : Faire un graph par VBA

ah ba oui ca c'est joli mais la difficulté réside dans le fait que les données ne sont jamais au même endroit. d'ou le passage par des variable dans mon code.


disons que j'ai 96 ligne de données et que le graphique ne doit afficher que quelque lignes en fonction de ce que l'utilisateur demande.
genre afficher le graphique concernant les lignes 1, 10, 23, 39 , 46...



je vais sans doute devoir faire une feuille tampon dans laquelle sera stocké les lignes voulues dans le graphique (le graphique y en a plusieurs). mon classeur étant déjà assez lourd je ne voulait pas l'alourdir encore plus.


merci pour de l'investissement, je vous en suis reconnaissant.
 

mécano41

XLDnaute Accro
Re : Faire un graph par VBA

Ce que j'ai donné n'est qu'un exemple que j'avais fait pour expliquer à quelqu'un ; il faut l'adapter. Les plages indiquées dans VBA peuvent être définies par des zones nommées dans la feuille, par des Range définis dans VBA en partant d'une saisie de l'utilisateur.

Comment la zone à représenter sur le graphique est-elle saisie par l'utilisateur? Par des N° de lignes/colonnes ans des cellules? Par sélection + un Inputbox?

Est-ce que la disposition des colonnes Ordonnées est toujours la même par rapport à la colonne Abscisses?

Enfin, pour t'aider, il faut que l'on sache tout ...ou presque... :)

Peut-être qu'une partie de fichier aiderait...

Cordialement
 

fifi

XLDnaute Occasionnel
Re : Faire un graph par VBA

E fait l'utilisateur sélectionne de 1 à 96 cellules dans un tableau , ce qui indique dans une plage de cellule les lignes de la plage de données à inclure dans le graphique.

vu qu'il peut il y en avoir jusqu'à 96 (pour le moment) le plage nommées sont un peu lourdes à gérer (2 graphiques aussi).

le disposition des colonnes des ordonnées est toujours la memes
je joint un classeur exemple.

le nom des séries à utiliser est indiqué et peuvent changer (une macro se charge de dire qu'elles séries sont à mettre dans le graphique
 

Pièces jointes

  • construction graphique.zip
    24.7 KB · Affichages: 80
Dernière édition:

mécano41

XLDnaute Accro
Re : Faire un graph par VBA

Bonjour,

Regarde si cela correspond à ce que tu veux faire. C'est bien sûr à adapter pour les noms de séries ... etc

Il faut sélectionner dans la colonne Lignes (attention il n'y a pas de vérification)

Cordialement
 

Pièces jointes

  • Construction graphique1.zip
    36.3 KB · Affichages: 72
Dernière édition:

mécano41

XLDnaute Accro
Re : Faire un graph par VBA

La même chose mais avec vérification de la plage sélectionnée (on pourrait éventuellement ajouter une autre vérif si cellule sélectionnée est vide...)

La légende porte maintenant le nom de la ligne correspondant à la courbe (c'est quand même plus pratique!)

Cordialement
 

Pièces jointes

  • Construction graphique2.zip
    36.6 KB · Affichages: 97

fifi

XLDnaute Occasionnel
Re : Faire un graph par VBA

coucou
, je reviens car la macro fournie par Mecano marche très bien mais je n'arrive pas à l'adapter à mon classeur.

le problème vient du fait que la sélection des lignes à insérer dans la graph est décalée par rapport au lignes de données.

je pense que mon problème vient de la synthaxe sur la variable plage.

dans ta macro la selection directe (ingénieuse :D) donnée un format de ce type :
$N$18;$N$13;$N$11;$N$26;$N$34

alors que quand j'essaye de refaire la plage de données depuis (une plage des numéro de ligne) je cela :
"$N$18;$N$13;$N$11;$N$26;$N$34"

du coup, ca ne marche pas :D
 

Pièces jointes

  • Construction graphique3.zip
    36.3 KB · Affichages: 72

fifi

XLDnaute Occasionnel
Re : Faire un graph par VBA

arf ayé ....
j'vais fait un raccourci...
ne jamais croire qu'un texte peut être reconnue comme une plage automatiquement par le VBA :p


l'ancien code qui ne marchait pas :
Code:
Plage = Range("debut").Offset(Application.WorksheetFunction.Match(c, Range("Exploitation_position_col"), 0) - 1, 1).Address
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(SerieGraph).XValues = PlageAbscisses
ActiveChart.SeriesCollection(SerieGraph).Values = Worksheets(ActiveSheet.Name).Range(Plage.Offset(0, 1), Plage.Offset(0, 40))

et le nouveau code qui marche :
Code:
       Plage = Range("debut").Offset(Application.WorksheetFunction.Match(c, Range("Exploitation_position_col"), 0) - 1, 1).Address
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(SerieGraph).XValues = PlageAbscisses
ActiveChart.SeriesCollection(SerieGraph).Values = Worksheets(ActiveSheet.Name).Range(Range(Plage).Offset(0, 1), Range(Plage).Offset(0, 40))


une bonne journée de canapé pour trouver ca :s
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2