Faire un graph par VBA

  • Initiateur de la discussion Initiateur de la discussion fifi
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
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
 
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

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

Dernière édition:
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

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 😀) 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 😀
 

Pièces jointes

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 😛


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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
657
Réponses
3
Affichages
430
B
  • Question Question
Réponses
3
Affichages
1 K
Retour