Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

formulaire de recherche

8 réponses
Avatar
fth
Bonjour,
j'ai une petite application (développée grace au forum - merci) qui fait la
chose suivante:
Je scan un repertoire;
tous les fichiers présents sont encodé dans une table;

Form1 en mode continu
recordset de la table QDoc.
un bouton BtnScan avec petit code pour scanner et remplir la table.
un double click sur le nom d'un fichier ouvre celui ci avec son appli par
defaut.
un champ text independant pour encoder un ou plusieurs mots clefs.

la deuxieme fonction que devrait avoir l'appli:
sur base de mots clef, afficher les documents correspondant;
chaque document peut avoir plusieurs mots clefs;

je cherche donc à noter un ou plusieurs mots clefs dans la zone texte
(TxtSearchDoc)
sur [enter] ou [double click], afficher les documents correspondants;
si la zone TxtSearchDoc est vide, tous les documents sont visible.

Je tourne lamentablement en rond et ne trouve pas la bonne formule.

Merci pour vos piste,

Frédéric

8 réponses

Avatar
3stone
Salut,

"fth"
| j'ai une petite application (développée grace au forum - merci) qui fait la
| chose suivante:
| Je scan un repertoire;
| tous les fichiers présents sont encodé dans une table;
|
| Form1 en mode continu
| recordset de la table QDoc.
| un bouton BtnScan avec petit code pour scanner et remplir la table.
| un double click sur le nom d'un fichier ouvre celui ci avec son appli par
| defaut.
| un champ text independant pour encoder un ou plusieurs mots clefs.
|
| la deuxieme fonction que devrait avoir l'appli:
| sur base de mots clef, afficher les documents correspondant;
| chaque document peut avoir plusieurs mots clefs;
|
| je cherche donc à noter un ou plusieurs mots clefs dans la zone texte
| (TxtSearchDoc)
| sur [enter] ou [double click], afficher les documents correspondants;
| si la zone TxtSearchDoc est vide, tous les documents sont visible.


Ce n'est pas très difficile... mais tu devras créer ta requête de façon
dynamique, au moins pour la partie critères.

Si tu saisi un ou plusieurs mots, il faudra bien les "découper" par un

varTableau = Split(txtSearchDoc)

ensuite, regarder combien d'éléments contient ta variable tableau
avec LBound(var) et UBound(var)

... et à contruitre ta condition Where avec quelque chose comme


For i = LBound(varTableau) TO UBound(varTableau)

if Len(strWhere) = 0 then
strWhere = "LeChamp = '" & varTableau(0) & "'"
else
strWhere = strWhere & " OR LeChamp='" & varTableau(x) & "'"
end if

Next i


Pour finir, tu concatènes ta chaine "Select Machin, Truc From LaTable "
avec le strWhere et tu le renseignes comme recordsource du formulaire
en terminant par un Me.Requery


PS:
Il manque la déclaration des variables et une relecture, car écrit à "main levée"

;-))

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
FTH
Bonjour Pierre,

avec un peu de delais, je me suis attelé à ta solution..
ok pour la fonction split.

là ou je calle maitenant depuis qq temps ...
message d'erreur quand je compile:
Compile error: Expected array

d'avance merci
(si en plus, je pouvais "comprendre")
re merci

Frédéric

dim MyTxt as string
dim X as variant
dim i as long

Mytxt =me.TxtKeyDoc ' le champs de ma form qui contient les filter keys

x= split(mytxt, " ") ' la separation se fait sur un espace
for i = 0 to Ubound(x)
if len((Mytxt) = 0 then
strwhere = "keydoc'" & mytxt(0) & "'"
else
strwhere = strwhere & " OR keydoc=" & mytxt(x) & "'"

next i

end sub




----- Original Message -----
From: "3stone"
Newsgroups: microsoft.public.fr.access
Sent: Tuesday, March 11, 2008 3:22 AM
Subject: Re: formulaire de recherche


Salut,

"fth"
| j'ai une petite application (développée grace au forum - merci) qui fait
la
| chose suivante:
| Je scan un repertoire;
| tous les fichiers présents sont encodé dans une table;
|
| Form1 en mode continu
| recordset de la table QDoc.
| un bouton BtnScan avec petit code pour scanner et remplir la table.
| un double click sur le nom d'un fichier ouvre celui ci avec son appli
par
| defaut.
| un champ text independant pour encoder un ou plusieurs mots clefs.
|
| la deuxieme fonction que devrait avoir l'appli:
| sur base de mots clef, afficher les documents correspondant;
| chaque document peut avoir plusieurs mots clefs;
|
| je cherche donc à noter un ou plusieurs mots clefs dans la zone texte
| (TxtSearchDoc)
| sur [enter] ou [double click], afficher les documents correspondants;
| si la zone TxtSearchDoc est vide, tous les documents sont visible.


Ce n'est pas très difficile... mais tu devras créer ta requête de façon
dynamique, au moins pour la partie critères.

Si tu saisi un ou plusieurs mots, il faudra bien les "découper" par un

varTableau = Split(txtSearchDoc)

ensuite, regarder combien d'éléments contient ta variable tableau
avec LBound(var) et UBound(var)

... et à contruitre ta condition Where avec quelque chose comme


For i = LBound(varTableau) TO UBound(varTableau)

if Len(strWhere) = 0 then
strWhere = "LeChamp = '" & varTableau(0) & "'"
else
strWhere = strWhere & " OR LeChamp='" & varTableau(x) & "'"
end if

Next i


Pour finir, tu concatènes ta chaine "Select Machin, Truc From LaTable "
avec le strWhere et tu le renseignes comme recordsource du formulaire
en terminant par un Me.Requery


PS:
Il manque la déclaration des variables et une relecture, car écrit à "main
levée"

;-))

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)


"3stone" wrote in message

news:
Salut,

"fth"
| j'ai une petite application (développée grace au forum - merci) qui fait
la
| chose suivante:
| Je scan un repertoire;
| tous les fichiers présents sont encodé dans une table;
|
| Form1 en mode continu
| recordset de la table QDoc.
| un bouton BtnScan avec petit code pour scanner et remplir la table.
| un double click sur le nom d'un fichier ouvre celui ci avec son appli
par
| defaut.
| un champ text independant pour encoder un ou plusieurs mots clefs.
|
| la deuxieme fonction que devrait avoir l'appli:
| sur base de mots clef, afficher les documents correspondant;
| chaque document peut avoir plusieurs mots clefs;
|
| je cherche donc à noter un ou plusieurs mots clefs dans la zone texte
| (TxtSearchDoc)
| sur [enter] ou [double click], afficher les documents correspondants;
| si la zone TxtSearchDoc est vide, tous les documents sont visible.


Ce n'est pas très difficile... mais tu devras créer ta requête de façon
dynamique, au moins pour la partie critères.

Si tu saisi un ou plusieurs mots, il faudra bien les "découper" par un

varTableau = Split(txtSearchDoc)

ensuite, regarder combien d'éléments contient ta variable tableau
avec LBound(var) et UBound(var)

... et à contruitre ta condition Where avec quelque chose comme


For i = LBound(varTableau) TO UBound(varTableau)

if Len(strWhere) = 0 then
strWhere = "LeChamp = '" & varTableau(0) & "'"
else
strWhere = strWhere & " OR LeChamp='" & varTableau(x) & "'"
end if

Next i


Pour finir, tu concatènes ta chaine "Select Machin, Truc From LaTable "
avec le strWhere et tu le renseignes comme recordsource du formulaire
en terminant par un Me.Requery


PS:
Il manque la déclaration des variables et une relecture, car écrit à "main
levée"

;-))

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)




Avatar
Fabien
Salut FTH
Voir les petites corrections dans ton code ci-aprés ....
Bonjour Pierre,

avec un peu de delais, je me suis attelé à ta solution..
ok pour la fonction split.

là ou je calle maitenant depuis qq temps ...
message d'erreur quand je compile:
Compile error: Expected array

d'avance merci
(si en plus, je pouvais "comprendre")
re merci

Frédéric

dim MyTxt as string
dim X as variant
dim i as long

Mytxt =me.TxtKeyDoc ' le champs de ma form qui contient les filter keys

x= split(mytxt, " ") ' la separation se fait sur un espace et genere un tableau X
for i = 0 to Ubound(x) ' On parcout le tableau depuis le 1er élément jusqu'au dernier

if len(strwhere) = 0 then 'Si la chaine est vide
strwhere = "keydoc ='" & X(0) & "'" 'Alors on l'initialise
else
strwhere = strwhere & " OR keydoc='" & X(I) & "'" 'Sinon on la complete
End if


next i

end sub

@+


Avatar
FTH
Fabien,

merci pour tes infos d'hier et pour les explications..

il ne me reste que deux petits "trucs" à solutionner...
1.mon code ci dessous ne me permet pas de trouver les lignes qui comportent
deux critères
ex. key1 Key2 dans le champs KeyDoc. si je fais une recherche sur key1, je
ne reçois en retour que les lignes avec juste key1, pas celles avec Key1
Key2
2. Si le champs TxtKeyDoc est vide et que je click sur le bouton, j'ai une
erreur. Je pensais afficher toute la liste.

Je continue mes recherches .. mais une piste serait bienvenue ;-)

Merci

Frédéric


"Fabien" wrote in message
news:
Salut FTH
Voir les petites corrections dans ton code ci-aprés ....
Bonjour Pierre,

avec un peu de delais, je me suis attelé à ta solution..
ok pour la fonction split.

là ou je calle maitenant depuis qq temps ...
message d'erreur quand je compile:
Compile error: Expected array

d'avance merci
(si en plus, je pouvais "comprendre")
re merci

Frédéric

dim MyTxt as string
dim X as variant
dim i as long

Mytxt =me.TxtKeyDoc ' le champs de ma form qui contient les filter keys

x= split(mytxt, " ") ' la separation se fait sur un espace et genere un
tableau X for i = 0 to Ubound(x) ' On parcout le tableau depuis le 1er
élément jusqu'au dernier

if len(strwhere) = 0 then 'Si la chaine est vide
strwhere = "keydoc ='" & X(0) & "'" 'Alors on l'initialise
else
strwhere = strwhere & " OR keydoc='" & X(I) & "'" 'Sinon on la complete
End if


next i

end sub

@+




Avatar
Fabien
Fabien,

merci pour tes infos d'hier et pour les explications..

il ne me reste que deux petits "trucs" à solutionner...
1.mon code ci dessous ne me permet pas de trouver les lignes qui
comportent deux critères
ex. key1 Key2 dans le champs KeyDoc. si je fais une recherche sur key1,
je ne reçois en retour que les lignes avec juste key1, pas celles avec
Key1 Key2
2. Si le champs TxtKeyDoc est vide et que je click sur le bouton, j'ai
une erreur. Je pensais afficher toute la liste.

Je continue mes recherches .. mais une piste serait bienvenue ;-)

Merci

Frédéric


"Fabien" wrote in message
news:
Salut FTH
Voir les petites corrections dans ton code ci-aprés ....
Bonjour Pierre,

avec un peu de delais, je me suis attelé à ta solution..
ok pour la fonction split.

là ou je calle maitenant depuis qq temps ...
message d'erreur quand je compile:
Compile error: Expected array

d'avance merci
(si en plus, je pouvais "comprendre")
re merci

Frédéric

dim MyTxt as string
dim X as variant
dim i as long

Mytxt =me.TxtKeyDoc ' le champs de ma form qui contient les filter keys

x= split(mytxt, " ") ' la separation se fait sur un espace et genere
un tableau X for i = 0 to Ubound(x) ' On parcout le tableau depuis le
1er élément jusqu'au dernier

if len(strwhere) = 0 then 'Si la chaine est vide
strwhere = "keydoc ='" & X(0) & "'" 'Alors on l'initialise
else
strwhere = strwhere & " OR keydoc='" & X(I) & "'" 'Sinon on la complete
End if


next i

end sub

@+





Bonjour,
Reprennons

