Générer des graphiques en VBA

Bonjour à tous,

Je n'arrive pas à générer de graphiques en VBA.

Pour être honnête, je ne sais même pas comment penser ce code...

Où le mettre ? Etc.

J'ai un fichier de données et un fichier avec macro pour le traitement des données.

L'objectif est d'analyser sur l'année courante les résultats de chaque Experts d'un cabinet sur certains postes.

Je génère mes tableaux via une macro car je ne sais pas combien de lignes mon tableau aura, cela dépend du nombre d'expert appartenant au cabinet.

Donc j'ai du mal à retrouver les cellules qui me serviront de sources à la génération des graphiques.

Je vous joint mes fichiers (sur Evolution personnel.xlsm, pensez à modifier le chemin et l’extension du fichier de données sur la feuille Résultats puis cliquez sur le bouton "Intégration des données". Le Bouton2 sert à effacer les feuilles générées par le premier bouton).

Je vous ai mis une feuille(2) vous montrant l'idée de résultat que je souhaite obtenir (dans la mesure du possible bien entendu).

Je suis vraiment perdu...

Même si vous ne pouvez pas me proposer de solutions codées, serait il possible d'avoir une solution "verbale", avec des phrases m'expliquant la logique à adopter ?

Merci d'avance à tous ceux qui pourront se pencher sur mon soucis.

21donnees-macif.xlsx (138.51 Ko)

bonjour

ma suggestion :

  • mettre tes données sous forme de tableau, ce qui évite tout problème de longueur de tableau pour les TCD et les graphiques
  • dans le fichier d'exploitation, faire des TCD et des graphiques variés issus de ces TCD un graphique par feuille)
  • dans le fichier d'exploitation,, faire une feuille "Menu" avec 5 ou 6 boutons genre <Histogramme>, <Radar> (et non un truc déroulant galère) qui basculent sur la feuille voulue

Bonjour, merci pour ta réponse.

Pour être sur d'avoir bien compris ce que tu proposes :

Il faudrait que CreerTab() me renvoi un tableau en fait (tout ce qui touche à la fonction Array ?),

Et que j'utilise ses données sortantes pour les utiliser en arguments de la fonction Graph() ?

