Problème sur access avec une textboc

Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention   -  
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis dans la création d'une base de donnée, j'essaye d'incorporer dans mon formulaire une recherche par mots clefs. (via une txtbox). Donc en mettant un mot ou un debut de mot et en tapant sur entrée, le résultat de ma recherche devrait apparaître dans une zone de résultat.

Bref j'ai besoin d'aide, tout aide sera donc la bienvenue.

43 réponses

Résumé de la discussion

La problématique porte sur l’implémentation d’une recherche par mots-clefs dans un formulaire Access, avec les résultats affichés dans une zone dédiée.
Les réponses préconisent que le formulaire des résultats soit alimenté par la bonne table et que les contrôles correspondent aux champs, afin de pouvoir appliquer un critère de filtrage issus de la saisie.
Une solution pratique consiste à gérer l’événement IstResults_DblClick en définissant Critere = "TITRE" & "='" & Me.IstResults & "'" puis DoCmd.OpenForm "Formulairedesaisie", acNormal, , Critere.
Une autre piste évoque l’utilisation d’un champ de type lien hypertexte pour référencer des documents et les exploiter via le formulaire.

Généré automatiquement par IA
sur la base des meilleures réponses
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Quelle instruction SQL avez-vous utilisez pour renseigner la zone de résultat ?
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Private Sub chkREFERENCE_Click()

If Me.ChkREFERENCE Then
Me.cmbRechREFERENCE.Visible = False

Else
Me.cmbRechREFERENCE.Visible = True
End If

RefreshQuery

End Sub

Private Sub chkTITRE_Click()

If Me.ChkTITRE Then
Me.txtRechTITRE.Visible = False
Else
Me.txtRechTITRE.Visible = True
End If

RefreshQuery

End Sub

Private Sub chkMOTSCLEFS_Click()

If Me.chkMOTSCLEFS Then
Me.txtRechMOTSCLEFS.Visible = False
Else
Me.txtRechMOTSCLEFS.Visible = True
End If

RefreshQuery

End Sub

Private Sub cmbRechREFERENCE_BeforeUpdate(Cancel As Integer)

RefreshQuery

End Sub

Private Sub IstResults_DblClick(Cancel As Integer)
DoCmd.OpenForm "Formulairedesaisie", acNormal, , "[REFERENCE] = " & lstResults

End Sub

Private Sub txtRechTITRE_BeforeUpdate(Cancel As Integer)
RefreshQuery

End Sub

Private Sub txtRechMOTSCLEFS_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub

Private Sub Form_Load()

Dim ctl As Control

For Each ctl In Me.Controls
Select Case Left(ctl.Name, 3)
Case "chk"
ctl.Value = -1

Case "txt"
ctl.Visible = False
ctl.Value = ""

Case "cmb"
ctl.Visible = False

End Select
Next ctl

End Sub

Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String

SQL = "SELECT TITRE,AUTEUR,EDITEUR, DATE_EDITION, MOTS_CLEFS FROM table1 "

If Me.ChkREFERENCE Then
SQL = SQL & "And Table1!REFERENCE = '" & Me.cmbRechREFERENCE & "*' "
End If

If Me.ChkTITRE Then
SQL = SQL & "And Table1!TITRE = '" & Me.txtRechTITRE & "*' "
End If

If Not Me.chkMOTSCLEFS Then
SQL = SQL & "And Table1!MOTS-CLEFS like '*" & Me.txtRechMOTSCLEFS & "*' "
End If

SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where") - Len("Where") + 1))
SQL = SQL & ";"

Me.lblStats.Caption = DCount("*", "Table1", Reference) & " / " & DCount("*", "Table1")
Me.IstResults.RowSource = SQL
Me.IstResults.Requery

End Sub

Je vous envoie tout mes codes j'arrive pas a envoyé la base.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Est-ce que le code produit une erreur ?
Si oui sur quelle ligne ?
Il me semble qu'il s'agit d'une multi-recherche ... et non d'une simple recherche, si c'est le cas il faut suivre le code pas à pas pour contrôler la bonne exécution ... !
Au passage j'ai trouvé ceci :
dans la procédure : [Private Sub Form_Load()], il manque les 2 instructions suivantes juste avant le End Sub:
Me.lstResults.RowSource = "SELECT …, … , … FROM ….;"
Me.lstResults.Requery

Note: pour envoyer la base il faut la compacter si nécessaire puis la compresser en ZIP ou RAR et ensuite vous pouvez la mettre sur www.cjoint.com ou www.cijoint.fr
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Merci LE PINGOU je regarde ca demain et si j'ai d'autre soucis, j'hésite pas a te recontacter.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Proposition : remplacer la procédure [Private Sub RefreshQuery] par celle qui suit:
Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String
SQL = "SELECT TITRE, AUTEUR, EDITEUR, DATE_EDITION, MOTS_CLEFS FROM Table1 Where Table1!TITRE like'*'"
If Not Me.ChkREFERENCE Then
    SQL = SQL & "And Table1!REFERENCE = '" & Me.cmbRechREFERENCE & "*' "
End If
If Not Me.ChkTITRE Then
    SQL = SQL & "And Table1!TITRE like '*" & Me.txtRechTITRE & "*' "
End If
If Not Me.chkMOTSCLEFS Then
    SQL = SQL & "And Table1!MOTS_CLEFS like'" & Me.txtRechMOTSCLEFS & "*' "
End If
SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where") - Len("Where") + 1))
SQL = SQL & ";"
Me.lblStats.Caption = DCount("*", "Table1", Reference) & " / " & DCount("*", "Table1")
Me.IstResults.RowSource = SQL
Me.IstResults.Requery
End Sub
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Merci je verrais ca Mardi car j'ai pas la base chez moi. Si tu as d autres conseils n'hésite pas car j'ai fais ce formulaire juste avec des cours sur internet donc niveau SQL je suis un peu à la masse.

Merci encore, je croise les doigts pour que ca fonctionnne.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Merci, bonnes fêtes de Pâques.
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Excellent, Jean-Pierre. Je te remercie tu me sauve la vie. Peut être pas quand même.
J'ai juste encore une question, en espérant ne pas t'embêter. La recherche sur les mots clefs se fait uniquement sur le premier mot, est-il possible de la faire sur l'ensemble des mots.

De plus, dans référence et titre quand je choisi (ref ou titre), j'aimerais quand tapant Entrée, ma selection apparaît dans la boite de résultat.

PS : Je vais pouvoir avoir une bonne note a mon projet et ainsi obtenir ma licence.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Merci Mickael1461,
Merci.
Pour tenir compte de vos remarques, il faut encore remplacer 2 lignes dans la procédure [Private Sub RefreshQuery] par celles qui suivent:
SQL = SQL & "And Table1!TITRE like '*" & Me.txtRechTITRE & "*' "
SQL = SQL & "And Table1!MOTS_CLEFS like'*" & Me.txtRechMOTSCLEFS & "*' "
Avec ces 2 corrections la recherche d'un mot complet ou partiel se fait n'importe ou dans la chaine.

Dernier point; pour la zone de liste déroulante [txtRechTITRE] la mention [Procédure événementielle] manque pour l'événement [Avant MAJ].

Note: si j'ose me permettre, ce n'est pas la note qui est importante mais le fait d'avoir appris et compris quelque cose de plus ...
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
La Note (bas de votre message) n'est en soit pas fausse, cependant sans la note (cette fois ci, celle que j'aurais à mon projet et non celle de votre message), l'obtention de ma licen ce pourrait être bien compromise.
Donc à cet effet je préfère pas tous comprendre, surtout que je ne fais pas une licence en informatique.

Ceci dit tout à l'air de bien fonctionner mais si vous avez des propositions afin d'améliorer cette petite base sans prétention, je suis preneur.
Et sinon encore merci pour cette aide précieuse.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Merci Mickael1461, de rien.
Voir MP !
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Donc ma question concerne le formulaire que j'ai fait et qui n'enregistre pas les nouveaux enregistrements. Ce formulaire apparait quand on clique sur une ligne dans les résultats (n'importe laquelle). Il permettrait de faire de nouveaux enregistrements sans passer par la table. (plus accessible pour les futurs utilisateurs).
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Mettre la base en ZIP sur https://www.cjoint.com/ ce qui me permettra de vous aider!
0
baladur13 Messages postés 50252 Date d'inscription   Statut Modérateur Dernière intervention   13 759
 
Salut
Mickael1461 n'a pas bien saisi le fonctionnement du forum...
Tu trouveras sa réponse ici...
http://www.commentcamarche.net/forum/affich 12152019 base?

je te recopie ici :
Mickael1461, le vendredi 24 avril 2009 à 08:50:01
Voila le lien : https://www.cjoint.com/?ezwB1DQQJd 

Ce n'est pas la dernière version.

En espérant que tu arriveras a le remettre sur les rails
Bonne journée.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour baladur13,
Merci pour l'information, c'est très gentil de votre part.
J'espère qu'il va corriger le tir ...
Bonne fin de semaine.
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Qu'est ce que je dois corriger ("J'espère qu'il va corriger le tir ... ") expliquez moi ce qui ne va pas.
0
baladur13 Messages postés 50252 Date d'inscription   Statut Modérateur Dernière intervention   13 759
 
Tu as mis ta réponse à ce topic dans un nouveau message ici
==> http://www.commentcamarche.net/forum/affich 12152019 base
comment voulais tu que Le pingou voit ta réponse ????
Du coup j'ai recopier ta reponse au bon endroit...
Corriger le tir cela veut simplement dire qu'à l'avenir tu ne te tromperas plus...
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour Mickael,
Votre formulaire [Formulairedesaisie] doit avoir comme source la table [Table1] et la source de contrôle de chaque champ doit correspondre à ceux de la table.
Dans la procédure [Private Sub IstResults_DblClick] vous ne pouvez pas prendre le champ [REFERENCE] pour appliquer votre critère car il ne figure par dans la zone de liste [IstResults]
Corriger votre procédure comme suit :
Private Sub IstResults_DblClick(Cancel As Integer)
Critere = "TITRE" & "='" & Me.IstResults & "'"
DoCmd.OpenForm "Formulairedesaisie", acNormal, , Critere
End Sub

Au passage, merci baladur13.

Bon dimanche.
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour ou plutôt bonsoir à l'heure qu'il est,

Dans la procédure que vous m'avez conseillé, "Critere" je dois le laisser comme tel je ne dois pas le modifier?

Je suis désolé de vous déranger sans cesse mais votre aide m'est essentielle.

Merci encore.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonsoir Mickael1461,
Votre procédure :

Private Sub IstResults_DblClick(Cancel As Integer)
DoCmd.OpenForm "Formulairedesaisie", acNormal, , "[REFERENCE] = " & lstResults
End Sub

doit être remplacée par celle-ci:

Private Sub IstResults_DblClick(Cancel As Integer)
Critere = "TITRE" & "='" & Me.IstResults & "'"
DoCmd.OpenForm "Formulairedesaisie", acNormal, , Critere
End Sub

Explication: la variable Critere est utilisée comme argument Where de l'objet OpenForm. Donc on lui attribut sa valeur avant ( Critere = "TITRE" & "='" & Me.IstResults & "'" ).
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Oui c'est bien ce que je fais mais ca ne produit pas de changement.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Est-ce que cela est fait ?
Votre formulaire [Formulairedesaisie] doit avoir comme source la table [Table1] et la source de contrôle de chaque champ doit correspondre à ceux de la table.

La procédure, l'avez vous copier/coller ou retapée vous même ?
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Oui je l'ai recopiée mais je n'ai pas changer la source dans formulaire de saisie. Donc l'erreur doit provenir de cela.
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention   > Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Non ca fonctionne pas je crois que je vais laisser tomber le formulaire de saisie. Advienne que pourra.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Ne désespérez pas, votre dernière version sur https://www.cjoint.com/ (en zip) et je vous fais la correction !
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonsoir Mickael1461,
J'ai récupéré un ficher et le voici avec mes corrections : https://www.cjoint.com/?fbmMtm4ADX
Est-ce que cela vous convient?
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Non je comprend pas les nouveaux enregistrements ne s'enregistre pas. Je dois m'y prendre mal. Expliquez moi comment il faut s'en servir.
Moi je vais sur le dernier enregistrement du formulaire, je double clique sur celui ci et je tape donc mon nouvel enregistrement et comme par magie ca ne marche pas... voilà.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour Mickael1461,
Voir le document : https://www.cjoint.com/?fdnp0jqOUV
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Jean-pierre,

Dernière question et après je ne vous embête plus. Mon responsable de stage va donc être l'un des utilisateurs de cette base afin de rajouter des docs au fur et à mesure. Cependant il n'a pas access, alors est t il possible de créer avec la base une page web ou il pourra y avoir accès et ou il pourra rajouter des docs. (ou autre solutions...)

Merci.
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Eh bien la réponse me semble très simple, s'il n'a pas le logiciel "Access" il ne peut pas accèder à votre base.
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
OK merci pour cette réponse simple mais efficace.
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention   > Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Oui en fait euh... désolé j'aurais encore une question.
Il faudrait que je crée une case a cocher pour faire apparaître les différents type de document.

Par exemple quand je clique sur la case article de presse seulement les articles apparaissent.

Voilà promis c'est ma dernière question
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Sans informations plus précises, par exemple comme la case à cocher [TITRE] avec une [Procédure événementielle] sur clic et dans la procédure cette ligne de code :
DoCmd.OpenForm "Nom du formulaire", , , "Nom du champ = 'Critère article de presse'"
Bonne semaine
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
En fait il s'agit d'une case a cocher et qui fait apparaître les résultats concernant un type de document.

Par exemple : prenons deux types de documents les articles ayant pour référence ART. plus un numéro et une autre s'appelant DOC.INT. plus un numéro.

Donc en cliquant sur la case à cocher ARTICLE je veux que tous les résultat concernant des article et donc ayant comme référence ART apparaissent dans la zone de résultat.

Voila
0
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Si j’ai bien compris, la case à cocher [ARTICLE] est sur le formulaire [Formulaire1] donc :
Sur clic la procédure :
Private Sub cacArticle_Click()
If Not Me.cacArticle Then
    RefreshQuery
End IfEnd Sub

Et dans la procédure [RefreshQuery] juste avant la ligne : SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where") - Len("Where") + 1))
Vous placez le code suivant :
If Not Me.cacArticle Then
     SQL = SQL & "And Table1!REFERENCE like'" & "ART*' "
End If

Je vous signale que cette procédure est similaire à celle que vous avez utilisé pour [REFERENCE], [TITRE] et [MOTS-CLEFS]. Note au passage, il y a une étrange ressemblance avec l’étude de M. Fabrice …
0
Mickael1461 Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
Qui est M. Fabrice
0