Bonjour à tous,
Contexte:
J'ai un code qui me permet d'obtenir des informations (dans la barre d'état d'excel) d'un point issu d'un nuage de points lorsqu'on passe la souris dessus. Cela marche très bien à condition qu'il n'y est pas de filtres appliqués car en effet si il y en a cela fausse les données que j'ajoute dans la barre d'état.
Voici le code pour avoir ces infos:
Ici je rajoute donc 3 informations dans la barre d'état: un nom de rapport, d'article et une longueur.
Pour appliquer tout cela , j'appelle la procédure précédente dans un module ;
Ce que j'aimerais:
C'est que si il y a des filtres dans la base (le graphique se met bien à jour normalement), les informations dans la barre d'état correspondent à la bonne ligne!!
Voici un petit exemple d'erreur:
Par exemple si je filtre sur un critère et qu'il ne me reste plus qu'une donnée dans la base (suite à ce filtre), celle donnée sera mise en 2ieme ligne (après la ligne des étiquettes de lignes), or quand il n'y a pas de filtres, cette donnée se situe à la 65ieme ligne.
Le problème c'est que les informations de la base vont être celles de la PREMIÈRE LIGNE QUAND IL N'Y A PAS DE FILTRE DANS LA BASE ET NON LA PREMIÈRE LIGNE AVEC FILTRE (OU LA 65 ieme LIGNE SANS FILTRE)
Voilà c'est un peu compliqué à expliquer en texte..
C'est un peu comme quand en veut appliquer un calcul et qu'on a des filtres: on n'utilise pas =moyenne mais =sous.total(.....) qui ne prend pas en compte les données masquées;
Le principe est un peu identique ici;
Merci d'avance pour votre aide,
Contexte:
J'ai un code qui me permet d'obtenir des informations (dans la barre d'état d'excel) d'un point issu d'un nuage de points lorsqu'on passe la souris dessus. Cela marche très bien à condition qu'il n'y est pas de filtres appliqués car en effet si il y en a cela fausse les données que j'ajoute dans la barre d'état.
Voici le code pour avoir ces infos:
Code:
Option Explicit
Public WithEvents Graph1 As Chart
Private Sub Graph1_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim ElementID As Long, SeriesIndex As Long, PointIndex As Long
Dim S As Series, H As Integer, j As Integer, Form As String
Dim CellX As Range, CellY As Range
Graph1.GetChartElement x, y, ElementID, SeriesIndex, PointIndex
If ElementID = xlSeries Then
Form = Graph1.SeriesCollection(SeriesIndex).Formula
H = InStr(1, Form, ",") + 1
j = InStr(H, Form, ",") + 1
Set CellX = Range(Mid$(Form, H, j - H - 1))(PointIndex)
Set CellY = Range(Mid$(Form, j, InStr(j, Form, ",") - j))(PointIndex)
Application.StatusBar = "REPORT = " & CellX(1, 4) & " ARTICLE = " & CellX(1, 5) & " LENGTH = " & CellX(1, 21).Value & " | "
Else: Application.StatusBar = False
End If
End Sub
Ici je rajoute donc 3 informations dans la barre d'état: un nom de rapport, d'article et une longueur.
Code:
Dim Graph1 As Classe1
Dim Graph2 As Classe1
Sub lien1()
Set Graph1 = New Classe1
Set Graph1.Graph1 = Sheets(3).ChartObjects(1).Chart
End Sub
Pour appliquer tout cela , j'appelle la procédure précédente dans un module ;
Ce que j'aimerais:
C'est que si il y a des filtres dans la base (le graphique se met bien à jour normalement), les informations dans la barre d'état correspondent à la bonne ligne!!
Voici un petit exemple d'erreur:
Par exemple si je filtre sur un critère et qu'il ne me reste plus qu'une donnée dans la base (suite à ce filtre), celle donnée sera mise en 2ieme ligne (après la ligne des étiquettes de lignes), or quand il n'y a pas de filtres, cette donnée se situe à la 65ieme ligne.
Le problème c'est que les informations de la base vont être celles de la PREMIÈRE LIGNE QUAND IL N'Y A PAS DE FILTRE DANS LA BASE ET NON LA PREMIÈRE LIGNE AVEC FILTRE (OU LA 65 ieme LIGNE SANS FILTRE)
Voilà c'est un peu compliqué à expliquer en texte..
C'est un peu comme quand en veut appliquer un calcul et qu'on a des filtres: on n'utilise pas =moyenne mais =sous.total(.....) qui ne prend pas en compte les données masquées;
Le principe est un peu identique ici;
Merci d'avance pour votre aide,
Dernière édition: