Excel VBA : Coordonnées d'un point graphique

Telenar Messages postés 1 Statut Membre -  
 Anonyme -
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 :)

2 réponses

  1. Anonyme
     
    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
  2. Anonyme
     
    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