PB acces aux graphiques via code vb?
Dernière réponse : dans Programmation
Bonjour tout le monde.
Je viens de découvrir ce formidable site d'entraide en VB et malheureusement je n'arrive pas à résoudre mon PB tout seul.
Pourriez-vous, je vous prie essayer de me fournir une réponse aux questions qui suivent.
Cela fait maintenant 3 jours que je cherche un moyen de régler l'échelle des X de différents graphiques Excel en automatique grâce à une macro / script VB.
Le but est d'avoir les deux bouts de l'axe exactement à la valeur des données utilisées, ni plus, ni moins.
C'est une question d'élégance...
Certains des graphiques sont dans des feuilles indépendantes, là pas de PB.
D'autres sont des graphes dans des feuilles de calculs Excel, là commence mon problème vis à vis de la macro.
Donc j'ai 2 solutions:
1) Soit, je trouve un moyen de régler "l'offset" par défaut de Excel sur les échelles des axes X. (autre post).
2) Soit, je trouve le moyen de faire tourner la bonne macro.
J’ai déjà la liste des graphiques/chart que je souhaite redéfinir.
Des graphiques ont le même nom ou le même index sur des pages qui elles sont différentes.
Les objets/classes chart ou charts n’existe qu’avec les applications ou les workbook.
Les shape/shapes pourraient servir avec des tests sur la propriété type mais ceci ne donne que des shapes ou des objets incompatibles avec les chart/charts.
J’ai besoin d’obtenir des chart/charts pour avoir accès à : « .Axes(xlCategory).MinimumScale » et« .Axes(xlCategory).MaximumScale »
Mes questions sont donc:
1- Comment à partir de ma liste de noms de pages et de noms/références de graphiques puis-je facilement « les atteindre » pour en changer l’échelle des X.
Un bout de mon code pour expliciter :
Je précise que le poste que j'utilise n'a pas la fameuse aide en ligne... mais quand même un acces internet.
Et je suis incapable de retrouver un CD pour compléter l'intall.
Voila, merci bcp pour votre aide.
J’en ai besoin avant de ne plus avoir de cheveux et de dents.
Je viens de découvrir ce formidable site d'entraide en VB et malheureusement je n'arrive pas à résoudre mon PB tout seul.
Pourriez-vous, je vous prie essayer de me fournir une réponse aux questions qui suivent.
Cela fait maintenant 3 jours que je cherche un moyen de régler l'échelle des X de différents graphiques Excel en automatique grâce à une macro / script VB.
Le but est d'avoir les deux bouts de l'axe exactement à la valeur des données utilisées, ni plus, ni moins.
C'est une question d'élégance...
Certains des graphiques sont dans des feuilles indépendantes, là pas de PB.
D'autres sont des graphes dans des feuilles de calculs Excel, là commence mon problème vis à vis de la macro.
Donc j'ai 2 solutions:
1) Soit, je trouve un moyen de régler "l'offset" par défaut de Excel sur les échelles des axes X. (autre post).
2) Soit, je trouve le moyen de faire tourner la bonne macro.
J’ai déjà la liste des graphiques/chart que je souhaite redéfinir.
Des graphiques ont le même nom ou le même index sur des pages qui elles sont différentes.
Les objets/classes chart ou charts n’existe qu’avec les applications ou les workbook.
Les shape/shapes pourraient servir avec des tests sur la propriété type mais ceci ne donne que des shapes ou des objets incompatibles avec les chart/charts.
J’ai besoin d’obtenir des chart/charts pour avoir accès à : « .Axes(xlCategory).MinimumScale » et« .Axes(xlCategory).MaximumScale »
Mes questions sont donc:
1- Comment à partir de ma liste de noms de pages et de noms/références de graphiques puis-je facilement « les atteindre » pour en changer l’échelle des X.
Un bout de mon code pour expliciter :
'Sélection de la plage de données concernant la liste des feuilles et des graphs dont l'axe X doit être mis en forme
'Cette plage de données est formée de 2 colonnes :
' l'une pour les noms des feuilles,
' l'autre pour les références de graphes.
'Cette plage de donnée commence à la cellule nommée "Liste_Graph_Axe_X_a_adapter".
'La fin de la plage à sélectionnée se trouve en bas de la colonne des nom de feuilles.
'Cette fin est inconnue donc nous utilisons ".End(xlDown)" pour trouver automatiquement et simplement cette fin.
'Les références des graphes se trouvent dans la colonne à droite des noms des feuilles.
'Nous utilisons donc un décalage à droite ".Offset(0, 1)" pour englober cette colonne.
Sheets("Parametres").Range(Range("Liste_Graph_Axe_X_a_adapter"), Range("Liste_Graph_Axe_X_a_adapter").End(xlDown).Offset(0, 1)).Select
For Each MaPlage In Selection
'L'analyse de la plage sélectionnée se fait cellule par cellule or nous avons besoin de la faire ligne par ligne.
' "Maplage" va donc être la cellule contenant le nom de la feuille,
' et "Maplage.Offset(0,1)" va être la cellule contenant la référence du graphe dont l'échelle de l'axe des X doit être adaptée.
'Choix de la feuille dans la "Maplage" en cours de traitement.
'Choix du graphe dans "MaPlage".Offset(0,1)" en cours de traitement.
'et choix de l'axe des "X" de ce graphe pour le mise en forme.
With Sheets(MaPlage.Value).Item(MaPlage.Offset(0, 1).Value).Axes(xlCategory)
‘ !!!!! LA CA PLANTE !!!!
'Affectation de la date de début au minimum de l'axe des "X"
'pour la mise à la bonne échelle de l'axe des "X".
.MinimumScale = Debut
'Affectation de la date de fin au maximum de l'axe des "X"
'pour la mise à la bonne échelle de l'axe des "X".
.MaximumScale = Fin
Je précise que le poste que j'utilise n'a pas la fameuse aide en ligne... mais quand même un acces internet.
Et je suis incapable de retrouver un CD pour compléter l'intall.
Voila, merci bcp pour votre aide.
J’en ai besoin avant de ne plus avoir de cheveux et de dents.
Autres pages sur : acces graphiques via code
Lassé par la pub ? Créez un compte
Trucs pour connaître les objets sans avoir l'aide ou même quand on l'a :
- Utilise l'explotateur d'objet !
- Utilise les espions : clique droit sur ta variable, ajouter un espion.
Si cette variable est un objet, tu découvriras toute l'arborescence des
attributs et leur valeur, qui peuvent être eux-même d'autres objets.
- Utilise l'explotateur d'objet !
- Utilise les espions : clique droit sur ta variable, ajouter un espion.
Si cette variable est un objet, tu découvriras toute l'arborescence des
attributs et leur valeur, qui peuvent être eux-même d'autres objets.
Désolé Zeb, ca ne fontionne pas.
J'obtient toujours le message d'erreur:
"
Erreur d’execusion ‘438’:
Propriété ou méthode non gérée par cet objet.
"
J'ai fait une pause depuis tout à l'heure.
J'ai repris depuis le début et j'ai trouvé une piste.
Ca à l'air de fonctionner.
Je continue.
Je posterais ma sol quand elle sera nickel Chorme.
J'ai essayé ta correction Axes(xlValue) => c'est l'axe des "Y" qui change pas l'axe des "X"?????
Avec Axes(xlCategory) ca marche????
J'ai une autre question qui pourra être l'objet d'un autre poste:
1- Comment effectuer 2 "next" consécutifs dans une boucle "for each" ?
2- Quel pointeur / référence ou propriété faut-il faire évoluer / changer?
J'obtient toujours le message d'erreur:
"
Erreur d’execusion ‘438’:
Propriété ou méthode non gérée par cet objet.
"
J'ai fait une pause depuis tout à l'heure.
J'ai repris depuis le début et j'ai trouvé une piste.
Ca à l'air de fonctionner.
Je continue.
Je posterais ma sol quand elle sera nickel Chorme.
J'ai essayé ta correction Axes(xlValue) => c'est l'axe des "Y" qui change pas l'axe des "X"?????
Avec Axes(xlCategory) ca marche????
J'ai une autre question qui pourra être l'objet d'un autre poste:
1- Comment effectuer 2 "next" consécutifs dans une boucle "for each" ?
2- Quel pointeur / référence ou propriété faut-il faire évoluer / changer?
Citation :
Trucs pour connaître les objets sans avoir l'aide ou même quand on l'a : - Utilise l'explotateur d'objet !
- Utilise les espions : clique droit sur ta variable, ajouter un espion.
Si cette variable est un objet, tu découvriras toute l'arborescence des
attributs et leur valeur, qui peuvent être eux-même d'autres objets.
Merci pour l'info.
Explorateur et espion: je connais
mais avec l'aide en ligne ca v aplus vite
D'ailleurs qui peut réellement dire que son code est parfait s'il n'utilise pas les espions et le debugage pas à pas avec "F8".
En plus des espions, il y a aussi la fenetre de "Variables locales".
menu: "Affichage" -> "Fenêtre de Variables locales".
Tchuss A+
Dans mon code je sélectionne une zone (range) de 2 colonnes sur qq lignes.
colonne1 = noms des feuilles.
colonne2 = noms des graphes.
Je fais un "for each MaCelulle in selection".
Dans ma boucle j'utilise:
MaCelulle.value
et MaCelulle.offset(0,1).value
pour repérer mes graphiques et ensuite je peux faire le réglage de l'échelle de l'axe X.
Le pb vient à la fin de la boucle car le "next" ne se décalle que d'une cellule or j'ai besoin de deux décallage consécutif de "MaCelulle" dans "selection" pour changer de ligne...
Et là je bloque.
Car faire "Macelulle = MaCelulle.offset(0,1)" ne marche pas.
Je regarde les propriétés et fonctions de "range" et "cell" mais je n'ai pas encore trouver de solution qui me permettrait de décaler l'adresse la reference de "Macelulle" avant le next.
colonne1 = noms des feuilles.
colonne2 = noms des graphes.
Je fais un "for each MaCelulle in selection".
Dans ma boucle j'utilise:
MaCelulle.value
et MaCelulle.offset(0,1).value
pour repérer mes graphiques et ensuite je peux faire le réglage de l'échelle de l'axe X.
Le pb vient à la fin de la boucle car le "next" ne se décalle que d'une cellule or j'ai besoin de deux décallage consécutif de "MaCelulle" dans "selection" pour changer de ligne...
Et là je bloque.
Car faire "Macelulle = MaCelulle.offset(0,1)" ne marche pas.
Je regarde les propriétés et fonctions de "range" et "cell" mais je n'ai pas encore trouver de solution qui me permettrait de décaler l'adresse la reference de "Macelulle" avant le next.
Citation :
TaCellule est un objet, il faut faire un Set TaCellule = TaCellule.offset(0,1).Dis-moi que t'es content de le savoir.
Bonjour Zeb,
Merci pour ton aide et ton support.
Malheureusement cette Xieme solution ne passe pas...
J'ai également essyaé:
'MaPlage = MaPlage.Offset(0, 1)
'MaPlage = MaPlage.Next
'Set MaPlage = MaPlage.Next
'Set MaPlage = MaPlage.Offset(0, 1)
Rien ne passe.
Chaque opération effectue un décalage vers la droite sans jamais effectuer un saut de ligne.
Seul le "Next" effectue l'opération correctement.
J'ai donc opté pour une solution bcp + simple => ne pas sélectionner 2 colonnes mais 1 seule.
Et là miracle, ca marche et pas besoin de "set", "offset" spécial.
Maintenant mon code passe bien plus de PB, je poste la solution à la suite.
Encore merci pour ton aide.
L'émulation et la prise de recul (et de repos) ca aide.
A+
Voici un code permettant à partir d'une liste pré-définie d'accéder à des graphiques Excel et d'en modifier certains parametres notamment les exchelles de X.
Sub Graph_echelle_X_auto()
'
'
Dim Debut As Double
Dim Fin As Double
Dim MaPlage As Range
Dim MaFeuil As Worksheet
Dim MonGraph As Chart
'Recherche du parametre de date de début d'extraction.
'L'information se trouve dans la feuille de "Parametres", dans la plage de cellule nommée "Date_Debut" (1 cellule).
Debut = Sheets("Parametres").Range("Date_Debut").Value
'Recherche du parametre de date de fin d'extraction.
'L'information se trouve dans la feuille de "Parametres", dans la plage de cellule nommée "Date_Fin" (1 cellule).
Fin = Sheets("Parametres").Range("Date_Fin").Value
'Sélection d'une feuille excel pour éviter un bug de sélection.
Sheets("Parametres").Select
'Sélection de la plage de données concernant la liste des feuilles et des graphs dont l'axe X doit être mis en forme
'Cette plage de données est formée de 2 colonnes :
' l'une pour les noms des feuilles,
' l'autre pour les références de graphs.
'Cette plage de donnée commence à la cellule nommée "Liste_Graph_Axe_X_a_adapter".
'La fin de la plage à sélectionnée se trouve en bas de la colonne des nom de feuilles.
'Cette fin est inconnue donc nous utilisons ".End(xlDown)" pour trouver automatiquement et simplement cette fin.
'Les références des graphs se trouvent dans la colonne à droite des noms des feuilles.
'Nous utilisons donc un décallage à droite ".Offset(0, 1)" pour englober cette colonne.
Sheets("Parametres").Range(Range("Liste_Graph_Axe_X_a_adapter"), Range("Liste_Graph_Axe_X_a_adapter").End(xlDown)).Select
For Each MaPlage In Selection
'L'annalyse de la plage sélectionnée se fait cellule par cellule or nous avons besoin de la faire ligne par ligne.
' "Maplage" va donc être la celulle contenant le nom de la feuille,
' et "Maplage.Offset(0,1)" va être la cellule contenant la référence du graph dont l'échelle de l'axe des X doit être adaptée.
'Next MaPlage
If (IsEmpty(MaPlage.Offset(0, 1).Value)) Then
'S'il n'a pas de référence de graph alors nous avons un graph indépendant
'Il est placé dans une feuille de graph et non pas placer/coller dans une feuille de calcul avec d'autres graphs.
'Choix du graph(qui est une feuille indépendante) dans "MaPlage" de la plage en cours de traitement.
'et choix de l'axe des "X" de ce graph pour le mise en forme.
With Sheets(MaPlage.Value).Axes(xlCategory)
'Affectation de la date de début au minimum de l'axe des "X"
'pour la mise à la bonne échelle de l'axe des "X".
.MinimumScale = Debut
'Affectation de la date de fin au maximum de l'axe des "X"
'pour la mise à la bonne échelle de l'axe des "X".
.MaximumScale = Fin
'Divers paramétres par défaut.
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
Else
'Sinon il y a au moins 1 graph dans la feuille de calcul en cours de traitement
'Attribution/Création d'une feuille avec le nom de feuille en cours de traitement dans "MaPlage".
Set MaFeuil = Worksheets(MaPlage.Value)
'Attribution/Création d'un graphique avec le nom de graphique en cours de traitement dans "MaPlage.Offset(0, 1)"
'dans la page attribuée/crée.
Set MonGraph = MaFeuil.ChartObjects(MaPlage.Offset(0, 1).Value).Chart
'Choix de l'axe des "X" de ce graph pour le mise en forme.
With MonGraph.Axes(xlCategory)
'Affectation de la date de début au minimum de l'axe des "X"
'pour la mise à la bonne échelle de l'axe des "X".
.MinimumScale = Debut
'Affectation de la date de fin au maximum de l'axe des "X"
'pour la mise à la bonne échelle de l'axe des "X".
.MaximumScale = Fin
'Divers paramétres par défaut.
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
Set MonGraph = Nothing
Set MaFeuil = Nothing
End If
Next MaPlage
End Sub
hello azertysim dans le code ci-dessus tu selectionne une plage de données. Étant débutant j'ai un ti pb qui je pense doit avoir sa solution!!
j'ai une colonne B qui est une suite d'horaire (ex: B2=8:50, B3=8:55, B4=9:00, ...).
j'ai une autre colonne CA qui est une suite de chiffres correspondant 0 ces horaires (ex: pour 8:50 -> CA2=0, pour 8:55 -> CA3=48, pour 9:00 -> CA4=144,...)
Moi j'aimerais en fait sélectionner une plage horaire de la colonne B.
Le début de cette plage serait une valeur selectionnée ds une 1ère listbox et la fin de la plage serait une autre valeur selectionnée ds une deuxième listbox.
j'aimerais ensuite faire un graphique ayant pour abscisse la plage horaire précédemment défini par les listbox et ayant pour ordonnée la plage des valeur associée au horaire (dc de la colonne CA).
Y a-t-il une solution ???
Merci
j'ai une colonne B qui est une suite d'horaire (ex: B2=8:50, B3=8:55, B4=9:00, ...).
j'ai une autre colonne CA qui est une suite de chiffres correspondant 0 ces horaires (ex: pour 8:50 -> CA2=0, pour 8:55 -> CA3=48, pour 9:00 -> CA4=144,...)
Moi j'aimerais en fait sélectionner une plage horaire de la colonne B.
Le début de cette plage serait une valeur selectionnée ds une 1ère listbox et la fin de la plage serait une autre valeur selectionnée ds une deuxième listbox.
j'aimerais ensuite faire un graphique ayant pour abscisse la plage horaire précédemment défini par les listbox et ayant pour ordonnée la plage des valeur associée au horaire (dc de la colonne CA).
Y a-t-il une solution ???
Merci
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumCode vb graphique
- ForumPb acces wd
- ForumPb acces internet
- ForumJavascript authentification sur un site via le code
- ForumLocalisation denregistrement dans une base avec le code vb
- ForumPb acces dossier partage via net use
- ForumInstallation dbi via ppm pb acces activestate
- ForumPb acces disque dur
- ForumPb acces limité livebox
- ForumCode vb avec bd sql
- Voir plus
c t pas le plus dur...