Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/08/2011, 16h07   #1
Membre du Club
 
Homme Rémi GAUDINAT
Inscription : juin 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Rémi GAUDINAT
Âge : 43

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 53
Points : 47
Points : 47
Envoyer un message via Skype™ à Rémi GAUDINAT
Par défaut recherche sur KeyPress

Bonjour tout le monde,
Mon but dans le code ci-après est de faire une recherche sur une liste mais de manière instantanée, pas après validation d'un critère de recherche, un peu à la manière d'une page de recherche Google mais pas aussi fortiche.
Tout fonctionne bien, même l'affreux simplequote qui m'a bien embêté, mais il me reste un souci.
Si l'utilisateur quitte le champ "txt_recherche_secteur" et ensuite revient dessus en sélectionnant tout le contenu de celui-ci et le supprime, la liste s'actualise toujours en fonction de ma variable "critere_recherche_secteur" et non pas en tenant compte du fait que le champ est vide, ce qui est logique.
Je cherche donc un moyen d'éviter la sélection de tout le contenu du champ, avec un repositionnement automatique du curseur en fin de texte et aussi le moyen de désactiver l'action de la souris mais uniquement sur le champ (ne pas pouvoir se déplacer à l'intérieur de la chaîne de caractère).

Voici donc le code
Code :
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
Option Compare Database
Option Explicit
Dim longueur_critere_recherche_secteur As Integer, critere_recherche_secteur, dernier_saisi As String
 
Private Sub Form_Load()
Call refresh_liste_secteur_sans_recherche
End Sub
 
 
Private Sub txt_recherche_secteur_KeyDown(KeyCode As Integer, Shift As Integer)
'inaction des touches Suppr et déplacement droite / gauche
If KeyCode = vbKeyDelete Or KeyCode = vbKeyLeft Or KeyCode = vbKeyRight Then KeyCode = 0
End Sub
 
Private Sub txt_recherche_secteur_KeyPress(KeyAscii As Integer)
If KeyAscii = 0 Or KeyAscii = 1 Or KeyAscii = 2 Or KeyAscii = 3 Or KeyAscii = 4 Or KeyAscii = 5 Or KeyAscii = 6 _
Or KeyAscii = 7 Or KeyAscii = 9 Or KeyAscii = 10 Or KeyAscii = 11 Or KeyAscii = 12 Or KeyAscii = 13 Or KeyAscii = 14 _
Or KeyAscii = 15 Or KeyAscii = 16 Or KeyAscii = 17 Or KeyAscii = 18 Or KeyAscii = 19 Or KeyAscii = 20 Or KeyAscii = 21 _
Or KeyAscii = 22 Or KeyAscii = 23 Or KeyAscii = 24 Or KeyAscii = 25 Or KeyAscii = 26 Or KeyAscii = 27 Or KeyAscii = 28 _
Or KeyAscii = 29 Or KeyAscii = 30 Or KeyAscii = 31 Then GoTo fin
 
'recherche du dernier caractère saisi (recherche de simplequote)
If KeyAscii = 8 Then
dernier_saisi = Right(critere_recherche_secteur, 1)
End If
 
'doublement du simplequote pour la requête sql
If KeyAscii = 39 Then
    Dim simplequote As String
    simplequote = "''"
    critere_recherche_secteur = critere_recherche_secteur & simplequote
    Call refresh_liste_secteur_recherche
    GoTo fin
End If
 
'recherche si le caractère en cours de suppression est le simplequote afin de supprimer les deux simplequote
If KeyAscii = 8 And dernier_saisi = Chr(39) Then
'recherche si le critère de recherche ne renvoie pas une chaîne vide
        If critere_recherche_secteur = "" Then
        Call refresh_liste_secteur_sans_recherche
        GoTo fin
        End If
 
longueur_critere_recherche_secteur = Len(critere_recherche_secteur)
'on retire les deux simplequote
critere_recherche_secteur = Left(critere_recherche_secteur, longueur_critere_recherche_secteur - 2)
Call refresh_liste_secteur_recherche
 
'suppression du caractère à l'extrème droite du critère de recherche
ElseIf KeyAscii = 8 Then
'recherche si le critère de recherche ne renvoie pas une chaîne vide
        If critere_recherche_secteur = "" Then
        Call refresh_liste_secteur_sans_recherche
        GoTo fin
        End If
 
longueur_critere_recherche_secteur = Len(critere_recherche_secteur)
critere_recherche_secteur = Left(critere_recherche_secteur, longueur_critere_recherche_secteur - 1)
Call refresh_liste_secteur_recherche
 
Else
'remplissage sans condition du critère de recherche et recherche dans la base
critere_recherche_secteur = critere_recherche_secteur & Chr(KeyAscii)
Call refresh_liste_secteur_recherche
End If
 
fin:
End Sub
 
Private Sub refresh_liste_secteur_recherche()
Dim rs01 As ADODB.Recordset
Set rs01 = New ADODB.Recordset
rs01.CursorLocation = adUseClient
rs01.Open "SELECT ID, SECTEUR " _
& "FROM ACTIVITE_SECTEUR " _
& "WHERE (SECTEUR LIKE '%" & critere_recherche_secteur & "%')", connexion_database, adOpenDynamic, adLockReadOnly
Set Me.liste_secteur.Recordset = rs01
rs01.Close
Set rs01 = Nothing
End Sub
 
Private Sub refresh_liste_secteur_sans_recherche()
Dim rs01 As ADODB.Recordset
Set rs01 = New ADODB.Recordset
rs01.CursorLocation = adUseClient
rs01.Open "SELECT ACTIVITE_SECTEUR.* FROM ACTIVITE_SECTEUR", connexion_database, adOpenDynamic, adLockReadOnly
Set Me.liste_secteur.Recordset = rs01
rs01.Close
Set rs01 = Nothing
End Sub
J'ai mis l'intégralité du code du formulaire afin que vous ayez un meilleur aperçu.
Très sincèrement je suis à cours d'idée pour réaliser ce que je souhaiterais faire et toute l'aide que vous pourriez m'apporter serait bienvenue.
Merci d'avance
Rémi GAUDINAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 18h06   #2
Membre du Club
 
Homme Rémi GAUDINAT
Inscription : juin 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Rémi GAUDINAT
Âge : 43

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 53
Points : 47
Points : 47
Envoyer un message via Skype™ à Rémi GAUDINAT
Par défaut une partie résolue

Re-bonjour,
J'ai en partie résolu mon problème avec un évènement sur entrée du champ
Code :
1
2
3
4
5
6
7
Private Sub txt_recherche_secteur_Enter()
If Me.txt_recherche_secteur.Value <> "" Then
Dim nb_char As Integer
nb_char = Len(Me.txt_recherche_secteur.Value)
Me.txt_recherche_secteur.SelStart = nb_char
End If
End Sub
Mais pour bloquer l'action de la souris je cherche mieux que la magouille à deux sous qui m'est venue à l'esprit, il doit y avoir mieux que ça !!!
Code :
1
2
3
4
5
Private Sub txt_recherche_secteur_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbKeyLButton Or Button = vbKeyRButton Then
Me.liste_secteur.SetFocus
End If
End Sub
Merci d'avance de votre aide
Rémi GAUDINAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 16h02   #3
Membre Expert
 
Avatar de bernardmichel
 
Inscription : janvier 2004
Messages : 985
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 985
Points : 1 028
Points : 1 028
Envoyer un message via MSN à bernardmichel Envoyer un message via Skype™ à bernardmichel
Salut !

Peut-être n'est-ce pas ce que tu cherches mais moi, j'aurais fait comme cela:
Code :
1
2
3
Private Sub Test_Click()
    If Me.txt_recherche_secteur<> "" Then Me.txt_recherche_secteur.SelStart = Len(Me.txt_recherche_secteur)
End Sub
bernardmichel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h55   #4
Membre du Club
 
Homme Rémi GAUDINAT
Inscription : juin 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Rémi GAUDINAT
Âge : 43

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 53
Points : 47
Points : 47
Envoyer un message via Skype™ à Rémi GAUDINAT
Citation:
Envoyé par bernardmichel Voir le message
Salut !

Peut-être n'est-ce pas ce que tu cherches mais moi, j'aurais fait comme cela:
Code :
1
2
3
Private Sub Test_Click()
    If Me.txt_recherche_secteur<> "" Then Me.txt_recherche_secteur.SelStart = Len(Me.txt_recherche_secteur)
End Sub
Bonjour,
Je te remercie de t'être penché sur mon cas.
Hélas ce n'est pas tout à fait cela que je recherche car ça fonctionne uniquement si le champ a fait son update. Si l'utilisateur se sert de la souris avant validation du champ et déplace le curseur, alors il y aura erreur. A moins que je ne revoie toute la philosophie et que je détecte la position du curseur, mais à y réfléchir je ne vois pas vraiment comment faire.
Merci quand même
Rémi GAUDINAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h45.


 
 
 
 
Partenaires

Hébergement Web