Creation de Graphique en Vba

Fermé
Pop16 - 25 févr. 2020 à 20:13
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 - 27 févr. 2020 à 21:10
Bonjour,

Je souhaiterais réaliser un graphique en prenant directement les valeurs ou texte venant d'un tableau. Cependant je ne sais pas comment ordonner au programme de mettre en Ordonnée les valeurs de la colonne B ( qui sont des nombres) et en Abscisse celles de la colonne C (texte avec des Prénom)

Je sais qu'il est possible d'enregistrer une macro pour ensuite en extraire le code mais je ne le trouve pas du tout intuitif pour un débutant..

Si vous avez quelque conseils ou astuces n'hésitez pas ;)
Merci
A voir également:

6 réponses

yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474
25 févr. 2020 à 21:48
bonjour, as-tu cru celui qui t'a dit qu'il était intuitif de programmer et qu'un débutant ne devait pas commencer par s'exercer?
0
Merci pour l'aide !????
0
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474 > Pop16
26 févr. 2020 à 11:03
un conseil: commence à faire le travail, enregistre la macro, essaie de l'adapter.
si tu souhaite de l'aide, montre-nous la macro adaptée, et décris précisément ce que tu souhaites obtenir.
et surtout, explique pourquoi tu as besoin d'une macro, il me semble que Excel permet de faire cela sans macro.
0
Bonjour,

J'ai besoin de cette macro car je souhaite réaliser des graphiques rapidement sur 9 pages différentes. Les colonnes à mettre en abscisses et en ordonnées sont du même rang sur chacune de ces feuilles.

Voici le code de la macro enregistrée

Sub Test6()

Range("B1:B15,E1:E15").Select
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("'Individuel H'!$B$1:$B$15,'Individuel H'!$E$1:$E$15")
ActiveChart.SetElement (msoElementDataLabelOutSideEnd)
End Sub

Ce code met la colonne B en abscisse (format texte) et E en ordonnée (Valeur).Les premières lignes sont plus facile à comprendre alors que les deux dernières je suis perdu..
Quand je trouve de nombreux code avec des tabLeaux ou array je me dis que c'est ce qu'il me faut mais je n'arrive encore pas à adapter le code selon mon besoin.
Je n'arrive pas à comprendre comment il choisi de mettre soit la colonne B soit la E en abscisse...


J'aimerais en plus que la taille du graphique s'adapte en fonction de la dernière ligne non vide de chaque tableau. Voici comment j'ai modifié le code:

Sub Graphique2()
'
' Test4 Macro
'
Dim L As Integer
Dim nom As String
nom = ActiveSheet.name
L = Sheets(nom).Range("B100").End(xlUp).Row


Range("B2:B"&L", E2:E"&L).Select
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
(ERREUR ICI) ActiveChart.SetSourceData Source:=Worksheets("Individuel H").Range("B2:B" & L",E1:E" & L)
ActiveChart.SetElement (msoElementDataLabelOutSideEnd)
End Sub


Le message d'erreur est : la méthode range de l'objet global à échouée..
J'ai beau passer par plusieurs méthode rien à faire..

Merci
0
Autre petit exemple:

With Charts("NomGraphique").Axes(xlCategory)
.HasTitle = True
.AxisTitle.Text = "NomAxesdesX"
End With

Pour ce code il n'y a pas trop de soucis pour le comprendre et je vois enfin intervenir le Axes(xlCategorie) qui semble pourvoir être une bonne solution bien qu'il ne me permet pas de choisir la valeur des abscisses dans ce cas. Et, encore une fois j'y passe des heures sans succès ^^
0
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474
Modifié le 26 févr. 2020 à 19:14
ne peux-tu pas enregistrer une macro pendant que tu crées un graphique tel que tu le souhaites, puis modifier la macro pour en créer 9? cela t'éviterait de chercher comment contrôler le choix des abscisses et des ordonnées, non?

en ce qui concerne la taille des graphiques, moi j'enregistrerais une macro pendant que je modifie la taille d'un graphique, pour découvrir quels attributs contrôlent la taille.

en ce qui concerne l'erreur avec la méthode range, je suis surpris que cela passe deux lignes plus haut, alors que tu devrais avoir une erreur de syntaxe sur chacune de ces lignes. il me semble qu'il faut plutôt
Range("B2:B" & L & ",E1:E" & L)
.
0
Pop16 > yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024
27 févr. 2020 à 12:59
Bonjour,

Malheureusement j'ai toujours ce même message d'erreur..
0
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474
27 févr. 2020 à 13:15
que vaut L?
il est parfois utile de décomposer les instructions, pour identifier quelle partie pose problème.
par exemple, au lieu de
 ActiveChart.SetSourceData Source:=Worksheets("Individuel H").Range("B2:B" & L & ",E1:E" & L)
,
tu pourrais faire:
dim rg as range, ad as string
ad="B2:B" & L & ",E1:E" & L
set rg = Worksheets("Individuel H").Range(ad)
 ActiveChart.SetSourceData Source:=rg
cela te permet aussi d'examiner la valeur de la variable ad au moment de l'erreur.
0

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

Posez votre question
Bonjour,

Merci beaucoup ça paraît plus simple comme ça en effet pour la sélection et même super utile pour sélectionner les colonnes dans différentes feuilles!

Mon L correspond au numéro de la dernière ligne non vide. Ce qui me permet de créer tableau dimensionner en fonction de nombre de personnes dans ce tableau.

L = Sheets(nom).Range("B100").End(xlUp).Row

Merci beaucoup
0
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474
27 févr. 2020 à 17:54
j'ai bien vu l'instruction qui assigne une valeur à L. ma question était "que contient L au moment où l'erreur se produit"?
sur quelle ligne se produit-l'erreur après avoir appliqué ma suggestion?
as-tu examiné la valeur de AD?
0
Pop16 > yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024
27 févr. 2020 à 19:15
C'est rg qui fait planter le code : erreur définie pas l'application ou par l'objet.
Aucune idée de comment je pourrais en plus lire les valeurs des variables avant que le code ne se stoppe
0
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474 > Pop16
27 févr. 2020 à 19:53
rg est utilisé dans deux lignes. c'est laquelle qui fait planter?
une façon de voir le contenu des variables:
- choisir "debugger" au moment où le message d'erreur s'affiche
- positionner le curseur sur la variable
0
Le premier rg fait bouger. Selon lui la variable doit être dans un With...

J'ai réussi à obtenir ce que je souhaite avec l'ancien code. L'erreur de range est toujours présente sauf si je lance le code en dehors de l'interface vba. Donc depuis une feuille ou bonton..

Ca resoud le problème mais ne m'aide pas forcément à le comprendre ^^
0
yg_be Messages postés 22859 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 7 juin 2024 1 474
27 févr. 2020 à 21:10
pourquoi écris-tu "Selon lui la variable doit être dans un With"? selon qui?
as-tu essayé de voir le contenu des variables comme expliqué?

je ne suis pas certain de comprendre quelle aide tu demandes.
0