Graphique automatique et mise en forme

Résolu
hannebea Messages postés 6 Date d'inscription vendredi 22 septembre 2006 Statut Membre Dernière intervention 16 janvier 2007 - 15 janv. 2007 à 09:11
hannebea Messages postés 6 Date d'inscription vendredi 22 septembre 2006 Statut Membre Dernière intervention 16 janvier 2007 - 16 janv. 2007 à 15:17
Bonjour,

Voila j'ai un code pour mettreà jour des graphique automatiquement quand j'aoute des données.
j'aimerais personnaliser les graphiques obtenus police couleur... mais j ne sais pas comment faire car les graphiques sont numerotés....
voila ce que j'ai deja.

Sub Macro1()


Range("A2").Select
Selection.CurrentRegion.Select
données = Selection.Address
NomFeuille = ActiveSheet.Name




'Position et taille du graph
ActiveSheet.ChartObjects.Add(160, 325, 450, 150).Select
'(POSITION 100, 150,.........TAILLE 350, 200)
Application.CutCopyMode = False


    ActiveChart.ChartType = xlColumnStacked
    ActiveChart.SetSourceData Source:=Sheets(NomFeuille).Range(données), PlotBy:= _
        xlRows

End Sub

si vous avez une idée...
Merci beaucoup

7 réponses

hannebea Messages postés 6 Date d'inscription vendredi 22 septembre 2006 Statut Membre Dernière intervention 16 janvier 2007
16 janv. 2007 à 15:17
Salut,

En fait je crois que j'ai trouvé la solution. En faisant Dim graph As Variant ensuite je peux utiliser l'enregistreur de macro et j'utilise graph.Chart au lieu de ActiveChart.
Merci beaucoup pour tes suggestions
Agathe
3
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
15 janv. 2007 à 17:03
Pour personnaliser les graphiques ? La solution, l'enregisteur de macro. Cela te donnera le nom de ton graphique et les syntaxes.

Exemple :
J'ai fait un histogramme avec 2 séries de données à l'aide de l'assistant.
Je veux modifier la couleur d'une des 2 séries de données (la 2ème)
Le code obtenu est 

    Range("B24").Activate
    ActiveSheet.ChartObjects("Graphique 2").Activate
'  = > Activation du graphique : son nom est Graphique 2
    ActiveChart.ChartArea.Select
    ActiveChart.SeriesCollection(2).Select
' => Sélection de toutes les données de la série 2
    ActiveChart.SeriesCollection(2).Points(2).Select
    ActiveChart.SeriesCollection(2).Points(3).Select
    ActiveChart.SeriesCollection(2).Points(4).Select
' => Sélection de la 4ème barre de la série 2 de mon histogramme
    ActiveChart.SeriesCollection(1).Select
' => Sélection de toutes les données de la série 2
    With Selection.Border
        .Weight = xlThin
        .LineStyle = xlAutomatic
    End With
' => Redéfinition des contours de ma série 2
    Selection.Shadow = False
    Selection.InvertIfNegative = False
    With Selection.Interior
        .ColorIndex = 4
        .Pattern = xlSolid
    End With
'=> Redéfinition des couleurs de ma série 2

De celà, on peut comprendre que
ActiveChart désigne le graphique sur lequel tu bosses.
SeriesCollection est un objet qui regroupe toutes les séries de données avec un index commençant à 1 (pour voir à quelle série cela correspond, tu peux faire un clic droit sur le graphique et faire Données source)
Points correspond à un objet regroupant toutes les données d'une même série, fonctionnant là aussi avec un index (le nb total de "points" est obtenu en utilisant la propriété Points.Count)
A partir de ces 3 principes, tu peux faire ce que tu veux sur la mise en forme du contenu de ton graphique. En plus, en consultant l'aide sur ces mots clés, tu auras des exemples un peu plus clair.

Donc, si on voulait juste modifier la couleur de la 3ème barre de la série 2 d'un histogramme, voilà ce que ça donnerait en donnant le plus de détails :

