Plages de données automatiques graphique VBA

richert90

XLDnaute Occasionnel
Bonjour à tous,

J'aimerais créer un graphique en VBA (jusque la, j'y arrive :p) sauf que la plage de données et le nombre de courbes sur ce graphique peut varier.
Je m'explique (voir en même temps le fichier joint)

Le graphique a créer apparait lorsqu'on filtre selon un groupe (ici on a 3 groupes mais il peut en avoir plus).
Quand le filtre est crée (on a donc un seul groupe), on veut en fait tracer la valeur de IntegTime (colonne G) au cours du temps (colonne C) pour chaque BPU ( il y en a 21, 7 par groupe) donc on aura 7 courbes sur le graphique dans ce cas.
Le graphique dans le fichier joint est un exemple de résultat souhaité quand on filtre le groupe en gardant le groupe1.

Je connais le nombre de groupe et le nombre de BPUs par groupe grâce à un fichier de configuration (je récupère donc ces valeurs sans problème si besoin)
On connait le groupe filtré avec un userform (on récupère cette valeur dans une variable).

---------------------------------------------------------------------------------------------------
J'ai beaucoup de mal à trouver un algo me permettant de sélectionner les différentes plages de données correspondantes aux BPUs.

Voici les idées que j'avais eu:

Tout d'abord une fois le numéro de groupe filtré récupéré on délimite la plage de données du groupe

Code:
a=0
do
   a=a+1
loop until cells(a,2)=numero_groupe_filtré

b=a
do
   b=b+1
loop until cells(b,2)<> numero_groupe_filtré

[a,b-1] est donc l'intervalle avec les données qui nous intéresse.
Maintenant il faut trouver les X séries à l'intérieur qui correspondent aux X nombre de BPUs.
Voilà une première idée
Code:
for c=a to b-1
   nb1=c
do
   c=c+1
loop until cells(c,1).value<>Cells(nb1, 1)
nb2=c-1
next c
Le problème c'est qu'à chaque 'tour', il faudrait que je créer une série dans le graphique...
C'est là que je n'arrive pas vraiment à procéder...
Ca devrait être quelque chose du genre:
Code:
for compteur=1 to nombre_de_BPUs
      ActiveChart.SeriesCollection(compteur).Name = "=database!$A$" & nb1
        ActiveChart.SeriesCollection(compteur).XValues = "=dataBase!$C$" & nb1 & ":$C$" & nb2
        ActiveChart.SeriesCollection(compteur).Values = "=dataBase!$G$" & nb1 & ":$G$" & nb2
next compteur

Je pense que l'idée est la, mais je ne sais pas trop comment m'y prendre pour insérer la boucle du compteur avec la boucle c.

Voila merci d'avance de m'aider pour ce sujet auquel je bloque
 

Pièces jointes

  • Test.xlsx
    138.8 KB · Affichages: 39
  • Test.xlsx
    138.8 KB · Affichages: 39
  • Test.xlsx
    138.8 KB · Affichages: 46
Dernière édition:

richert90

XLDnaute Occasionnel
Re : Plages de données automatiques graphique VBA

Rebonjour,

J'ai essayé de mettre en pratique ce que je pensais
Je joins un fichier avec macros contenant cela

Merci d'avance de me corriger ;)
 

Pièces jointes

  • Test_code.xlsm
    147.8 KB · Affichages: 31
  • Test_code.xlsm
    147.8 KB · Affichages: 32
  • Test_code.xlsm
    147.8 KB · Affichages: 32
Dernière édition:

richert90

XLDnaute Occasionnel
Re : Plages de données automatiques graphique VBA

Bonsoir hasco et merci pour ta réponse

Je vais regarder en effet du côté des TCD pour les automatiser et de proposer des filtres selon les groupes..

Néanmoins j'aimerais bien réussir ce que j'avais commencé dans le précédent post (graphiques en VBA avec les plages de données définies automatiquement). Si certains peuvent voir ce que j'ai commencé ce serait sympa :)

Merci encore
 

richert90

XLDnaute Occasionnel
Re : Plages de données automatiques graphique VBA

Sur le fichier joint avec macros, j'ai un message d'erreur ("mauvais paramètres") quand je sélectionne la plage de données du graphique et le nom de la série...
Quelqu'un aurait une solution??

Merci
 

richert90

XLDnaute Occasionnel
Re : Plages de données automatiques graphique VBA

Hasco, j'ai regardé ta méthode avec les TCD mais ça ne va pas car en ordonnée on a le "nombre de IntegTime" alors que je veux les valeurs des IntegTime.

Je vais donc me pencher sur ma méthode qui bloque pour le moment (fichier excel joint quelque post avant)
 

Misange

XLDnaute Barbatruc
Re : Plages de données automatiques graphique VBA

Bonjour

As tu essayé en remplacant dans le TCD nombre de IntegTime par somme de ou moyenne de integTime ?
Sinon déjà pour rendre ta source de données dynamique, commence par transformer ton tableau de valeurs en tableau excel (onglet accueil/style/mettre sous forme de tableau)
Ce lien n'existe plus
 

richert90

XLDnaute Occasionnel
Re : Plages de données automatiques graphique VBA

Bonjour Misange,

J'ai déjà essayé mais ça ne va pas car je veux juste les valeurs des IntegTime.

Pour ma partie avec le code VBA:

Code:
 ActiveChart.SeriesCollection(compteur).Name = "=database!$A$" & nb1

J'ai une erreur '1004':"Paramètre non valide" mais je ne vois pas pourquoi. La syntaxe me parait correcte.
compteur=1 et nb1=695 donc je ne vois pas pourquoi ça beug.........

Merci d'avance
 

richert90

XLDnaute Occasionnel
Re : Plages de données automatiques graphique VBA

Re, je pense savoir pk j'ai eu cette erreur. Il manquait:
Code:
ActiveChart.SeriesCollection.NewSeries
juste avant
Code:
ActiveChart.SeriesCollection(compteur).Name = "=database!$A$" & nb1

J'ai encore des pb sur ce code. De plus, les boucles for ne sont pas très pratique en terme de temps d'exécution. Auriez vous une solution pour améliorer cela?
 

Pièces jointes

  • Test_code.xlsm
    154.8 KB · Affichages: 27
  • Test_code.xlsm
    154.8 KB · Affichages: 30
  • Test_code.xlsm
    154.8 KB · Affichages: 28

Misange

XLDnaute Barbatruc
Re : Plages de données automatiques graphique VBA

Si vraiment tu tiens à faire cela par VBA, pour ma part, je prendrai la base (sous forme de tableau), et j'utiliserai un filtre élaboré suivant les critères saisis dans la zone de filtre pour extraire les valeurs servant à construire les courbes dans un autre tableau à partir duquel les courbes ont été pré-construites. Cela me parait bien plus simple.
 

Statistiques des forums

Discussions
313 287
Messages
2 096 833
Membres
106 758
dernier inscrit
JM9