Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Détecter la femeture d'une fenêtre graphique

10 réponses
Avatar
Francois L
Bonjour à tous,

J'ai buté récemment sur une question (de cousinhub) et en fait
j'aimerais bien trouver la réponse (pour moi).

Un graphique est créé par macro avec activation de la fenêtre graphique.
Comment masquer ou détruire le graphique si la fenêtre graphique est
fermée ou désactivée.

Y-a-t'il un évènement utilisable ? Si, non, une idée pour contourner le
problème ?

--
François L

10 réponses

Avatar
MichDenis
Bonjour François,

Avec ceci, cela devrait être suffisant :
'------------------------
With Worksheets("Feuil1")
.Shapes("Chart 1").Delete
End With
'------------------------

Quand tu crées un graphe dans une feuille, Excel le baptise en Français "Graphique 1"
mais en vba, excel "speak white" (parle anglais), en conséquence, il traduit tout seul
le nom de l'objet : Graphe 1 en Chart 1....si tu utilises dans la ligne de code "Graphe 1",
excel est incapable d'identifier l'objet ... il te renvoie donc une erreur.

Pour éviter ce mépris entre l'interface de la feuille de calcul et VBA, si tu modifie
le nom en utilisant l'espace à l'extrème gauche de la barre des formules lorsque
le graphe est sélectionné en utilisant autre chose que "graphique" , Excel n'essaiera
pas de traduire le nom et tu n'auras plus ce type de confusion.

Ce qui précède s'applique aussi au "images"
Interface de la feuille de calcul, Excel lit Image x et au niveau du code
on doit utiliser "Picture x"



"Francois L" a écrit dans le message de news:

Bonjour à tous,

J'ai buté récemment sur une question (de cousinhub) et en fait
j'aimerais bien trouver la réponse (pour moi).

Un graphique est créé par macro avec activation de la fenêtre graphique.
Comment masquer ou détruire le graphique si la fenêtre graphique est
fermée ou désactivée.

Y-a-t'il un évènement utilisable ? Si, non, une idée pour contourner le
problème ?

--
François L
Avatar
Francois L
Bonjour François,

Avec ceci, cela devrait être suffisant :
'------------------------
With Worksheets("Feuil1")
.Shapes("Chart 1").Delete
End With
'------------------------




Bonjour MichDenis,

Merci, mais... ce que je cherche c'est comment détecter la fermeture ou
la désactivation de la fenêtre graphique.

--
François L

Avatar
MichDenis
| je cherche c'est comment détecter la fermeture ou la désactivation de la fenêtre graphique.

As-tu essayé ceci : Remplace Feuil1 par le nom de ta feuille graphique.
Je ne suis pas certain sur ce que tu entends par "fermeture" d'une feuille !

à mettre dans le ThisWorkbook
'----------------------------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If Sh.Name <> "Feuil1" Then
MsgBox "la feuille ""Feuil1"" est désactivée"
End If
End Sub
'----------------------------
Avatar
Francois L
| je cherche c'est comment détecter la fermeture ou la désactivation de la fenêtre graphique.

As-tu essayé ceci : Remplace Feuil1 par le nom de ta feuille graphique.
Je ne suis pas certain sur ce que tu entends par "fermeture" d'une feuille !



Re,

Je cherche à intercepter la fermeture de la fenêtre générée par la
propriété ShowWindow=True d'un graphique.

Mais je ne suis pas sur que ce soit possible !

--
François L

Avatar
MichDenis
Il y a moyen de contrôler certains aspects du graphe
par un module de classe (voir les événements disponilbe)

Je joins un fichier exemple très simple http://cjoint.com/?lzrHiIe0Sh
reste à voir si cela peut t'aider dans ta démarche !

Observe ce qui se passe si tu cliques sur le graphe et que tu
conserve le bouton de la souris enfoncé.



"Francois L" a écrit dans le message de news:

| je cherche c'est comment détecter la fermeture ou la désactivation de la fenêtre graphique.

As-tu essayé ceci : Remplace Feuil1 par le nom de ta feuille graphique.
Je ne suis pas certain sur ce que tu entends par "fermeture" d'une feuille !



Re,

Je cherche à intercepter la fermeture de la fenêtre générée par la
propriété ShowWindow=True d'un graphique.