Workbooks("Nom du classeur").Worksheets("Nom de la feuille").ChartObjects("Graphique 1").Activate
ou alors
ActiveSheet.ChartObjects("Graphique 2").Activate

With ActiveChart.SeriesCollection(2).Points(3).Interior
        .ColorIndex = 20
        .Pattern = xlSolid
    End With

Donc, pour la modification de titre, etc ... Même principe. Vive l'enregistreur de macro qu'on modifie après ^^

Molenn
0
hannebea Messages postés 6 Date d'inscription vendredi 22 septembre 2006 Statut Membre Dernière intervention 16 janvier 2007
16 janv. 2007 à 06:57
Salut,

Bon tout d'abord merci beaucoup de t'occuper de mon cas ;-)...
Alors j'ai deja essayé l'enregistreur de macro mais j'ai toujours un problème. Je dois déclarer le nom du graphique: ChartObjects("Graphique 1") par exemple, et la ca coince parce que le nom du graphique s'incremente au fur et a mesure que j'execute la macro...et donc je ne sais pas comment affecter mes modifs pour le meme graphique (pour moi) mais qui sera different pour lui....
Je sais pas si je suis très claire....
Merci en tout cas
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
16 janv. 2007 à 09:55
Je ne comprends pas comment ton n° de graphique peut s'incrémenter.
Ton code créer un nouveau graphique ? Ou tu ne fais que modifier un graphique existant ? Parce que ce n'est pas tout à fait pareil.

Le plus simple, c'est encore que tu mettes le bout de code que tu as déjà fait.

Molenn
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
16 janv. 2007 à 10:03
Je viens de voir un truc, si tu crées avec ton code un nouveau graphique.
A la fin du code de création, le Charts.Add ...
Tu peux récupérer le nom du graphique créer dans une variable en faisant :

NomGraphique = ActiveChart.Name
Affiche le avec un msgbox NomGraphique pour voir à quoi ça ressemble.

Et pour le reste du code, au lieu de faire
ChartObjects("Graphique 1")
Tu fais
ChartObjects(NomGraphique)
(Si ça ne fonctionne pas comme ça, il faudra récupérer le chiffre dans la variable et reconstruire le nom, un truc du style : ChartObjects("Graphique " & NumGraphique)
 )

Molenn
0
hannebea Messages postés 6 Date d'inscription vendredi 22 septembre 2006 Statut Membre Dernière intervention 16 janvier 2007
16 janv. 2007 à 10:49
Je viens d'essayer ce que tu proposes mais ca bug...


Voici le code que j'ai deja:

Sub Macro1()
Range("A2").Select
Selection.CurrentRegion.Select
données = Selection.Address
nomfeuille = ActiveSheet.Name
'Position et taille du graph
ActiveSheet.ChartObjects.Add(100, 150, 350, 200).Select
'(POSITION 100, 150,.........TAILLE 350, 200)
Application.CutCopyMode = False


    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Sheets(nomfeuille).Range(données), PlotBy:= _
        xlColumns
End Sub

Effectivement j'ajoute un graphique a chaque execution.
Voila ce que j'ai ajouter:

 NomGraphique = ActiveChart.Name
 ActiveSheet.ChartObjects("NomGraphique").Activate
    ActiveChart.ChartArea.Select
    ActiveChart.SeriesCollection(3).Select
    ActiveChart.SeriesCollection(3).ChartType = xlLineMarkers

mais il me donne un message d'erreur:
"L'indentificateur sous le curseur n'est pas reconnu"
mmm...tu sais ce que ca veux dire?
encore une idée?
Merci
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
16 janv. 2007 à 11:27
Je vais essayer ton code chez moi quand j'aurai le temps, mais première chose, il ne faut pas mettre ta variable entre double quotes si tu veux que ça fonctionne.
Donc 
 ActiveSheet.ChartObjects(NomGraphique).Activate

Molenn
0
Rejoignez-nous