Bonjour,
Comment grace a une recherche dans un msflexgrid, selectionnner la ligne ?
Merci
Bonjour,
Comment grace a une recherche dans un msflexgrid, selectionnner la ligne ?
Merci
Salut
Pour sélectionner une cellule, tu dois tout bêtement mettre des valeurs aux propriétés Row et Col de ta grille. En supposant que ton algorithme de recherche te retourne les coordonnées de la donnée trouvée dans la grille...
Tu me fais signe si j'ai répondu à côté de la question.
Salut
En attendant, je me suis amusée un peu...
Sur une Form, place une MSFlexGrid nommé mfgGrille, deux Frames (sans nom), un bouton de commande nommé cmdQuitter et une barre d'état (qui se trouve dans les Microsoft Windows Common Control et dont j'ai choisi la version 5 - par erreur, mais ça marche quand même) nommé stbMessages.
Dans le premier Frame, place une étiquette (Label) nommée lblCellule dont la propirété BorderStyle est à FixedSingle, un TextBox nommé txtValeur et un bouton de commande nommé cmdValider dont la propriété Caption est égale à "Valeur".
Dans le second Frame, place un TextBox nommé txtMotCherche, un bouton de commande nommé cmdRechercher (Caption = "Rechercher") et une étiquette (Label) nommée lblCoordTrouvees (BorderStyle = FixedSingle).
Ajoute quelques lignes et quelques colonnes (propriétés Rows et Cols) à la grille.
Copie le code qui suit dans l'éditeur:
Ce programme permet à l'utilisateur de saisir des données, et les ajouter à la grille puis de faire une recherche pour vérifier si une donnée en particulier s'y trouve.
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141 Private Sub Form_Load() Dim i As Integer ' compteur ' Initialise la largeur du pannel dans la barre d'état stbMessages.Panels(1).Width = stbMessages.Width - 30 ' La grille est vide: désactiver la zone de recherche txtMotRecherche.Enabled = False cmdRechercher.Enabled = False ' Initialise les entêtes de lignes et de colonnes mfgGrille.Col = 0 For i = 1 To mfgGrille.Rows - 1 ' numéros de lignes mfgGrille.Row = i mfgGrille.Text = i Next i mfgGrille.Row = 0 For i = 1 To mfgGrille.Cols - 1 ' lettres pour les colonnes mfgGrille.Col = i mfgGrille.Text = Chr(i + 64) Next i ' sélectionne la première cellule mfgGrille.Col = 1 mfgGrille.Row = 1 lblCellule.Caption = "A1" ' réduit la largeur de la première colonne mfgGrille.ColWidth(0) = 360 End Sub Private Sub Form_Activate() ' donne le focus à la zone de saisie txtValeur.SetFocus End Sub Private Sub mfgGrille_Click() Dim sR As String, sC As String sR = mfgGrille.Row sC = Chr(mfgGrille.Col + 64) lblCellule.Caption = sC & sR End Sub Private Sub cmdValider_Click() If (txtValeur <> "") Then mfgGrille.Text = txtValeur.Text txtValeur.Text = "" txtValeur.SetFocus SelectionnerProchaineCellule Else Beep stbMessages.Panels(1).Text = "Entrez une donnée" txtValeur.SetFocus End If End Sub Private Sub SelectionnerProchaineCellule() If mfgGrille.Col = mfgGrille.Cols - 1 Then If mfgGrille.Row = mfgGrille.Rows - 1 Then 'sélectionne la première cellule mfgGrille.Row = 1 mfgGrille.Col = 1 'affiche un message stbMessages.Panels(1).Text = "La grille est pleine" 'passe le focus à la zone de recherche txtMotRecherche.SetFocus Else 'sélectionne la première cellule de la ligne suivante mfgGrille.Row = mfgGrille.Row + 1 mfgGrille.Col = 1 'une ligne pleine, recherche activée txtMotRecherche.Enabled = True cmdRechercher.Enabled = True End If Else 'sélectionne la cellule de la colonne suivante mfgGrille.Col = mfgGrille.Col + 1 End If 'affiche l'adresse de la cellule sélectionnée lblCellule.Caption = Chr(mfgGrille.Col + 64) & mfgGrille.Row End Sub Private Sub txtValeur_KeyPress(KeyAscii As Integer) ' Déclenche le bouton Valider sur la touche Entrée If KeyAscii = 13 Then cmdValider_Click End If End Sub Private Sub cmdRechercher_Click() 'Effacer le message de la barre d'état stbMessages.Panels(1).Text = "" If (txtMotRecherche.Text <> "") Then ChercherDansGrille (txtMotRecherche.Text) 'donne le focus à la grille: pour mieux voir la sélection mfgGrille.SetFocus Else Beep stbMessages.Panels(1).Text = "Entrez une expression à chercher" txtValeur.SetFocus End If End Sub Private Sub ChercherDansGrille(sMotCherche As String) Dim iR As Integer, iC As Integer Dim bTrouve As Boolean bTrouve = False iR = 1 Do While iR < (mfgGrille.Rows) And Not bTrouve iC = 1 Do While iC < (mfgGrille.Cols) And Not bTrouve ' sélectionne une cellule mfgGrille.Row = iR mfgGrille.Col = iC ' vérifie son contenu If mfgGrille.Text = sMotCherche Then bTrouve = True ' incrémente iC iC = iC + 1 Loop ' incrémente iR iR = iR + 1 Loop If bTrouve Then 'affiche les coordonnées lblCoordTrouvees.Caption = Chr(iC + 63) & (iR - 1) 'donne le focus à la grille pour mieux voir la sélection mfgGrille.SetFocus Else Beep 'affiche un message stbMessages.Panels(1).Text = sMotCherche & " n'est pas dans la grille" End If End Sub Private Sub txtMotRecherche_KeyPress(KeyAscii As Integer) ' Déclenche le bouton Rechercher sur la touche Entrée If KeyAscii = 13 Then cmdRechercher_Click End If End Sub Private Sub cmdQuitter_Click() End End Sub
Amuse toi bien!
il trouve bien l'info a chercher, il met le focus dessus, mais on doit se deplacer dans la grille avec les curseurs
Les grilles que j'ai sont > 500 lignes
OK! Il faut donc placer la cellule trouvée bien en vue.
Ce code place la sélection en haut à gauche par défilement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mfgGrille.TopRow = mfgGrille.Row mfgGrille.LeftCol = mfgGrille.Col
Je te remercie beaucoup
Cela fait deux fois ou trois que tu me reponds avec exple a l'appui
La ou d'autre laisse tombe
Si j'avais une note a te donne 10/10
Et encore MERCI
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager