Sélectionner cellule correspondante à un point d'un graphique

quattropiloctomie

XLDnaute Nouveau
Bonjour !
J'essaie de faire la chose suivante : j'ai sélectionné un point sur un graphique EXCEL (nuage de points). Je souhaite faire une macro qui me positionne sur la cellule qui contient la valeur de ce point. En d'autres termes, je souhaite que la marco identifie quelle est la cellule source du point en question (du genre : le point est le 18e point de la série 4, donc la cellule est d48, car il existe des cellules vides entre B1 et B48 et la série 4 correspond à la colonne D, le tout se trouvant dans la Feuill3) Est-ce que qqun a déjà trouvé une solution pour ce problème ? Je travaille sous EXCEL 2000 mais si j'ai une réponse pour une autre version, ce serait déjà un bon bout de chemin... MERCI d'avance !
 

quattropiloctomie

XLDnaute Nouveau
Re : Sélectionner cellule correspondante à un point d'un graphique

Re-bonsoir !

C'est vraiment super de voir deux réponses alors que j'ai posté mon message il y a peu ! MERCI !

Comme je suis un néophyte, je n'avance pas vite. En effet, j'ai déjà bien bidouillé des macros... mais pas encore des événements. Donc j'essaye d'adapter ce que vous proposez.

J'ai une question (peut-être) naïve : est-ce que ce type de macro peut être insérée dans une macro complémentaire ? En effet, j'ai développé une macro complémentaire pour regrouper toutes mes macros. L'idée est d'ajouter celle-ci.

Sinon je vais avancer et je vous tiens au courant.

Bonne fin de soirée !
 

quattropiloctomie

XLDnaute Nouveau
Re : Sélectionner cellule correspondante à un point d'un graphique

Bonjour !

J'ai bien avancé à l'aide de vos conseils et vos exemples ! MERCI beaucoup ! J'ai toutefois encore quelques petites questions.

Voici mon code :

HTML:
Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)

If ElementID = xlSeries Then
    If Arg2 > 0 Then
    
        Worksheets("--- (1)").Activate
        Worksheets("--- (1)").Cells(Arg2, 3).Activate 'active la ligne qui correspond au point et la 3ème colonne
        
        Application.Run ("SelectionnerLignesDocumentation")
        
        Else      '   permet de re-cliquer si le point n'est pas bien sélectionné
    
    End If
End If

End Sub


J'ai donc écrit cette macro directement dans un graphique car je n'arrivais pas à utiliser une classe d'événements. J'ai en effet 20 graphiques sous forme d'onglets. Or je n'arrivais pas à déclarer tous les graphiques du classeur comme étant des cas de la classe... Si vous avez une idée...

Mais surtout, voici mon problème :

Mes graphiques contiennent un nombre très important de points. J'utilise donc le filtre automatique pour réduire le nombre de point affichés. Mes graphiques affichent donc seulement les points correspondant aux lignes sélectionnées dans la feuille("---(1)").

Le problème, c'est que l'argument Arg2 compte le nombre de point depuis le début du graphique (donc seulement les points filtrés). Or je n'arrive pas à sélectionner la ligne correspondante avec Cell(Arg2) car cela compte les lignes depuis le début de la feuille, y compris les lignes masquées, et non seulement les lignes affichées... Et du coup, je n'arrive pas à sélectionner la ligne correspondant à mon point sur la feuille("---(1)").

Je vais continuer à chercher. Mais si vous avez une idée... ce serait SUPER !

MERCI encore !
 

quattropiloctomie

XLDnaute Nouveau
Re : Sélectionner cellule correspondante à un point d'un graphique

Re-bonjour !

Je réponds à une de mes questions :)

Voici le code où je compte les lignes masquées

HTML:
Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)

Dim LignMasq

If ElementID = xlSeries Then
    If Arg2 > 0 Then
    
        Worksheets("--- (1)").Activate
        
        Range("a1").Activate ' décompte les lignes masquées
Boucle1:
        ActiveCell.Offset(1, 0).Activate
            If ActiveCell.EntireRow.Hidden = True Then GoTo Boucle1
            LignMasq = ActiveCell.Row
         
        Worksheets("--- (1)").Cells(Arg2 + LignMasq, 3).Activate 'active la ligne qui correspond au point et la 3ème colonne
        
        Application.Run ("SelectionnerLignesDocumentation")
        Application.Run ("AjusterSélectionLignesAvantAprès")

        
        Else      '   permet de re-cliquer si le point n'est pas bien sélectionné
    
    End If
End If


Reste une question :

Je n'arrive pas à trouver comment déclarer tous les graphiques d'un classeur comme des cas particuliers d'une classe (comme Hasco l'a fait pour un seul graphique qui se trouve dans la feuille courante).

En d'autres termes, je souhaite éviter de copier X fois mon code dans tous les onglets où je souhaite utiliser la macro.

Par ailleurs, est-ce possible de le déclarer dans une macro complémentaire. En fait, toutes mes macros sont regroupées dans une macro complémentaire, utilisables donc pour tous les classeur que je vais créer selon la même logique.

Bref, comment puis transformer mon code pour le mettre dans une macro complémentaire qui permet de l'utiliser pour tous les graphiques de tous les classeurs que j'ouvrirai ultérieurement... ?

Là, je sèche...

Bonne journée à vous !
 
G

Guest

Guest
Re : Sélectionner cellule correspondante à un point d'un graphique

Bonjour,

Sur la base du classeur que je t'avais joint précédement:

A mettre dans le module thisWorkbook

Code:
Public WithEvents oChart As Chart
 
Private Sub oChart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
    Dim o As Variant
    If ElementID = xlSeries And Arg2 > -1 Then
        o = Split(oChart.SeriesCollection(Arg1).Formula, ",")
        Range(Split(o(2), "!")(1))(Arg2).Select
    End If
End Sub
 
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.ChartObjects.Count > 0 Then Set oChart = Sh.ChartObjects(1).Chart
End Sub

Comme ceci l'objet oChart représentera le premier graphique de la feuille active.

C'est le plus simple, sinon il te faudra passer par une classe qui gère une collection d'objet Chart et leurs évènement. C'est un autre boulot, dans lequel je ne me lancerai pas ici. A toi si le coeur t'en dis d'étudier la chose.
A+
 
Dernière modification par un modérateur:

quattropiloctomie

XLDnaute Nouveau
Re : Sélectionner cellule correspondante à un point d'un graphique

Bonjour !

MERCI Hasco pour ton aide. Voici comment j'ai réussi à adapter ton code pour que cela fonctionne avec un graphique et non une feuille avec un graphique

HTML:
Public WithEvents oChart As Chart

Private Sub oChart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)

Dim LignMasq

If ElementID = xlSeries Then
    If Arg2 > 0 Then
    
        Worksheets("--- (1)").Activate
        
        Range("a1").Activate ' décompte les lignes maséquées
Boucle1:
        ActiveCell.Offset(1, 0).Activate
            If ActiveCell.EntireRow.Hidden = True Then GoTo Boucle1
            LignMasq = ActiveCell.Row
         
        Worksheets("--- (1)").Cells(Arg2 + LignMasq, 3).Activate 'active la ligne qui correspond au point et la 3ème colonne
        
        Application.Run ("SelectionnerLignesDocumentation")
        Application.Run ("AjusterSélectionLignesAvantAprès")

        
        Else      '   permet de re-cliquer si le point n'est pas bien sélectionné
    
    End If
End If

End Sub


Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Set oChart = ActiveChart
End Sub

C'est parfait !
 

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote