Générer le code VBA d'un graphique
Bonjour à tous,
Dans un onglet EXCEL j'ai créé plusieurs graphiques.
J'ai besoin de contrôler la construction des graphiques par macro.
Le nombre de paramètres pour un graphique est considérable, le code est compliqué à créer et je dois reconnaitre que je n'arrive pas à accéder à tous les paramètres en macro.
Y-a-t-il un moyen de générer "automatiquement" le code VBA pour chaque graphique une fois qu'il est finalisé ?
(Enregistrer une macro et créer le graphique est super fastidieux...)
Merci
Bonsoir Thumbee,
Pour cela je te conseille la bible des Charts>>Voir ici l'excellent Peltier
Tu y trouveras tout ce qui possible de faire en terme de graphiques en VBA.
Et plus encore pour d'autres besoins.
Merci pour ta réponse XCellus.
Mais je pense qu'on ne s'est pas compris. Je ne cherche pas un cours sur les graphiques d'excel.
Je souhaite générer le plus automatiquement possible le code VBA à partir d'un graphique que j'ai fait manuellement.
(Depuis mon dernier mail j'ai essayé de générer le code VBA en enregistrant des macros. Malheureusement, ca fonctionne pour certaines options des graphiques mais pas pour toutes...)
Bonjour,
pour faire plus simple tu peux conserver ton graphique, et par macro changer juste la source des données pour l'adapter.
eric
Merci pour la réponse.
Manifestement je n’arrive pas à me faire comprendre :-)
Je trouve qu’il est très compliqué de s’y retrouver dans toutes les options. Je n’arrive pas à trouver les noms des objets ou méthodes pour modifier ne serait-ce que qqs éléments du graphique.
L’enregistrement de macro est une solution mais comme d’habitude avec Microsoft tout ne fonctionne pas. Par exemple on peut obtenir ainsi le code pour une série dont la couleur est unique mais pas si elle est dégradée. Enfin, bienvenu dans le monde de Microsoft ...
Bonjour,
Une piste à explorer :
Sous Mac et avec Excel 2016, tu dois pouvoir enregistrer un graphique en tant que modèle et l'utiliser pour tes autres graphiques.
Vérifie les options disponibles.
Cordialement.
Merci je vais regarder ce que donne l’utilisation d’un modèle.
Mais encore une fois, ce sont j’ai besoin, c’est d’obtenir le code VBA du graphique. Construire les graphiques ne me pose pas de problème, je veux pouvoir intégrer son code VBA dans les macros.
Bonjour à tous,
mais comme d’habitude avec Microsoft tout ne fonctionne pas... ...Enfin, bienvenu dans le monde de Microsoft ...
Tu dois faire partie de ceux qui trouvent que les trains n'arrivent jamais à l'heure.
L'éditeur ne fait pas du sur-mesure ni du tout mâché. Tu peux toujours (aimablement) lui écrire.
C'est déjà bien qu'il propose depuis quelques années l'enregistreur de macro.
Mais celui-ci ne peut s'adapter à tous, notamment pour les graphiques qui sont complexes car ouvrant plusieurs boîtes de dialogues utiles à l'utilisateur.
Utilise la Recherche sur ce site avec le terme graphique et tu trouveras peut être des macros qui correspondent à ton ou tes modèle(s).
Sinon poste les graphiques dont tu as besoin et certains forumeurs éventuellement te répondront avec la macro qui convient.
Maintenant je te rappelle le lien du premier message. Un ensemble de graphiques et leurs macros sont disponibles.
Il faut parfois mettre les mains dans le cambouis.
Re,
Et si Microsoft ne convient pas, tu peux aussi utiliser Numbers et AppleScript pour arriver à tes fins.
Ce sont des outils gratuits fournis par la Pomme.
Okay, je sors !...
Bonsoir,
A défaut de pouvoir générer automatiquement le code d'un graphique, et faute de pouvoir utiliser l'enregistrement de macros, voici ce que j'ai besoin de coder en VBA.
Le graphique ressemble à cela.
Il y a 3 séries :
- la série "rouge", qui est faite pour afficher une "zone rouge" sur le graphique (visuel pour alerter)
- les points bleus (série "Avant mesures")
- les points blancs (série "Après mesures")
Le graphique est protégé donc non modifiable par l'utilisateur.
L'axe des ordonnées varie en fonction de certaines valeurs fixées par ailleurs (ça n'a pas d'importance ici). Je gère ces variations via du code VBA.
Seule la construction de la série rouge me pose un problème car sa taille va varier aussi. Je veux donc la gérer en VBA
Voici le code que j'ai créé:
A l'endroit des commentaires "⟹ Fixer ici la couleur avec transparence de la série "Rouge" j'espérais pouvoir placer le code pour fixer la couleur de la série rouge (en utilisant l'enregistrement de macros mais... l'enregistrement ne fonctionne pas...)
Voici les paramètres que je souhaite fixer en VBA pour la série Rouge (seuls les paramètres avec une flèche rouge sont à prendre en compte)
- Remplissage dégradé
- Type Linéaire
- Orientation Linéaire vers le haut
- Angle 270°
- 1er point de dégradé : Couleur Blanc (la couleur n'a pas d'importance puisque la transparence sera de 100%), Position 50%, Transparence 100%, Luminosité 0%
- 2nd point de dégradé : Couleur Rouge, Position 66%, Transparence 52%, Luminosité 0%
Les 2 valeurs Position sont ici données à titre d'exemple, je les ferai varier en fonction des variations de l'axe des ordonnées.
Pour finir je veux m'assurer que les effets suivants seront toujours désactivés :
- Aucune ombre
- Aucun éclat
- Aucun contour adouci
J'ai fouillé partout, ici et dans la doc de Microsoft, impossible de trouver les paramètres à modifier en VBA.
Je vous remercie de votre aide.
Bonjour Thumbee, Le Forum,
Tu aurais dû laisser (plutôt qu'une image) ton code avec la fonctionnalité </> du menu ci-dessus. Ou un fichier exemple.
Pour ta demande tu as 2 possibilités:
Une rapide ou il suffit de sauver ton graphique déjà entièrement réalisée (donc faire un doublon) dans une zone à part de ta feuille.
Exemple par le code ci-dessous.
Sub Graph()
Dim ChtAvAp, ChtTwo As Chart
Set ChtAvAp = ActiveSheet.ChartObjects("GraphAvAp").Chart
'Sauvegarde du graphique réalisé
ChtAvAp.SaveChartTemplate Filename:=ModelAvAp
'Ensuite avec un deuxième graphique simple
Set ChtTwo = ActiveSheet.ChartObjects("GraphTwo").Chart
'Tu appliques la mise en forme du premier
ChtTwo.ApplyChartTemplate Filename:=ModelAvAP
'suite du code...Une plus longue (après plusieurs essais sur un 2ième graphique) selon les images commentées en fin de ton dernier message.
Sub Graphik()
Dim ChtAvAp, ChtTwo As Chart
Set ChtAvAp = ActiveSheet.ChartObjects("GraphAvAp").Chart
Set ChtTwo = ActiveSheet.ChartObjects("GraphTwo").Chart
'La Zone complète de graphique se gère par ChartArea et sa propriété Format puis les "propriétés enfants" (Fill ou Line) etc...
'Exemple pour une couleur de fond du graphique
ChtTwo.ChartArea.Format.Fill.BackColor.RGB = RGB(89, 89, 89)
'La zone de traçage (données) du graphique se gère par PlotArea et idem avec la propriété Format puis les autres accessibles par .
'Donc ChtTwo.PlotArea.Format.Fill (ou Line ou autre) puis sélection de ce que tu souhaites appliquer comme "propriétés de format"
'Suite du code...Bon courage.
Merci X Cellus
Si je comprends bien ta première méthode, je crée un template à partir du graphique d'origine et je le sauvegarde quelque part (onglet caché par exemple) et à chaque fois que je veux mettre à jour mon graphique d'origine je rappelle le template. Ensuite je modifie les quelques valeurs que je veux faire varier. Ça ne me dit toujours pas comment accéder par exemple à une série en dégradé mais je vais me débrouiller.
Dans ta deuxième méthode, je ne comprends pas pourquoi il faut utiliser un deuxième graphique puisqu'il s'agit finalement de modifier le graphique d'origine directement en VBA.
Mais en tout cas les infos que tu m'as données m'ont mis sur la piste je devrais y arriver. J'utilise la doc en ligne de Microsoft, jusqu'ici je ne la trouve pas très pratique. Y a-t-il une autre façon d'accéder à toutes ces informations, idéalement via un site en ligne ?
Bonjour Thumbee, Le Forum,
Si je comprends bien ta première méthode, je crée un template à partir du graphique d'origine
Exact, cela te permet de conserver ton graphique originel. Mais tu peux avoir plusieurs templates qui suivent à chaque fois les modifs finales de ton 1ier. En les distinguant par incrémentation.
Dans ta deuxième méthode, je ne comprends pas pourquoi il faut utiliser un deuxième graphique
Le 2ième graphique est celui dont je teste les propriétés par macro. Je fais et défais. Et par comparaison avec le 1ier je peux vérifier si j'agis sur le bon réglage.
Exemple:
'Zone de Traçage. Modif zone rouge et son positionnement (angle)
ChtTwo.PlotArea.Format.Fill.GradientAngle = 270
ChtTwo.PlotArea.Format.Fill.ForeColor.RGB = RGB(0, 255, 0)En variant la couleur et l'angle avec différentes valeurs puis en les rétablissant selon les valeurs du 1ier graphique.
Par comparaison je remarque si j'agis sur les bonnes propriétés. Celles dont tu recherches les paramètres dans l'image au bas de ton post de dimanche.