Mise en forme de graphique sur Excel

Bonjour tout le monde,

Je suis en train de créer une interface sur Visual Basic afin de rentrer des consommations électriques. Lors de chaque relevé, la date est relevée. Je crée donc un graphique qui prend en compte la date (abscisse) et les relevés (insertion xlColumnClustered). Seulement, j'aimerais bien avoir une colonne par mois et pas une pour chaque jour.

J'ai donc modifié mon tableau de données pour sommer les valeurs à chaque fin de mois et dans mon graphique final les bonnes valeurs sont prises. J'aimerai maintenant mettre les MOIS comme unité de base et pas les JOURS.

Après nombreux tests, mon code a marché mais pas longtemps. Je n'arrive plus à le faire fonctionner (même avec les nombreuses infos trouvées sur internet) aujourd'hui donc je viens demander un peu d'aide.

Voici les quelques lignes de mon code sur le graphique. Si vous avez besoin de plus d'infos pour me répondre, je vous les enverrai.

Dim GraphiqueElec As Shape

Set GraphiqueElec = Sheets("Résultats Electricité").Shapes.AddChart2(216, xlColumnClustered)

GraphiqueElec.Chart.ChartWizard Source:=Sheets("Données Electricité").Range("B2", Range("E2").End(xlDown)), gallery:=xlColumnClustered, PlotBy:=xlColumns, Title:="Consommations d'électricité"

With GraphiqueElec.Chart

.HasLegend = True

.Legend.Font.ColorIndex = 1

.ChartArea.Font.Name = "Calibri"

With .Axes(xlCategory, xlPrimary)

.CategoryType = xlTimeScale

.BaseUnit = xlMonths

.MajorUnit = 1

End With

End With

Merci d'avance pour votre aide

Bonne fin de journée!

PS: Si vous pouvez aussi m'aider sur le code nécessaire pour garder toujours la même taille d'interface je suis preneuse, pcq ma fenêtre est toujours rognée ou trop petite...

Bonjour

Pourquoi pas tout simplement un TCD/GCD ?

Parce que je débute totalement et ne maîtrise pas Excel sur le bout des doigts

Je vais essayer ça merci!

Si vous avez la solution également pour la mise en forme de l'interface je suis preneuse!

RE

Sans fichier exemple...

Re,

Quelle partie du code souhaitez-vous que je vous envoie pour que vous m'aidiez?

Bonjour

Pas le code mais le fichier qu'on voit le contexte

Bonjour,

Je vous envoie le fichier mais il est loin d'être fini.

De plus j'ai essayé de faire un tcd en utilisant la macro (car les programmes exemples que je trouve sur internet sont tous différents et je n'arrive pas à les appliquer). J'ai une erreur au niveau de ce qui est surligné en jaune dans la capture d'écran: avez-vous une idée de ce qui bloque?

Bon début de semaine et merci d'avance!

codetcd

Bonjour

De façon générale on ne construit pas un TCD par VBA

Tu dis débuter sur Excel.

Avant de coder, donc d'automatiser, il faudrait déjà apprendre à l'utiliser et acquérir les bonnes pratiques car on n'automatise bien que ce qu'on connait bien

Ton onglet Données Electricité a une disposition des données peu compatible avec une exploitation par TCD/GCD

Il faut raisonner en table et utiliser des tableaux structurés

La saisie doit concerner les données brutes :

  • une colonne date, une colonne type (Vie ou Chantier) une colonne Relevé
  • une ligne par date et type

Tous les calculs se feront par TCD pas dans le tableau de saisie

Re,

Merci pour ta réponse rapide. J'ai changé mon tableau dans "Données Electricité" qui ne fonctionnait pas du tout, mais par contre je n'ai pas trop compris comment tu m'as expliqué les différentes colonnes à organiser... Sans passer par VBA, mon TCD et GCD fonctionnent très bien sans tout avoir pris en compte.

Bon je sais que j'essaie d'en faire beaucoup d'un coup mais je vais expliquer le contexte: je suis en stage de fin d'études d'ingénieur dans le domaine du bâtiment durable. J'ai déjà codé mais pas sur Visual Basic et j'ai déjà utilisé Excel donc j'ai quand même quelques bases c'est pourquoi je me suis lancée là dedans. Je pensais pas autant galérer mais le chantier a déjà commencé donc je dois rendre quelque chose de correct avant mercredi. L'idée est que le directeur de chantier n'ait qu'à renseigner ses relevés et tout se trace pour lui donc c'est pour ça que j'essaie de tout automatiser. Et comme ça fait 10 jours que je suis dessus, pas trop envie d'abandonner...

J'ai fait les modifs que tu m'a indiqué et mon code fonctionne un peu mieux mais toujours une nouvelle erreur que j'arrive pas à corriger... : erreur d'exécution 1004

"le nom du champ du tableau croisé dynamique n'est pas valide. Pour créer un rapport de tableau croisé dynamique, vous devez utiliser les données sous forme de liste avec des étiquettes de colonnes. Si vous changez le nom d'un tableau croisé dynamique, vous devez taper un nouveau nom pour le champ"

Je met la capture d'écran en pièce jointe avec mon nouveau fichier.

codetcd2

RE

Comme déjà dit on ne construit quasi jamais les TCD par VBA

On fait un modèle avec les TCD/GCD et on change le source

J'ai modifié ton tableau de relevé car les dates étant en texte en non en date et créé un TCD et un GCD pour montrer un exemple

L'avantage des TCD/GCD c'est qu'il s'adaptent à la table du tableau structuré source

ON ne rée pas un TCD sur un plage de cellule depuis que les tableaux structuré existent, soit 13 ans

D'accord merci. Tu as modifié, mais est ce que tu as oublié de mettre le document en pièce jointe ou c'est volontaire?

Sinon j'ai réussi à faire quelque chose qui fonctionne bien.

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _

"'Données Electricité'!R2C3:R103C6", Version:=6).CreatePivotTable TableDestination:= _

"'Résultats Electricité'!R3C2", TableName:="aze", DefaultVersion:=6

Sheets("Résultats Electricité").Select

Cells(3, 2).Select

With ActiveSheet.PivotTables("aze")

Blabla

End With

With ActiveSheet.PivotTables("aze").PivotCache

.RefreshOnFileOpen = False

.MissingItemsLimit = xlMissingItemsDefault

End With

ActiveSheet.PivotTables("aze").RepeatAllLabels _

xlRepeatLabels

ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select

ActiveChart.SetSourceData Source:=Range("'Résultats Electricité'!$B$3:$D$20")

With ActiveChart.PivotLayout.PivotTable.PivotFields("Mois")

.Orientation = xlRowField

.Position = 1

End With

ActiveChart.PivotLayout.PivotTable.AddDataField ActiveChart.PivotLayout. _

PivotTable.PivotFields("Relevé BaseVie"), "Somme de Relevé BaseVie", xlSum

ActiveChart.PivotLayout.PivotTable.AddDataField ActiveChart.PivotLayout. _

PivotTable.PivotFields("Relevé Chantier"), "Somme de Relevé Chantier", xlSum

ActiveChart.PivotLayout.PivotTable.AddDataField ActiveChart.PivotLayout. _

PivotTable.PivotFields("Relevé Global"), "Somme de Relevé Global", xlSum

RE

J'ai du valider avant la fin de l'upload

C réparé

Merci pour ton aide! C'est une belle mise en forme du graphique

Seulement, j'ai fait tous ces trafics pour avoir un graphique avec la somme des relevés pour chaque mois...

Ah j'ai rien dit!

Mais est ce que lorsqu'un utilisateur externe viendra rentrer des données, elles seront prises en compte dans le graphique? Je ne veux pas qu'il est à refaire les démarches. C'est ça que j'arrive pas à voir.

RE

Il faut actualiser le TCD/GCD

Le plus simple est une ligne de code pour déclencher cette actualisation

  • soit à l'activation de la feuille résultats
  • soit en fin de saisie
Rechercher des sujets similaires à "mise forme graphique"