Excel VBA : Coordonnées d'un point graphique

Fermé
Telenar Messages postés 1 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 22 avril 2008 - 22 avril 2008 à 15:56
 Anonyme - 10 août 2008 à 06:08
Bien le bonjour,

Avant de poser ma question, voici la base de mon travail. J'ai actullement un graphique Excel (graphique à barres horizontales) comportant un certain nombre de séries.
J'aurai besoin de récupérer les coordonées d'une série particulière (afin de pouvoir tracer à cet endroit précis une flèche ou une barre verticale). J'ai bien réussi à récupérer le numéro de la série, j'ai cherché pendant pas mal de temps dans l'aide et divers forums, mais je n'arrive pas à savoir s'il est possible de récupérer ces coordonées.

J'espère que quelqu'un pourra m'aider, je reste à disposition pour plus de précision si vous en avez besoin.

Merci d'avance :)
A voir également:

2 réponses

Bonjour


VB/VBA/VBS - Programmation - FORUM HardWare.fr :
Accéder aux éléments de dessin d'un graphique Excel [VBA EXCEL] :
https://forum.hardware.fr/hfr/Programmation/VB-VBA-VBS/excel-acceder-excel-sujet_89822_1.htm



coordonnées X et Y de la souris sur graphique excel ? :
http://www.presence-pc.com/forum/ppc/Programmation/coordonnees-souris-graphique-excel-sujet-4592-1.htm

   1. Private Sub Chart_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
   2. Dim ElementID As Long
   3. Dim Arg1 As Long
   4. Dim Arg2 As Long
   5. Dim v As Variant
   6. GetChartElement x, y, ElementID, Arg1, Arg2
   7. MsgBox ("X = " & x & " / Y = " & y)
   8. End Sub

Cela permet d'afficher les coordonnées du pointeur de la souris si le graphique est dans un onglet et non intégré à une feuille Excel.

******************

J'arrive à récupérer les coordonnées X et Y de la souris sur le graphique incorporé dans une feuille Excel. En fait il "suffit" de créer un module de classe "graphique" lequel existe déjà dans excel et reconnait les "mouse down", les "mouse up" et les "mouse move"
 
Créez un nouveau module de classe, il s'appelle classe1 par défaut. Je l'ai laissé comme ça(en fait je n'arrive pas à le modifier)
Il faut placer "Public WithEvents mychartclass As Chart" en tête de classe. Voici le code de la classe :

   1. Public WithEvents mychartclass As Chart
   2.
   3. Private Sub mychartclass_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
   4.     Range("A9" ) = x
   5.     Range("B9" ) = y
   6. End Sub
   7.
   8. Private Sub mychartclass_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
   9.     Range("A8" ) = x
  10.     Range("B8" ) = y
  11. End Sub

******************

Ensuite il faut activer cette classe à partir du module de la feuille excel (sheet1 chez moi). La sub "initializechart" est reliée à un bouton de commande sur la feuille Excel. Voici le code :

   1. Dim myClassModule As New Classe1
   2.
   3. Private Sub initializechart()
   4. Set myClassModule.mychartclass = Sheet1.ChartObjects(1).Chart
   5. End Sub

Avec ça vous verrez apparaitre les coordonnées du pointeur de votre souris dans les cases A8 et B8.
"Il ne reste plus qu'à" lier ces coordonnées à une ligne qui sera tracée sur le graphique.

Merci
2
Bonjour

Infos si ça peut servir :

Extraction de réseaux de rues à partir d’images satellites à haute résolution spatiale :
http://www.google.fr/search?hl=fr&q=cache:U6jAJ4uE4ssJ:documents.irevues.inist.fr/bitstream/2042/13796/1/A79.pdf+extraire+coordonnee+point+sur+un+graphique

XL: Etiquettes sur chaque point d'un graphique :
https://support.microsoft.com/fr-fr/help/466512

Retrouver les coordonnées d'un point sur un graphique - Forum des développeurs :
https://www.developpez.net/forums/d330098/environnements-developpement/matlab/interfaces-graphiques/retrouver-coordonn-es-d-point-graphique/

[Excel] Récupérer les coordonnées d'un point :
https://forums.commentcamarche.net/forum/affich-1461012-excel-recuperer-les-coordonnees-d-un-point#0

******
Recherche de 'coordonnee point sur un graphique' avec Google :
https://www.google.fr/search?hl=fr&q=coordonnee+point+sur+un+graphique&gws_rd=ssl
******

récup. donnée de graph - Excel Downloads Forums :
https://www.excel-downloads.com/threads/recup-donnee-de-graph.30592/

Récupération de points sur un graphiques Exce :
https://forums.commentcamarche.net/forum/affich-7815283-recuperation-de-points-sur-un-graphiques-exce#0

Merci

******************
******************

Symptômes

J'ai réalisé un graphique sur lequel je souhaite afficher des étiquettes personnalisées sur chaque point d'une série, le contenu de ces étiquettes se trouvant sur plage différente de celle utilisée pour la création du graphique.
De plus, je souhaite que les modifications de ces valeurs dans la feuille de calcul mettent à jour ces étiquettes.
Comment dois-je procéder ?

Résolution

Cette fonctionnalité n'est pas disponible directement dans Microsoft Excel.
Cependant, vous pouvez réaliser cette opération en ajoutant manuellement la référence des cellules à chaque point de la série en suivant la procédure suivante :

Si le graphique est incorporé à la feuille de calcul :
1. Activez le graphique en double-cliquant sur l'objet graphique

Dans tous les cas (autres que Surface):
1. Sélectionner la série.
2. Dans le menu Insertion, activer la commande Etiquette de données...
3. Choisissez Afficher étiquette.
4. Cliquez sur OK.
5. Sélectionnez l'étiquette d'un des points.
6. Tapez le signe égal "=".
7. Puis cliquez sur la cellule de la feuille de calcul contenant
l'étiquette.
8. Validez.
9. Répétez les étapes 5 à 9 pour chaque point de la série.


Cette série de manipulations peut être automatisée par une macro-commande écrite en langage macro Excel 4.0 (pour toutes versions d'Excel) ou Visual Basic Edition Applications (pour les versions 5.0 et supérieures).

******************
******************
EXEMPLE :

Voici un exemple de code permettant d'automatiser ce traitement. Pour
mettre en oeuvre ce programme, vous pouvez suivre le processus
suivant :

1. A partir des données contenues dans une feuille de calcul, créez un
graphique
2. Si le graphique est incorporé, activez le graphique.
3. Sélectionnez une série.
4. Exécutez la macro décrite ci-dessous.

#########################################################################
' Code Visual Basic anglais

Sub AttribuerEtiquettes()
Dim maPlage As Variant, maCellule As Object, monPoint As Object
Dim nmGraphique$, nmSérie$, i%

' Détection du type de la fenêtre (xlGraphiqueDansEmplacement ou
' xlGraphiqueEnFenetre).
tpGraphique = ActiveWindow.Type

' Récupération du nom du graphique et de la série sélectionnée.
nmGraphique = ActiveChart.Parent.Name
nmSérie = Selection.Name

' Déselection du graphique incorporé pour pouvoir sélectionner
' une plage de cellules
If tpGraphique <> 1 Then ActiveWindow.Visible = False

' Sélection de la plage contenant les étiquettes
Set maPlage = Application.InputBox( _
Prompt:="Selectionnez la plage contenant les étiquettes :", _
Title:="Etiquettes", Type:=8)

' Réactivation du graphique incorporé
If tpGraphique <> 3 Then ActiveSheet.ChartObjects(nmGraphique).Activate

' Sélection de la série
ActiveChart.SeriesCollection(nmSérie).Select

' Quitte si on a annulé la boîte
If VarType(maPlage) = vbBoolean Then Exit Sub

' Initialisation d'un compteur
i = 1

' Quitte si on a plus de cellules que de points
If maPlage.Count > Selection.Points.Count Then
MsgBox Prompt:="Sélection non valide. Plage trop grande !", _
Buttons:=vbCritical
Exit Sub
End If
Application.ScreenUpdating = False
With Selection
For Each maCellule In maPlage
Set monPoint = .Points(i)

' On initialise l'étiquette avec une référence de cellule
' ceci permettra d'avoir une liaison
With monPoint
.ApplyDataLabels Type:=xlShowValue
.DataLabel.Text = "=" & maCellule.Address _
(ReferenceStyle:=xlR1C1, External:=True)
End With
i = i + 1
Next
End With
End Sub
' Code Visual Basic français

Proc AttribuerEtiquettes()
Dcl maPlage En Variant; maCellule En Objet; monPoint En Objet
Dcl nmGraphique$; nmSérie$; i%

' Détection du type de la fenêtre (xlGraphiqueDansEmplacement ou
' xlGraphiqueEnFenetre).
tpGraphique = FenêtreActive.Type

' Récupération du nom du graphique incorporé et depuis la série
' sélectionnée.
nmGraphique = GraphiqueActif.Parent.Nom
nmSérie = Sélection.Nom

' Déselection du graphique incorporé pour pouvoir sélectionner
' une plage de cellules
Si tpGraphique <> 1 Alors FenêtreActive.Affiché = Faux

' Sélection de la plage contenant les étiquettes
AffecteRéf maPlage = Application.BoîteSaisie( _
Invite:="Selectionnez la plage contenant les étiquettes :"; _
Titre:="Etiquettes"; Type:=8)

' Réactivation du graphique incorporé
Si tpGraphique <> 3 Alors FeuilleActive.ObjetsGraphique(nmGraphique) _
.Activer

' Sélection de la série
GraphiqueActif.Séries(nmSérie).Sélectionner

' Quitte si on an annulé la boîte
Si TypeVariant(maPlage) = vbBooléen Alors Sortir Proc

' Initialisation d'un compteur
i = 1

' Quitte si on a plus de cellules que de points
Si maPlage.NombreDe > Sélection.Points.NombreDe Alors
Message Invite:="Sélection non valide. Plage trop grande !"; _
Boutons:=vbCritique
Sortir Proc
Fin Si
Application.MiseAJourEcran = Faux
Avec Sélection
Pour Chaque maCellule Dans maPlage
AffecteRéf monPoint = .Points(i)

' On initialise l'étiquette avec une référence de cellule
' ce qui permettra d'avoir une liaison
Avec monPoint
.AttribuerEtiquettesDonnées Type:=xlAffichageValeur
.EtiquetteDonnée.Texte = "=" & maCellule.Adresse _
(StyleRéférence:=xlL1C1; Externe:=Vrai)
Fin Avec
i = i + 1
Suivant
Fin Avec
Fin Proc
#########################################################################

#########################################################################
Langage Macro Excel 4.0

nmSérie=SELECTION()
nmGraphique=LIRE.DOCUMENT(1)
=ACTIVER()
maZone=ENTRER("Selectionnez la plage contenant les étiquettes :";
8;"Etiquettes")
=ACTIVER(nmGraphique)
=SELECTIONNER(nmSérie)
=SI(ESTLOGIQUE(maZone);RETOUR())
noSérie=CNUM(SUBSTITUE(nmSérie;"S";""))
idPoint=1
=ETIQUETTES.DONNEES(4)
=ECRAN(FAUX)
=POUR.CELLULE("maCellule";maZone)
= AJOUTER.TEXTE(4;noSérie;idPoint)
= FORMULE("="&TEXTEREF(maCellule))
idPoint= idPoint+1
=SUIVANT()
=RETOUR()
#########################################################################


REMARQUES :

1. Dans la macro en langage Excel 4.0, la fonction ETIQUETTES.DONNEES(4)
doit être supprimée pour fonctionner dans la version 4.0 de Microsoft
Excel.
2. Les macros en Visual Basic Edition Applications et langage Macro
Excel 4.0 suivent le même raisonnement.
Merci
0