VBA Automatisation de la création de 144 Graphiques

Cooralie

XLDnaute Nouveau
Bonjour à tous!

Je débute en VBA et cela fait trois jours que j'essaye de faire une macro sans résultat, j'ai besoin d'aide pour trouver ce qui coince dans mon code... j'ai posté déjà sur plusieurs forums, et personne ne m'a répondu :( Pourtant je pense que c'est une faute de syntaxe très bête que je fais et que ce n'est vraiment pas très compliqué.

J'ai mis 2 impressions écran en pièces jointes, et ci-dessous quelques explications sur ce que j'aimerais obtenir:

J'ai deux feuilles excel:
-la feuille 1 qui contient différentes plages de données (144)
-la feuille 2 qui contiendra les graphiques relatifs à chaque plage de données

Les deux feuilles sont sous forme d'une grosse matrice 12x12, dont chaque élément ((1,1), (1,2), (1,3) etc...) est une colonne de 180 valeurs (ce sont des valeurs en fonction d'un angle). J'ai donc au total 12x12x180 valeurs.

J'aimerais pour chacune des plages de données de 180 valeurs un graphique type aires qui se place correctement et se mets aux bonnes dimensions comme j'ai fait à titre d'exemple dans la feuille 2.

J'ai commencé à écrire le code pour la création et le placement du graphique (pas encore la mise au dimensions), mais j'ai pour commencer une erreur 1004 à la ligne "Set Values = Worksheets("Feuil1").Range(Cells(X, Y), Cells(U, V))" et je ne pense pas que ce sera la seule!

Pouvez-vous m'aider? Voici le code ci dessous

Coralie


Sub Graphe()
'
' Graphe Macro
'
Dim i As Integer 'incrément colonne
Dim j As Integer 'incrément ligne



For i = 1 To 12
For j = 1 To 12

'Coordonnées de le première case de la plage de données allant en ordonnées du graphe
Dim X As Long
X = 5 + (j - 1) * 186 'ligne
Dim Y As Long
Y = 1 + 3 * i 'colonne"

'Coordonnées de le dernière case de la plage de données allant en ordonnées du graphe
Dim U As Long
U = 5 + (j - 1) * 186 + 180 'ligne
Dim V As Long
V = 1 + 3 * i ' colonne

Dim Graphic As Chart, lngValues As Range
Cells(X, Y).Select 'Pour que le graphique se place au bon endroit
Set lngValues = Worksheets("Feuil1").Range(Cells(X, Y), Cells(U, V))
Set Graphic = ThisWorkbook.Charts.Add
Graphic.ChartType = xlArea
Graphic.SetSourceData Values, Range("B5,B185") ' toujours la même chose (de 0 à 180°), donc pas besoin de faire varier avec i et j

Next
Next
End Sub
 

Pièces jointes

  • Capture d’écran 2012-12-05 à 12.17.50.jpg
    Capture d’écran 2012-12-05 à 12.17.50.jpg
    56.4 KB · Affichages: 156
  • Capture d’écran 2012-12-05 à 12.18.52.jpg
    Capture d’écran 2012-12-05 à 12.18.52.jpg
    16.8 KB · Affichages: 110

Cooralie

XLDnaute Nouveau
Re : VBA Automatisation de la création de 144 Graphiques

Merci beaucoup MJ13 d'avoir pris le temps de faire ça! Je vais décortiquer votre macro et voir si j'arrive à mes fins, je retrouve espoir :D

Pour ce qui est de Excel Mac, oui oui on peut enregistrer des macros et faire tout ce qu'on ferait avec un PC :) Ce sont vraiment les même fonctions, c'est juste l'interface qui légèrement différente. Et les incompatibilités existent, mais pas tellement plus que pour les versions Excels PC entre elles!
 

Misange

XLDnaute Barbatruc
Re : VBA Automatisation de la création de 144 Graphiques

Bonjour Coralie
Le titre de ta question m'a interpellée...

Désolée d'insister sur la réponse de Modeste GeeDee que tu n'as pas comprise mais il y a de FORTES chances que tu rencontres un problème en créant 144 graphiques dans un même classeur.
Excel gère la mémoire d'une façon qui n'appartient qu'à cette application et notamment il réserve une partie de la mémoire seulement pour les graphiques. Même avec 8GO de mémoire vive, excel n’utilisera jamais tout ce qui est disponible. Et les graphiques sont extrêmement consommateurs de ressources.