Dim StrWhere as String
Dim X as Variant
Dim I as Integer
StrWhere = ""
If Len(Me.TxtKeyDoc)>0 then
X=Split(Me.TxtKeyDoc," ")
For I=0 to Ubound(X)
If len(StrWhere)=0 then
StrWhere=" Where KeyDoc = '" & X(I) & "'"
else
StrWhere = Strwhere & " Or KeyDoc ='" & X(I) & "'"
end If
next I
End if


et comme ça ?



Avatar
FTH
Re,

ça semble partir du bon coté cette fois..
Reste maintenant à afficher les records..

j'ajoute donc StrSQL as string
et à la fin, sous le End If
StrSQL = "SELECT * FROM Q_Doc" & StrWhere
docmd.runsql StrSQL

ce qui me donne une erreur:
A RunSQL action requires an argument consisting of an SQL statment..
quid?

Mercio


"Fabien" wrote in message
news:%
Fabien,

merci pour tes infos d'hier et pour les explications..

il ne me reste que deux petits "trucs" à solutionner...
1.mon code ci dessous ne me permet pas de trouver les lignes qui
comportent deux critères
ex. key1 Key2 dans le champs KeyDoc. si je fais une recherche sur key1,
je ne reçois en retour que les lignes avec juste key1, pas celles avec
Key1 Key2
2. Si le champs TxtKeyDoc est vide et que je click sur le bouton, j'ai
une erreur. Je pensais afficher toute la liste.

Je continue mes recherches .. mais une piste serait bienvenue ;-)

Merci

Frédéric


"Fabien" wrote in message
news:
Salut FTH
Voir les petites corrections dans ton code ci-aprés ....
Bonjour Pierre,

avec un peu de delais, je me suis attelé à ta solution..
ok pour la fonction split.

là ou je calle maitenant depuis qq temps ...
message d'erreur quand je compile:
Compile error: Expected array

d'avance merci
(si en plus, je pouvais "comprendre")
re merci

Frédéric

dim MyTxt as string
dim X as variant
dim i as long

Mytxt =me.TxtKeyDoc ' le champs de ma form qui contient les filter keys

x= split(mytxt, " ") ' la separation se fait sur un espace et genere un
tableau X for i = 0 to Ubound(x) ' On parcout le tableau depuis le 1er
élément jusqu'au dernier

if len(strwhere) = 0 then 'Si la chaine est vide
strwhere = "keydoc ='" & X(0) & "'" 'Alors on l'initialise
else
strwhere = strwhere & " OR keydoc='" & X(I) & "'" 'Sinon on la complete
End if


next i

end sub

@+





Bonjour,
Reprennons

Dim StrWhere as String
Dim X as Variant
Dim I as Integer
StrWhere = ""
If Len(Me.TxtKeyDoc)>0 then
X=Split(Me.TxtKeyDoc," ")
For I=0 to Ubound(X)
If len(StrWhere)=0 then
StrWhere=" Where KeyDoc = '" & X(I) & "'"
else
StrWhere = Strwhere & " Or KeyDoc ='" & X(I) & "'"
end If
next I
End if


et comme ça ?






Avatar
Fabien
Re,

ça semble partir du bon coté cette fois..
Reste maintenant à afficher les records..

j'ajoute donc StrSQL as string
et à la fin, sous le End If
StrSQL = "SELECT * FROM Q_Doc" & StrWhere
docmd.runsql StrSQL

ce qui me donne une erreur:
A RunSQL action requires an argument consisting of an SQL statment..
quid?

Mercio


Bonjour,

Utilise plutôt docmd.openquery StrSQl
Je pense que le runsql s'utilise pour des requêtes de mise à jour,
ajout,suppressions.

@+

Avatar
3stone
Salut Fabien,

"Fabien"
| Utilise plutôt docmd.openquery StrSQl
| Je pense que le runsql s'utilise pour des requêtes de mise à jour,
| ajout,suppressions.


Merci d'avoir pris la relève.


@ FTF :
Comme c'est un formulaire de recherche, il serait plus convivial de renseigner
ta chaine SQL comme source d'un sous-formulaire en mode continu ou
pourquoi pas à une zone de liste.
Ainsi, tu fais la rechecherche et l'affichage dans le même formulaire...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)