XL 2010 Passage d'arguments avec un graphique

mécano41

XLDnaute Accro
Bonjour,

J'ai un petit souci dans mon code.
Je souhaite lancer une procédure par un Call Sub xxxx( ici : arguments nécessaires)
Les éléments se trouvent dans plusieurs feuilles et je souhaite que le Sub xxxx(...) n'ait pas à connaître les noms de feuille de façon à pouvoir le réutiliser ailleurs, sans modif. Pour des Range ou des objets.Object, cela fonctionne mais pas pour le graphique. Quelqu'un peut-il ma dire où je me trompe? Merci d'avance

Cordialement

Sub xxxxxx()
' ....
' RM1 et RM2 sont les CodeName de deux feuilles
' Graph1 est le nom d'un graphique qui est dans RM1
' PlgeDonnX et PlgeDonnY sont des plages de données qui sont dans la feuille RM2

'Appel de procédure :
Call MiseEchGraph("Graph1", RM2.Range("DonnéesX"), RM2.Range("DonnéesY"))
' ....
' ....
End Sub

'Procédure:
Sub MiseEchGraph(NomDessin As String, PlgeDonnX As Range, PlgeDonnY As Range)
Dim RMx As Worksheet, RMy As Worksheet
Set RMx = Worksheets(PlgeDonnX.Worksheet.Name)

' .... Ici, cela fonctionne
With RMx
.Range(xxxxxx) = zzzzz
End With

'....Ici, cela ne fonctionne pas
With RMy
.ChartObjects(NomDessin).Activate
.Shapes(NomDessin).Width = Larg + 10
.Shapes(NomDessin).Height = Haut + 10
End With

'....
End Sub
 

mécano41

XLDnaute Accro
Voici un fichier très allégé. Les parties intéressantes du code sont limitées par des ' ##############
Le but : pouvoir récupérer des procédures complètes dans d'autres fichiers sans les modifier.
Les cellules jaunes de la feuille Calculs sont modifiable pour lancer les calculs et actions

Merci d'avance,

Cordialement
 

Pièces jointes

  • Essai 01.xlsm
    59.8 KB · Affichages: 8

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous ne pouvez pas activer un objet contenu dans une autre feuille que la feuille active.
Au lieu de NomDessin as String vous devriez transmette ByVal Chart As Chart et à l'appel :
Call MiseEchDessin(.ChartObjects("Dessin1").Chart, …
Utilisez Chart au lieu de ActiveChart et enlevez tout les Select et Selection.
Pour montrer le Graphique terminez par Chart.Parent.Parent.Activate
 

mécano41

XLDnaute Accro
Bonjour.
Vous ne pouvez pas activer un objet contenu dans une autre feuille que la feuille active.
Au lieu de NomDessin as String vous devriez transmette ByVal Chart As Chart et à l'appel :
Call MiseEchDessin(.ChartObjects("Dessin1").Chart, …
Utilisez Chart au lieu de ActiveChart et enlevez tout les Select et Selection.
Pour montrer le Graphique terminez par Chart.Parent.Parent.Activate
Merci, je regarde et je reviens....
Cordialement
 

Dranreb

XLDnaute Barbatruc
Vous n'avez pas enlevé les Select, Selection et ActiveChart.
Et surtout vous avez transmis le ChartObject au lieu de sa propriété Chart.
C'est possible mais alors il faut aussi le récupérer par ByVal COt As ChartObject et récupérer par un Set sa propriété Chart dans une variable locale Chart As Chart.
Moi je préfère en général transférer le Chart. Le ChartObject est alors sa propriété Parent.
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
433

Statistiques des forums

Discussions
314 764
Messages
2 112 711
Membres
111 641
dernier inscrit
Benameur