Par ailleurs, à mois que les graphiques ne soient très très simples, avoir une vision d'ensemble de 144 graphiques pour un être humain c'est ... Compliqué dirons nous. Es tu sure que ce soit vraiment la bonne approche ? Si tu en es sure, fais très attention en faisant tes tests sur le vrai classeur. Fais en une copie avant, fais des backups réguliers et ne t'étonne pas si un jour tu ne peux tout simplement plus les ouvrir.
 

kjin

XLDnaute Barbatruc
Re : VBA Automatisation de la création de 144 Graphiques

Bonsoir,
Nonobstant la sage remarque de Misange...et les éventuelles incompatibilités de versions
Code:
Sub TracerGraph()
Dim r  As Range, r2 As Range, c As Range
Dim cht As ChartObject
Application.ScreenUpdating = False
With ActiveSheet
    Set r = Range("D5:D185")
    For i = 1 To 12 * 185 Step 185
        x = x + 1
        For j = 1 To 12 * 3 Step 3
            y = y + 1
            Set r2 = r.Offset(i - 1, j)
            Set c = r2(1).Offset(0, 1)
            c.ColumnWidth = 60
            Set cht = .ChartObjects.Add(c.Left, c.Top, c.Width, 250)
            With cht.Chart
                .ChartType = xlArea
                Do Until .SeriesCollection.Count = 0
                    .SeriesCollection(1).Delete
                Loop
                With .SeriesCollection.NewSeries
                    .XValues = r
                    .Values = r2
                    .Name = "Série " & x & " - " & y
                End With
                With .Axes(xlCategory)
                    .TickLabelSpacing = 10
                    .TickMarkSpacing = 10
                End With
                .Legend.Delete
            End With
        Next
    Next
End With
End Sub
A+
kjin
 

Pièces jointes

  • coralie.zip
    135 KB · Affichages: 48
  • coralie.zip
    135 KB · Affichages: 50
  • coralie.zip
    135 KB · Affichages: 51

MJ13

XLDnaute Barbatruc
Re : VBA Automatisation de la création de 144 Graphiques

Bonjour à tous

Merci à tous pour votre implication forte intéressante.

Comme dit Modeste DG et Misange Il est vrai que si on a beaucoup de graphiques, cela risque de devenir lourd.

Par contre, j'aime bien d le code de Kjin qui était un peu celui que j'attendais (comme le footballer :eek:)

En reprenant le code et le fichier de Kjin, sur 287 séries, j'obtiens une bonne demi-heure de traitement sur XL2007 qui est réputé pour être d'une lenteur d'escargot avec les graphiques . Et j'obtiens un fichier de 11.6 Mo.

Après si on peut essayer de copier en image les graphiques à condition, qu'on n'ai pas à y retoucher, mais cela peut faire de gros fichiers.
 

MJ13

XLDnaute Barbatruc
Re : VBA Automatisation de la création de 144 Graphiques

Re

Le fichier ne peut pas être exploité directement sous 2007, non ?
Pourquoi 287 séries ?
Sous 2003, moins de 2 secondes pour les 144 graphiques et 800 ko

Kjin: Sous XL2007, tu peux l'enregistrer en .xlsm, donc beaucoup plus de colonnes.

Pour le temps qui est très long sur XL2007, c'est un problème de lenteur de cette version avec les graphiques. A voir sur XL 2010 et XL 2013:confused:.
 

Cooralie

XLDnaute Nouveau
Re : VBA Automatisation de la création de 144 Graphiques

Bonjour à tous!

Je m'excuse de répondre si tardivement, j'étais absente pour le week-end. En tout cas merci beaucoup pour tous ces conseils et votre intérêt pour ma question, je regarderai plus en détails vos commentaires demain et vous tiendrai au courant du résultat! :D

Pour répondre à Misange et Modeste DG, j'aurai malheureusement bien besoin de ces 144 graphiques en même temps - graphiques en aire à 2 couleurs, bleu en dessous de la courbe, et blanc au dessus, donc facilement interprétable. Ce serait un peu trop long d'en expliquer les raisons, mais c'est bien cette présentation qui serait la plus pratique pour moi.

Bonne nuit ;)
 

Discussions similaires

Réponses
0
Affichages
132
Réponses
1
Affichages
159

Statistiques des forums

Discussions
312 075
Messages
2 085 077
Membres
102 771
dernier inscrit
TiavinaKewin