(Désolé, je suis aussi bien débutant en VBA qu'avec Excel...)

re

non, fini les garphiques créés par VBA !

tu crées d'avance tous les graphiques, chacun dans une feuille

comme ils sont basés sur des données en tableau, ils sont faciles à mettre à jour (je crois qu'il faudra enregister "clic droit "mettre à jour" en macro )

les boutons avec VBA ne servent qu'à aller depuis la feulle "menu" vers la feuille"radar" ou "histo" par exemple

Ok, je pense avoir mieux compris ^^

Merci encore !

J'essaye ça dés demain.

Je laisse le fil ouvert au cas où, et si cela fonctionne je mettrai en résolu.


Mais attend, comment faire pour préparer à l'avance mes graphiques si je ne sais pas combien d'onglet j'aurais au final ?

Pour mon cabinet, ça va, je connais mon nombre d'expert et je sais que j'aurai 5 onglets.

Mais si le fichier est utilisé par un cabinet différent, dont je ne connais pas le nombre d'expert, comment préparer ça à l'avance ?

Je prépare mes graphes sur une feuille, je test le nombre d'expert et je duplique mon onglet autant de fois que j'ai d'expert. Ça pourrait fonctionner ?

re

la meilleure méthode est de disposer d'une feuille unique pour la saisie des données

je n'ai pas ton fichier avec 5 onglets pour 5 personnes, mais ce n'est pas la solution

fais une seule feuille, avec une colonne "nom de l'expert"

et tout ira mieux, sans oublier que tu pourras facilement faire des synthèses mêlant tous les experts (par mois, par an...)

Re, les onglets (ainsi que les tableaux) se génèrent quand on clic sur le premier bouton.

La je comprend ce que tu proposes, il faut que je modifie tout du coup

Mais comme tu le soulignes, le reste sera plus simple en faisant comme ça.

Vu que j'ai passé trois semaines juste pour faire ça, je vais mettre le sujet en résolu le temps de la modification.

Merci encore pour ta patience en tout cas

re

espérant que la modif de ta macro qui crée l'onglet unique ne te pose pas trop de pb,

rem au passage : on a tous trop tendance à utiliser Excel comme on utiliserait des feuilles papier : une feuille pour alain,une autre pour Michel. Alors qu'Excel ne peut exprimer toute sa puissance (et sa facilité de programmation) qu'avec une feuille unique.

amitiés excelliennes

Je croiserai les doigts très fort lol.

Mais pour me changer un peu les idées, je vais passer à la partie "déco" en VBA.

Besoin de sortir un peu de ce code pour le ré-aborder différemment

Re,

N'y vois aucunement un manque de respect (plutôt une marque de feignantise...)

J'ai essayé de persévérer dans mon idée car je n'arrivais pas à voir le code différemment :s

En tout cas j'ai presque réussi a obtenir ce que je voulais !

Je génère mes 6 graphiques par page, comme on le ferait sur papier, mais je connais que trop peu ce logiciel pour comprendre sa vraie puissance.

Le truc, c'est que chaque graphique prends tout le tableau comme source de données et donc j'ai beaucoup trop de lignes.

Je cherche a écrire "ma source de données est : la première ligne du tableau (pour les abscisses), la ligne dont la valeur en colonne A est égale à Expert (variable String) et les 2 dernières lignes de mon tableau"

Mais je n'arrive pas à trouver de bon cours sur la manipulation des tableaux et du coup je ne sais pas comment je pourrais coder cette phrase...

Je connais le nom de mon tableau,

Ma première ligne = Tableau1[0].Value ?

La dernière ligne = Tableau1[Tableau1.Count-1] ?

L'avant dernière ligne = Tableau1[Tableau1.Count-2] ?

La ligne concernant l'expert = Tableau1[... ??

L'autre soucis que je rencontre, c'est que ma première ligne (qui représentent les mois de l'année) du tableau est traduite graphiquement par son chiffre (au lieu d'avoir janvier, février, mars... j'ai 1, 2, 3, etc.)

Une petite solution ?

Sub CreerGraph(Titre As String, Tableau As String, Expert As String)

Dim NbGraph As Integer
Dim Coords As String
Dim MaPlage As String

'On compte le nombre de graphique sur la page pour connaitre la position du graph en cours de creation
NbGraph = Sheets(Expert).ChartObjects.Count

Select Case NbGraph
Case Is = 0
    Coords = "A1"
Case Is = 1
    Coords = "H1"
Case Is = 2
    Coords = "A16"
Case Is = 3
    Coords = "H16"
Case Is = 4
    Coords = "A31"
Case Is = 5
    Coords = "H31"
Case Is = 6
    Coords = "D46"
End Select

' Identification des données
MaPlage = ""

'tracer le graphique
Charts.Add
ActiveChart.Location _
where:=xlLocationAsObject, name:=Expert
With ActiveChart
.SetSourceData Source:=Sheets("Recap").Range(Tableau), PlotBy:=xlRows
.ChartType = xlLine
.HasTitle = True
.ChartTitle.Characters.Text = Titre & " - " & Sheets("Résultats").Range("B10").Value
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
.PlotArea.Interior.ColorIndex = 2
.Axes(xlValue).MajorGridlines.Border.LineStyle = xlDot
.ChartArea.Font.Size = 6
'.Deselect
End With

With ActiveSheet.ChartObjects(NbGraph + 1)
.Left = Range(Coords).Left
.Top = Range(Coords).Top
End With
End Sub

Merci d'avance

Edit 1 : (Je dois lancer un nouveau sujet ?)

Edit 2 : (Le message est en résolu, j'ouvre un nouveau sujet "Source de données graphique")

re

je te conseille de continuer sur ce fil si tu peux supprimer le "résolu". Sinon ouvre un autre fil.

ne pouvant pas t'aider en VBA,, je passe la parole à des VBAistes qualifiés

voir ici

https://forum.excel-pratique.com/excel/source-de-donnees-graphique-t71459.html

Rechercher des sujets similaires à "generer graphiques vba"