Salut

J’ai un MSHFlexGrid de 9 colonnes et de x lignes, en temps ordinaire x et de l’ordre de 200/300 lignes au maximum.
Mais, en cette fin d’année les utilisateurs veulent pouvoir afficher différentes vues à des fins statistiques suivant des critères qu’ils ont la possibilité de définir dans l’interface.
Cela amène l’affichage de plusieurs centaines de lignes (aux plus 995, mais chaque années cela va augmenter plus ou moins d’un millier).

Mon problème, qui sera de plus en plus criant dans les mois et années à venir, dans ce MSHFlexGrid ils ont la possibilité de rechercher une occurrence (mini moteur de recherche).
Pour la recherche c’est Ok, c'est suffisamment rapide.

La première ligne trouvée pour la première occurrence n’étant pas toujours visible, jusqu’à maintenant j’utilise ce code pour la faire apparaitre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
 
Private Type Idx
    Indx As Integer
    Xcol As Integer
    Xlgn As Integer
End Type
Dim IdxRech() As Idx
'..............
Private Sub VisualiseRecherche()
MSHFlexGrid1.Row = IdxRech(IdxRec).Xlgn: MSHFlexGrid1.Col = IdxRech(IdxRec).Xcol
'IsVisibleRow, Renvoie ou définit une valeur qui détermine si une ligne spécifique est visible.
If MSHFlexGrid1.RowIsVisible(IdxRech(IdxRec).Xlgn) = False Then
    For T = MSHFlexGrid1.rows - 1 To 1 Step -1
        MSHFlexGrid1.TopRow = T
        If MSHFlexGrid1.RowIsVisible(IdxRech(IdxRec).Xlgn) = True Then Exit For
    Next T
End If
End Sub
En regardant l’aide MSDN de RowIsVisible il est indiqué :
Renvoie ou définit une valeur qui détermine si une ligne spécifique est visible.
object.RowIsVisible(index) [=Boolean]
index Valeur de type Long qui indique la colonne. (Colonne ?)
Donc plutôt qu’une boucle, je tente ces 3 lignes à tour de role, en pensant que cela sera plus rapide de faire apparaitre la ligne voulue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
If MSHFlexGrid1.RowIsVisible(IdxRech(IdxRec).Xlgn) = False Then
     'MSHFlexGrid1.RowIsVisible(IdxRech(IdxRec).Xlgn) = True
     'MSHFlexGrid1.RowIsVisible(IdxRech(IdxRec).Xcol) = True
     'MSHFlexGrid1.RowIsVisible(2) = True
End If
Problème, j’ai comme message d’erreur
Erreur de compilation : Affectation à une constante non autorisée
Pourtant il est bien écrit que l’on peut définir cette propriété.
Merci de vos éclairsissements.