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".
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
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?
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).
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
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