Microsoft 365 PB VBA : Identification d'un graphique d'une feuille "graphique"

im_Guillaume

XLDnaute Nouveau
Bonjour,
Je cherche a appliquer un repère orthonormé à un graphique, dans une feuille graphique excel à l'aide d'une VBA.
La fonction Coupe_transv_ortho arrive bien à entrer dans la feuille graphique mais ne reconnait aucun type ChartObject.

Voici le script :
--------------------------------------------------------------------------
Sub Repère_orthonormé(CO As ChartObject, Direction As String)
L.Longre MPFE
Dim C As Chart
Dim AV As Axis, AH As Axis
Dim AVAmpl As Double, AHAmpl As Double
Dim Obj As Integer

With CO
Set C = .Chart
Set AV = C.Axes(xlValue)
Set AH = C.Axes(xlCategory)
AVAmpl = AV.MaximumScale - AV.MinimumScale
AHAmpl = AH.MaximumScale - AH.MinimumScale
If Direction = "V" Then
Obj = AH.Width * AVAmpl / AHAmpl
.Height = Obj + .Height - C.PlotArea.Height
Do Until AV.Height > Obj
.Height = .Height + 1
Loop
ElseIf Direction = "H" Then
Obj = AV.Height * AHAmpl / AVAmpl
.Width = Obj + .Width - C.PlotArea.Width
Do Until AH.Width > Obj
.Width = .Width + 1
Loop
Else: Err.Raise 5
End If
End With
End Sub

Sub Coupe_trans_ortho()
Charts("Coupe transversale").Activate
Call Repère_orthonormé(Active.ChartObject(1), "V")
End Sub
---------------------------------------------------------------------------------------


La fonction Sub Repère_orthonormé demande en entrée un ChartObject et un String, puis orthonorme le repère.
La fonction Coupe_trans_ortho doit donc faire appelle à la fonction Repère_orthonormé pour orthonormer le graphique situé dans la feuille graphique "Coupe transversale".

Merci d'avance pour votre aide,
 
Solution
Dans cette configuration, le graphique n'a pas de nom puisque c'est la feuille elle même qui est de type graphique.
En PJ un essai, on fixe les min max des axes ( cellules oranges ) et on lance la macro.
Le graphique est remis à jour. Avec :
VB:
Sub ESSAI()
    With Sheets("Graphique1")
        .Axes(xlCategory).MinimumScale = [F9]
        .Axes(xlCategory).MaximumScale = [F10]
        .Axes(xlCategory).MajorUnit = [F11]
        .Axes(xlValue).MinimumScale = [F13]
        .Axes(xlValue).MaximumScale = [F14]
        .Axes(xlValue).MajorUnit = [F15]
    End With
End Sub

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Guillaume,
Vous pouvez obtenir le nom du graphique avec :
VB:
Nomgraph = ActiveSheet.ChartObjects(1).Name
( s'il n'y a qu'un graphique sur la feuille, sinon il faut boucler. )
Ce petit code, à tester, vous donne le nom du graphique de la page courante :
Code:
Sub NomGraphique()
    Dim Nomgraph$
    Nomgraph = ActiveSheet.ChartObjects(1).Name
    MsgBox Nomgraph
End Sub
 

im_Guillaume

XLDnaute Nouveau
Merci pour votre réponse et votre aide Sylvanu,

J'ai essayé ce code, il s'arrête cependant à la ligne :
"Nomgraph = ActiveSheet.ChartObjects(1).Name"

Le message d'erreur m'affiche "Erreur définie par l'application ou par l'objet".
Il me semble que le graphique sur une feuille graphique n'est pas reconnu comme ChartsObjects, cela explique peut être pourquoi cette ligne ne fonctionne pas?
Bonsoir Guillaume,
Vous pouvez obtenir le nom du graphique avec :
VB:
Nomgraph = ActiveSheet.ChartObjects(1).Name
( s'il n'y a qu'un graphique sur la feuille, sinon il faut boucler. )
Ce petit code, à tester, vous donne le nom du graphique de la page courante :
Code:
Sub NomGraphique()
    Dim Nomgraph$
    Nomgraph = ActiveSheet.ChartObjects(1).Name
    MsgBox Nomgraph
End Sub
 

im_Guillaume

XLDnaute Nouveau
Merci pour votre réponse.

En effet, votre programme fonctionne lorsque le graphique est "incorporé" (contenu dans une feuille type "calculs") mais elle n'atteint pas les objets dans une feuille type "graphique".

Je vous joins cet excel représentatif :
Un graphique est tracé dans le deuxième onglet et les macros sont implantées (mais ne fonctionnent pas).

Merci encore pour votre aide.
 

Pièces jointes

  • Sylvanu.xlsm
    23.3 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Dans cette configuration, le graphique n'a pas de nom puisque c'est la feuille elle même qui est de type graphique.
En PJ un essai, on fixe les min max des axes ( cellules oranges ) et on lance la macro.
Le graphique est remis à jour. Avec :
VB:
Sub ESSAI()
    With Sheets("Graphique1")
        .Axes(xlCategory).MinimumScale = [F9]
        .Axes(xlCategory).MaximumScale = [F10]
        .Axes(xlCategory).MajorUnit = [F11]
        .Axes(xlValue).MinimumScale = [F13]
        .Axes(xlValue).MaximumScale = [F14]
        .Axes(xlValue).MajorUnit = [F15]
    End With
End Sub
 

Pièces jointes

  • Sylvanu.xlsm
    24.9 KB · Affichages: 3

im_Guillaume

XLDnaute Nouveau
Effectivement, je n'avais pas pensé à ça. Il n'y a peut être même pas besoin de VBA si on ne veut pas de bouton. On peut finalement cadrer les axes à partir de listes "fantômes" des max et min dans le graph.
Merci beaucoup pour votre aide Sylvanu,
Belle fin de journée!
Dans cette configuration, le graphique n'a pas de nom puisque c'est la feuille elle même qui est de type graphique.
En PJ un essai, on fixe les min max des axes ( cellules oranges ) et on lance la macro.
Le graphique est remis à jour. Avec :
VB:
Sub ESSAI()
    With Sheets("Graphique1")
        .Axes(xlCategory).MinimumScale = [F9]
        .Axes(xlCategory).MaximumScale = [F10]
        .Axes(xlCategory).MajorUnit = [F11]
        .Axes(xlValue).MinimumScale = [F13]
        .Axes(xlValue).MaximumScale = [F14]
        .Axes(xlValue).MajorUnit = [F15]
    End With
End Sub
 

Statistiques des forums

Discussions
312 084
Messages
2 085 193
Membres
102 810
dernier inscrit
mohammedaminelahbali