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
 

Fichiers joints

MJ13

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

Bonjour Cooralie

Je n'a pas trop le temps en ce moment, mais il serait plus simple de mettre un fichier Excel sans données confidentielle le plus simple possible avec au moins un graphique formaté. Ensuite quelqu'un pourra t'aider plus facilement :).

Sinon, quelle est ta version d'excel (cela m'interpelle sur ton image)?
 

Cooralie

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

Oui j'ai essayé de joindre le tableau Excel mais le fichier est trop gros, même en version simplifié et zippé!

Excel 2011 pour Mac (d'où la présentation ^^)
 

camarchepas

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

Bonjour Mj13, Cooralie,

Si tu pouvais juste nous joindre les 2 premiers tableaux après l'on peut dupliquer à l'infini et sauf cas spécifique, cela devrait être suffisant.

Car sans support , c'est vraiment pas top à faire les tests qui garantissent que notre raisonnement tiens la route.
 

Cooralie

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

Mais j'ai minimisé et zippé, malgré tout ça fait tjs 2,6 Mo, je ne comprends pas sur le forum c'est limité à 200 ko, comment je peux faire?
 

MJ13

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

Re , Bonjour Camarchepas

On ne veut pas tout ton fichier, mais juste une dizaine de séries avec une dizaine de points avec 1 ou 2 graphiques. Cela ne devrait pas dépasser une centaine de ko.

En plus, cela permettra de voir si entre MAC et PC, il y a des incompatibilités :).
 

Modeste geedee

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

Bonsour®
Mais j'ai minimisé et zippé, malgré tout ça fait tjs 2,6 Mo, je ne comprends pas sur le forum c'est limité à 200 ko, comment je peux faire?
:rolleyes:
au regard de la façon dont EXCEL gére la mémoire, c'est une trés mauvaise idée de concevoir la duplication de144 graphiques !!

envisager la génération dynamique et à la demande de ces graphiques
enregistrer quelques uns des tes graphiques en tant que modèles , qui pourront ensuite etre appliqués lors de la génération dynamique.

voir cet article pour de nombreux exemples :
Making your dashboards interactive [Dashboard Essentials] | Chandoo.org - Learn Microsoft Excel Online
 

Cooralie

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

Bonjour Modeste geedee,

Je vous avoue ne pas avoir très bien compris votre message. Le but est d'obtenir une vue d'ensemble des 144 graphiques (d'ou l'utuilisation de graphiques en aires, plus visuels), il me les faut donc tous en même temps sur une seule feuille.

De plus je n'ai pour l'instant qu'un seul graphique puisque ma macro ne tourne pas, ce n'était donc pas la raison pour laquelle mon fichier était trop lourd.

Je ne comprends pas quelle démarche vous préconisez, et je ne suis pas sûre que vous ayez compris la mienne?
 

Cooralie

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

Bonjour camarchepas,

Du coup j'ai mis la pièce jointe comme vous m'aviez dit, auriez vous une idée?
 

kjin

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

Bonjour,
Dans l'exemple, tu n'indiques pas où sont stockées tes données !
Au moins les 2 premières matrices horizontalement et verticalement
A+
plus
 

Cooralie

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

Bonjour,
Dans l'exemple, tu n'indiques pas où sont stockées tes données !
Au moins les 2 premières matrices horizontalement et verticalement
A+
plus
Mes plages de données sont placées dans la feuille ainsi:

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

c'est à dire que :
les plages de données sont placées toutes les 3 colonnes, à partir de la colonne D (ou 4) --> 1+3*i
Elles ont une hauteur de 180 valeurs à chaque fois et sont séparées de 5 lignes à chaque fois. Elles commencent donc toutes les 186 lignes, en partant de la ligne 5 --> 5+(j-1)*186

Donc en tout 144 plages de données de chacune 180 valeurs.

Je ne sais pas si c'est clair... :$ ?
 

Cooralie

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

Bonjour camarchepas,

Du coup j'ai mis la pièce jointe comme vous m'aviez dit, auriez vous une idée?
 

MJ13

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

Bonjour à tous

Tu peux essayer d'adapter un code de ce type. Par contre sur Mac, pas sur que cela fonctionne.

Juste une question: Sur Mac, as-tu l'enregistreur de macros :confused:.
 

Fichiers joints

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
 

Fichiers joints

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.
 

kjin

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

Bonjour,
En reprenant le code et le fichier, sur 287 séries
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
A+
kjin
 
Dernière édition:

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas