Creation de Graphique en Vba
Pop16
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Creation de Graphique en Vba
- Changer de carte graphique - Guide
- Creation de compte google - Guide
- Creation de site web - Guide
- Creation compte gmail - Guide
- Création graphique en ligne gratuit - Guide
6 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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?
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
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
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 ^^
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 ^^
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
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).
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
que vaut L?
il est parfois utile de décomposer les instructions, pour identifier quelle partie pose problème.
par exemple, au lieu de
tu pourrais faire:
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:=rgcela te permet aussi d'examiner la valeur de la variable ad au moment de l'erreur.
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
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
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 ^^
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 ^^
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.