Evènement sur graphique qui ne se déclenche pas*!

atlas

XLDnaute Occasionnel
Bonjour , je souhaite faire se déclencher l’événement suivant*: la sélection d’un point sur le graphique d’une série avec la souris .(Cet événement passe d’abord par la sélection de la série toute entière et ensuite du point que l’on souhaite . )


Je pense avoir fait le gros du travail en m’inspirant d’un fichier excel dont voici le lien

ftp://ftp-developpez.com/silkyroad/fichiers/ClasseurEvenementsGraphique.zip

J’aie découpé ce code en fonction des notions de vba que je comprend et je lui aie ajouté la procédure «*Private Sub valeurpoint(Arg1, Arg2)*»
 

Pièces jointes

  • Evènements graphiques.zip
    32.2 KB · Affichages: 29
G

Guest

Guest
Re : Evènement sur graphique qui ne se déclenche pas*!

Bonjour Atlas,

Ta variable Graph il faut bien l'initialiser un moment donné ou un autre.
Dans le fichier joint cela ce fait sur l'évènement activate de la feuille et la feuille et activée à l'ouverture du classeur

Comme c'est une variable objet public appartenant à la feuille tu peux y faire directement référence dans tes macros.

Vois également comment afficher la valeur du point. Tu cherchais à prendre la valeur d'un datalabel qui n'existe pas puisque ton graph n'en affiche pas.

A+
 

atlas

XLDnaute Occasionnel
Re : Evènement sur graphique qui ne se déclenche pas*!

Ok mais il y a un truc qui n'est pas cool , ce que je suis obligé de cliquer d'abord sur un autre onglet (Différent de "Base") et ensuite de revenir sur
l'onglet "Base" pour que l'évènement

Code:
Private Sub Worksheet_Activate()
se déclenche et que la variable Graph s'initialise .

Il faudrait que la variable "Graph" s'initialise directement à l'ouverture du classeur à l'évènement
Code:
Private Sub Workbook_Open()
 
G

Guest

Guest
Re : Evènement sur graphique qui ne se déclenche pas*!

Re,

Dans mon précédent post je disais:
Dans le fichier joint cela ce fait sur l'évènement activate de la feuille et la feuille et activée à l'ouverture du classeur

Dans WorkBook_Open il y a appel à WorkSheet_Activate de "Base".

Par contre, lorsque tu modifie ton code, c'est normal que tu 'aies à réactiver la feuille base, car la variable se déconnecte de son objet pendant certaines phases de modification du code. Mais pour l'utilisateur final, si la variable est bien initialisée à l'ouverture, il n'y aura pas de problème.

A+
 

atlas

XLDnaute Occasionnel
Re : Evènement sur graphique qui ne se déclenche pas*!

Sous réserve ...Pour que ça marche j'aie du ajouter la ligne
Code:
Sheets("REXEL").Activate
qui simule l'activation d'un onglet
différent de "Base" .(une solution pas très jolie ....)

Dans ce cas je passe dans l'ordre dans les messagebox 1 - 2 et 3

Si je supprime la ligne
Code:
Sheets("REXEL").Activate
alors je passe dans la messageBox1 et la messagebox3 mais pas la 2

Code:
Private Sub Workbook_Open()
MsgBox "TEST1"

Sheets("REXEL").Activate
'Sheets("Base").Activate
ThisWorkbook.Worksheets("Base").Select

MsgBox "TEST3"
End Sub

Code:
Private Sub Worksheet_Activate()
MsgBox "TEST2"
Set Graph = Me.ChartObjects(1).Chart
End Sub

Je remet le fichier modifié en pièce jointe ...
 

Pièces jointes

  • Evènements graphiques.xls.zip
    26.1 KB · Affichages: 25
  • Evènements graphiques.xls.zip
    26.1 KB · Affichages: 27
  • Evènements graphiques.xls.zip
    26.1 KB · Affichages: 24
G

Guest

Guest
Re : Evènement sur graphique qui ne se déclenche pas*!

Re,

Voici ton fichier en retour.

J'ai créer une macro 'InitGraph' apellée sur Workbook_Open que tu peux lancer manuellement pendant la phase de développement durant laquelle, je te le rapelle c'est normal que la variable Graph se déconnecte de son objet.

Dès que tu modifies ton code lance cette macro.

Comme tu disais avoir adapter la macro trouvée sur le net, je pensais que tu avais le niveau VBA necessaire pour résoudre ce genre de détail.

A+
 

atlas

XLDnaute Occasionnel
Re : Evènement sur graphique qui ne se déclenche pas*!

On y est ! Ca fonctionne ... Par contre je n'aie pas l'explication .

En fait je ne comprend pas vraiment comment on peux initialiser un objet graphique dans une variable publique Graph le tout dans des modules séparés .(encore jamais vu ça ...)

La déclaration avec "public events" se fait dans le module objet "Base" et l'initialisation de l'objet avec set dans le module Thisworkbook .

De même je n'aie pas compris pourquoi j'aie retrouvé la procédure Initgrah dans le module PointDroite alors que je l'aurais simplement mis
dans le module Thisworkbook


Voici ce que j'aurais codé en suivant ma logique j'aurais tout mis dans le module ThisWorkBook comme ci-dessous .
Mais ça digère pas !Qu'est-ce-qui ne va pas dans mon raisonnement ?

Code:
Option Explicit
Public WithEvents Graph As Chart   ' déclaration de la variable

Private Sub Workbook_Open()
    InitGraph
End Sub

Sub InitGraph()
    With Sheets("Base")
        Set .Graph = .ChartObjects(1).Chart   'initialisation de la variable
    End With
End Sub
 

Pièces jointes

  • Evènements graphiques.xls.zip
    24.3 KB · Affichages: 28
  • Evènements graphiques.xls.zip
    24.3 KB · Affichages: 25
  • Evènements graphiques.xls.zip
    24.3 KB · Affichages: 24
G

Guest

Guest
Re : Evènement sur graphique qui ne se déclenche pas*!

Atlas,

En fait je ne comprend pas vraiment comment on peux initialiser un objet graphique dans une variable publique Graph le tout dans des modules séparés .(encore jamais vu ça ...)

Cela sert à ça les variables (objet ou non) publiques:)

Pourquoi Initgrah dans le module PointDroite? Il faut lire les réponses qui te sont faites!

Pendant la phase de conception et de tests, tu seras peut-être amené à reconnecter ta variable à son objet. En mettant InitGraph dans un module Privé en l'occurence ThisWorkbook tu te prive de pouvoir appeler la macro directement depuis la feuille.

Quand tu auras fini tous tes tests tu pourras l'enlever et initialiser ailleurs. D'ailleurs, à ce moment là en tête de module (PointDroite) tu devra mettre 'Option Private Module' afin que tes macros exclusivement réservées à la programation ne soient pas accessibles depuis le menu Outils/Macro (Alt-F8) de l'application mais uniquement par VBA.

Si tu veux que ton graph soit géré au niveau ThisWorkBook.
Dans le moduleThisWorkBook:
Code:
[COLOR=blue]Public[/COLOR] [COLOR=blue]WithEvents[/COLOR] Graph [COLOR=blue]As[/COLOR] Chart   ' déclaration de la variable
[COLOR=blue]Private[/COLOR] [COLOR=blue]Sub[/COLOR] Graph_Select([COLOR=blue]ByVal[/COLOR] ElementID [COLOR=blue]As[/COLOR] [COLOR=blue]Long[/COLOR], [COLOR=blue]ByVal[/COLOR] Arg1 [COLOR=blue]As[/COLOR] [COLOR=blue]Long[/COLOR], [COLOR=blue]ByVal[/COLOR] Arg2 [COLOR=blue]As[/COLOR] [COLOR=blue]Long[/COLOR])
    [COLOR=green]'Chart est enfant de ChartObjects qui est enfant de Worsheet[/COLOR]
    Graph.Parent.Parent.Range([I]"F4"[/I]) = [I]"L'objet sélectionné: "[/I] & RetourneDescriptionID(ElementID, Arg1, Arg2)
[COLOR=blue]End[/COLOR] [COLOR=blue]Sub[/COLOR]
[COLOR=blue]Private[/COLOR] [COLOR=blue]Sub[/COLOR] Workbook_Open()
    InitGraph
[COLOR=blue]End[/COLOR] [COLOR=blue]Sub[/COLOR]

InitGraph dans le module PointDroite devient:
Code:
[COLOR=blue]Sub[/COLOR] InitGraph()
    [COLOR=blue]Set[/COLOR] ThisWorkbook.Graph = Sheets([I]"Base"[/I]).ChartObjects(1).Chart
[COLOR=blue]End[/COLOR] [COLOR=blue]Sub[/COLOR]

La variable Graph est une Variable appartenant à ThisWorkBook et doit être atteinte en faisant référence à ThisWorkBook.Graph. Et ce même si l'objet graphique lui même reste petit-enfant de WorkSheet("Base")

A+
 
Dernière modification par un modérateur:

atlas

XLDnaute Occasionnel
Re : Evènement sur graphique qui ne se déclenche pas*!

Merci pour ta patience Hasco ...J'apprend quelques petits trucs notamment
Option Private Module . Je parais aussi en faisant private sub ... end sub .
Et les procédures disparaissaient aussi du menu Outils/Macro (Alt-F8) mais c'est moins joli .

IL faut savoir que j'aie mes petites habitudes de programmation ...
J'associe dim monobjet..... + set monobjet =.... par habitude et parce qu'on déconseille l'utilisation de variables publiques .
aussi un public withevents mavar + set mavar = .... m'a trompé ...

Et puis cette notion de connection-reconnection de la variable à son objet , j'aie du mal à savoir quand cela se connecte et quand cela se déconnecte ...

Par exemple, pour mon projet en cours j'aie rencontré ce problème , j'aie reussi une connection automatique à chaque changement d'optionButton .Par contre je n'aie pas l'impression qu'il y aie connection à l'évènement Workbook_open .

Bref , bref ....Je fais toujours ce constat plus mon projet devient gros et plus c'est la pagaille .A tel point que je finis par ne plus savoir qui fait quoi ... Et si je planque bien mes variables publiques , je ne garantis pas que un an plus tard , je puisse les retrouver facilement parmis tous les modules.
Et encore moins d'établir rapidement à quoi elles se connectent comme objets , ou elles se déconnectent et quand elles se reconnectent !!!
 

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 870
dernier inscrit
Dethomas