Mais je ne suis pas sur que ce soit possible !

--
François L

Avatar
Francois L
Il y a moyen de contrôler certains aspects du graphe
par un module de classe (voir les événements disponilbe)

Je joins un fichier exemple très simple http://cjoint.com/?lzrHiIe0Sh
reste à voir si cela peut t'aider dans ta démarche !

Observe ce qui se passe si tu cliques sur le graphe et que tu
conserve le bouton de la souris enfoncé.


Bonjour Denis,

Merci pour l'exemple...

Les modules de classe et moi, on est pas encore très intimes ! Faut
qu'on apprennent à se connaître.

Pour l'instant, je n'ai pas réussi à adapter cela à ce que je veux faire
mais ce n'est pas très grave. Je n'en ai pas vraiment besoin mais ça
m'énerve de ne pas trouver de réponse à une question qui paraît simple
et, en fait, ne l'est visiblement pas.

--
François L

Avatar
MichDenis
Bonjour François,

A ) Fenêtre graphique -> tu peux m'expliquer à quoi elle sert à part de définir
dans la barre de titre, l'objet sur lequel tu travailles....

B ) Pour la fermeture de cette fenêtre, dès qu'une cellule de la feuille est sélectionnée
la fenêtre graphique se ferme...L'événement "Worksheet_SelectionChange" du
module feuille pourrait être l'élément déclencheur pour connaître à quel moment
la fenêtre s'est obligatoirement fermé si elle était ouverte.

C ) La commande Fenêtre graphique se retrouve sur 3 barres (built-in) d'excel.
Le nom de ces barres de commande sont :
1 - Pilot Area
2 - Object/Plot
3 - View
Cette commande a comme ID:= 2571 ...comme tu sais, pour une même commande
même si elle apparaît sur plusieurs barres d'outils pour une question de convénience
pour faciliter le travail de l'usager, elle conserve quand même le même ID

Il est possible via une petite procédure de modifier le "OnAction" l'action que doit
exécuter cet ID. Pour ce faire, tu peux utiliser ce type de procédure :
(ne fonctionne pas avec Excel 97, il faut utiliser un autre type de syntaxe)

'-----------------------------
Sub Modifier_ID_2571_Task()

Dim C As CommandBarControl
For Each C In Application.CommandBars.FindControls(ID:%71)
C.OnAction = "NewTask"
Next
End Sub
'-----------------------------

La procédure attribue à une variable " FenêtreGrapheVisible "
la valeur 1 si pour le graphe désigné, l'usager demande
l'affichage de la fenêtre
'-----------------------------
Sub NewTask()

If Feuil1.ChartObjects("Chart 4").Chart.Name = ActiveChart.Name Then
FenêtreGrapheVisible = 1
End If
ActiveChart.ShowWindow = True
End Sub
'-----------------------------

En utilisant cet événement de la feuille où est situé le graphe :

En effet dès qu'une cellule de la feuille est sélectionnée, la
fenêtre graphique disparaît.
'--------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
FenêtreGrapheVisible = 0
End Sub
'--------------------------

En utilisant les événement Activate et Desactivate du ThisWorkbook,
ou de la feuille... on arrive à gérer la commande dont le ID est 2571

et pour remettre l'action du ID à la normale :

'-----------------------------
Sub Normal_ID_2571_Task()

Dim C As CommandBarControl
For Each C In Application.CommandBars.FindControls(ID:%71)
C.OnAction = ""
Next
End Sub
'-----------------------------





"Francois L" a écrit dans le message de news:
eWKw$
Il y a moyen de contrôler certains aspects du graphe
par un module de classe (voir les événements disponilbe)

Je joins un fichier exemple très simple http://cjoint.com/?lzrHiIe0Sh
reste à voir si cela peut t'aider dans ta démarche !

Observe ce qui se passe si tu cliques sur le graphe et que tu
conserve le bouton de la souris enfoncé.


Bonjour Denis,

Merci pour l'exemple...

Les modules de classe et moi, on est pas encore très intimes ! Faut
qu'on apprennent à se connaître.

Pour l'instant, je n'ai pas réussi à adapter cela à ce que je veux faire
mais ce n'est pas très grave. Je n'en ai pas vraiment besoin mais ça
m'énerve de ne pas trouver de réponse à une question qui paraît simple
et, en fait, ne l'est visiblement pas.

--
François L

Avatar
MichDenis
Le nom de la barre d'outils est "Plot area" et non "Pilot Area"
tout le monde aura compris...


"MichDenis" a écrit dans le message de news:
%
Bonjour François,

A ) Fenêtre graphique -> tu peux m'expliquer à quoi elle sert à part de définir
dans la barre de titre, l'objet sur lequel tu travailles....

B ) Pour la fermeture de cette fenêtre, dès qu'une cellule de la feuille est sélectionnée
la fenêtre graphique se ferme...L'événement "Worksheet_SelectionChange" du
module feuille pourrait être l'élément déclencheur pour connaître à quel moment
la fenêtre s'est obligatoirement fermé si elle était ouverte.

C ) La commande Fenêtre graphique se retrouve sur 3 barres (built-in) d'excel.
Le nom de ces barres de commande sont :
1 - Pilot Area
2 - Object/Plot
3 - View
Cette commande a comme ID:= 2571 ...comme tu sais, pour une même commande
même si elle apparaît sur plusieurs barres d'outils pour une question de convénience
pour faciliter le travail de l'usager, elle conserve quand même le même ID

Il est possible via une petite procédure de modifier le "OnAction" l'action que doit
exécuter cet ID. Pour ce faire, tu peux utiliser ce type de procédure :
(ne fonctionne pas avec Excel 97, il faut utiliser un autre type de syntaxe)

'-----------------------------
Sub Modifier_ID_2571_Task()

Dim C As CommandBarControl
For Each C In Application.CommandBars.FindControls(ID:%71)
C.OnAction = "NewTask"
Next
End Sub
'-----------------------------

La procédure attribue à une variable " FenêtreGrapheVisible "
la valeur 1 si pour le graphe désigné, l'usager demande
l'affichage de la fenêtre
'-----------------------------
Sub NewTask()

If Feuil1.ChartObjects("Chart 4").Chart.Name = ActiveChart.Name Then
FenêtreGrapheVisible = 1
End If
ActiveChart.ShowWindow = True
End Sub
'-----------------------------

En utilisant cet événement de la feuille où est situé le graphe :

En effet dès qu'une cellule de la feuille est sélectionnée, la
fenêtre graphique disparaît.
'--------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
FenêtreGrapheVisible = 0
End Sub
'--------------------------

En utilisant les événement Activate et Desactivate du ThisWorkbook,
ou de la feuille... on arrive à gérer la commande dont le ID est 2571

et pour remettre l'action du ID à la normale :

'-----------------------------
Sub Normal_ID_2571_Task()

Dim C As CommandBarControl
For Each C In Application.CommandBars.FindControls(ID:%71)
C.OnAction = ""
Next
End Sub
'-----------------------------





"Francois L" a écrit dans le message de news:
eWKw$
Il y a moyen de contrôler certains aspects du graphe
par un module de classe (voir les événements disponilbe)

Je joins un fichier exemple très simple http://cjoint.com/?lzrHiIe0Sh
reste à voir si cela peut t'aider dans ta démarche !

Observe ce qui se passe si tu cliques sur le graphe et que tu
conserve le bouton de la souris enfoncé.


Bonjour Denis,

Merci pour l'exemple...

Les modules de classe et moi, on est pas encore très intimes ! Faut
qu'on apprennent à se connaître.

Pour l'instant, je n'ai pas réussi à adapter cela à ce que je veux faire
mais ce n'est pas très grave. Je n'en ai pas vraiment besoin mais ça
m'énerve de ne pas trouver de réponse à une question qui paraît simple
et, en fait, ne l'est visiblement pas.

--
François L

Avatar
Francois L
Le nom de la barre d'outils est "Plot area" et non "Pilot Area"
tout le monde aura compris...





Re,

Merci Denis... C'est bien ce que je pensais, c'est pas complètement simple !

Je me disais bien aussi que tu trouverais bien un truc.

Quand à la première question du post précédent "A quoi ça sert ?". On
pourrait répondre que c'est un moyen d'obliger au recalcul de du
graphique qui est généré par VBA...

--
François L

Avatar
MichDenis
Merci pour ce retour d'info.