Méthode Find

Le
Stéphane Lavergne
Bonjour,

Je suis sur Windows XP Pro, Office XP Pro, toutes les mises à jours sont
faites.

Dans un formulaire, j'ai un champs indépendant Recherche.
Sur événement Après mise à jour, je veux chercher n'importe où dans mon
formulaire le texte que je viens de taper dans le champs Recherche.
Private Sub Recherche_AfterUpdate()

DoCmd.FindRecord Me.Recherche, acAnywhere, False, acSearchAll, False,
acAll, True

End sub

Mais j'ai l'erreur :
Erreur d'ecécution '2162':
Une macro définie sur une des propriétés du champ en cours a échoué à cause
d'une erreur dans l'argument de l'action TrouverEnregistrement.
Fin / Débogage

Le fait de débogguer m'amène sur la ligne FindRecord.

Je vérifie mais la syntaxe indiquée dans l'aide est bien comme celle notée.
Je n'arrive pas à comprendre pourquoi ça ne fonctionne pas.

Pouvez-vous m'aider, s'il vous plait.
Merci d'avance.

--
Cordialement,

Stéphane Lavergne
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stéphane Lavergne
Le #5040541
Bonjour Arnaud,
Mais moi ça marche toujours pas :/

"Stéphane Lavergne" news:O%
Bonjour,

Je suis sur Windows XP Pro, Office XP Pro, toutes les mises à jours sont
faites.

Dans un formulaire, j'ai un champs indépendant Recherche.
Sur événement Après mise à jour, je veux chercher n'importe où dans mon
formulaire le texte que je viens de taper dans le champs Recherche.
Private Sub Recherche_AfterUpdate()

DoCmd.FindRecord Me.Recherche, acAnywhere, False, acSearchAll, False,
acAll, True

End sub

Mais j'ai l'erreur :
Erreur d'ecécution '2162':
Une macro définie sur une des propriétés du champ en cours a échoué à
cause

d'une erreur dans l'argument de l'action TrouverEnregistrement.
Fin / Débogage

Le fait de débogguer m'amène sur la ligne FindRecord.

Je vérifie mais la syntaxe indiquée dans l'aide est bien comme celle
notée.

Je n'arrive pas à comprendre pourquoi ça ne fonctionne pas.

Pouvez-vous m'aider, s'il vous plait.
Merci d'avance.

--
Cordialement,

Stéphane Lavergne




Anor
Le #5040521
Salut,
habituellement, j'utilise
docmd.FindRecord "test",acAnywhere,,acSearchAll,,acAll

Essaye donc un truc du genre :

docmd.FindRecord Me.Recherche.Text,acAnywhere,,acSearchAll,,acAll

pour voir ....(note bien le .Text qui retourne la valaur contenue dans ta eone de liste avant
mise à jour)

--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

Stéphane Lavergne wrote:
| Bonjour Arnaud,
| Mais moi ça marche toujours pas :/
|
| "Stéphane Lavergne" | news:O%
|| Bonjour,
||
|| Je suis sur Windows XP Pro, Office XP Pro, toutes les mises à jours
|| sont faites.
||
|| Dans un formulaire, j'ai un champs indépendant Recherche.
|| Sur événement Après mise à jour, je veux chercher n'importe où dans
|| mon formulaire le texte que je viens de taper dans le champs
|| Recherche. Private Sub Recherche_AfterUpdate()
||
|| DoCmd.FindRecord Me.Recherche, acAnywhere, False, acSearchAll,
|| False, acAll, True
||
|| End sub
||
|| Mais j'ai l'erreur :
|| Erreur d'ecécution '2162':
|| Une macro définie sur une des propriétés du champ en cours a échoué
|| à cause d'une erreur dans l'argument de l'action
|| TrouverEnregistrement.
|| Fin / Débogage
||
|| Le fait de débogguer m'amène sur la ligne FindRecord.
||
|| Je vérifie mais la syntaxe indiquée dans l'aide est bien comme celle
|| notée. Je n'arrive pas à comprendre pourquoi ça ne fonctionne pas.
||
|| Pouvez-vous m'aider, s'il vous plait.
|| Merci d'avance.
||
|| --
|| Cordialement,
||
|| Stéphane Lavergne
Anor
Le #5040491
Re.

Anor wrote:
| Salut,
| habituellement, j'utilise
| docmd.FindRecord "test",acAnywhere,,acSearchAll,,acAll
|
| Essaye donc un truc du genre :
|
| docmd.FindRecord Me.Recherche.Text,acAnywhere,,acSearchAll,,acAll
|
| pour voir ....(note bien le .Text qui retourne la valaur contenue
| dans ta eone de liste avant mise à jour)
|


Après réflexion, j'ai l'impression qu'il faut faire précéder systématiquement
la fonction par un docmd.gotocontrol

Donc, soit tu fais une boucle sur les contrôles qui risquent de contrnir la chaîne recherchée,
soit, astuce, tu crées un champ calculé dans ta requête source qui concatène tous les champs
dans lesquels tu veux réaliser ta recherche ChpRecherche : [champA]&[ChampB]
puis tu fais un gotocontrol ce nouveau champ et tu lances le findrecord dans la foulée.

reste à savoir si le gotocontrol va fonctionner dans le cas où ce nouveau controle serait
déclaré invisible .....
pas testé mais si ça peut donner une nouvelle piste de recherche....

--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
Raymond [mvp]
Le #5040451
Re Arnaud.
En principe il faut mettre le focus sur un contrôle texte du formulaire.
Je suis toujours très réservé sur le bon résultat obtenu avec findRecord et
acAll, qui dans le fond de ma mémoire est gravé "bug" depuis la nuit des
temps à cause de la diversité des types de contrôles du formulaire.
J'utilise uniquement le findfirst. celà dit nul n'est prophète .............

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Anor" news:
Re.

Anor wrote:
| Salut,
| habituellement, j'utilise
| docmd.FindRecord "test",acAnywhere,,acSearchAll,,acAll
|
| Essaye donc un truc du genre :
|
| docmd.FindRecord Me.Recherche.Text,acAnywhere,,acSearchAll,,acAll
|
| pour voir ....(note bien le .Text qui retourne la valaur contenue
| dans ta eone de liste avant mise à jour)
|


Après réflexion, j'ai l'impression qu'il faut faire précéder
systématiquement

la fonction par un docmd.gotocontrol

Donc, soit tu fais une boucle sur les contrôles qui risquent de contrnir
la chaîne recherchée,

soit, astuce, tu crées un champ calculé dans ta requête source qui
concatène tous les champs

dans lesquels tu veux réaliser ta recherche ChpRecherche :
[champA]&[ChampB]

puis tu fais un gotocontrol ce nouveau champ et tu lances le findrecord
dans la foulée.


reste à savoir si le gotocontrol va fonctionner dans le cas où ce nouveau
controle serait

déclaré invisible .....
pas testé mais si ça peut donner une nouvelle piste de recherche....

--
à+
Arnaud


Stéphane Lavergne
Le #5040401
Bonjour,

OK, je comprends mieux pourquoi ça ne fonctionnait pas.

Je vais essayer de concaténer, en fait ma recherche doit porter sur 4 champs
textes de mon formulaire.

A moins que, Raymond, avec FindFirst, est-il possible de chercher 1 valeur
n'importe où dans le texte de 4 contrôles?

Merci déjà pour ces éclairssiements, j'ai de quoi chercher 1 peu mieux :)

Stéphane

"Raymond [mvp]" news:
Re Arnaud.
En principe il faut mettre le focus sur un contrôle texte du formulaire.
Je suis toujours très réservé sur le bon résultat obtenu avec findRecord
et

acAll, qui dans le fond de ma mémoire est gravé "bug" depuis la nuit des
temps à cause de la diversité des types de contrôles du formulaire.
J'utilise uniquement le findfirst. celà dit nul n'est prophète
.............


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Anor" de

news:
Re.

Anor wrote:
| Salut,
| habituellement, j'utilise
| docmd.FindRecord "test",acAnywhere,,acSearchAll,,acAll
|
| Essaye donc un truc du genre :
|
| docmd.FindRecord Me.Recherche.Text,acAnywhere,,acSearchAll,,acAll
|
| pour voir ....(note bien le .Text qui retourne la valaur contenue
| dans ta eone de liste avant mise à jour)
|


Après réflexion, j'ai l'impression qu'il faut faire précéder
systématiquement

la fonction par un docmd.gotocontrol

Donc, soit tu fais une boucle sur les contrôles qui risquent de contrnir
la chaîne recherchée,

soit, astuce, tu crées un champ calculé dans ta requête source qui
concatène tous les champs

dans lesquels tu veux réaliser ta recherche ChpRecherche :
[champA]&[ChampB]

puis tu fais un gotocontrol ce nouveau champ et tu lances le findrecord
dans la foulée.


reste à savoir si le gotocontrol va fonctionner dans le cas où ce
nouveau


controle serait
déclaré invisible .....
pas testé mais si ça peut donner une nouvelle piste de recherche....

--
à+
Arnaud






Raymond [mvp]
Le #5040381
Il faudrait que tu déclares tes 4 champs dans un même index ( les mettre
contigus) et utiliser le seek ( si c'est possible car il ne fonctionne pas
sur tables attachées).
sinon le findfirst peut marcher avec un like et des Or dans la clause where
mais je ne garantis pas la performance en vitesse.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst ("[blablabla] like *" & Me.moncontrole & "*" ) Or
("[blablabla] like *" & Me.moncontrole1 & "*" ) Or
.........
If Not rs.EOF Then Me.Bookmark = rs.Bookmark


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Stéphane Lavergne" news:%
Bonjour,

OK, je comprends mieux pourquoi ça ne fonctionnait pas.

Je vais essayer de concaténer, en fait ma recherche doit porter sur 4
champs

textes de mon formulaire.

A moins que, Raymond, avec FindFirst, est-il possible de chercher 1 valeur
n'importe où dans le texte de 4 contrôles?

Merci déjà pour ces éclairssiements, j'ai de quoi chercher 1 peu mieux :)

Stéphane



Stéphane Lavergne
Le #5040371
Hihi, merci Raymond, j'étais dessus... mais je butais bêtement sur le
jocker... je mettais 1 %

Mais... rs est à décalrer en Object ? pas en Recordset ?

Stéphane

"Raymond [mvp]" news:
Il faudrait que tu déclares tes 4 champs dans un même index ( les mettre
contigus) et utiliser le seek ( si c'est possible car il ne fonctionne pas
sur tables attachées).
sinon le findfirst peut marcher avec un like et des Or dans la clause
where

mais je ne garantis pas la performance en vitesse.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst ("[blablabla] like *" & Me.moncontrole & "*" ) Or
("[blablabla] like *" & Me.moncontrole1 & "*" ) Or
.........
If Not rs.EOF Then Me.Bookmark = rs.Bookmark


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Stéphane Lavergne" news:%
Bonjour,

OK, je comprends mieux pourquoi ça ne fonctionnait pas.

Je vais essayer de concaténer, en fait ma recherche doit porter sur 4
champs

textes de mon formulaire.

A moins que, Raymond, avec FindFirst, est-il possible de chercher 1
valeur


n'importe où dans le texte de 4 contrôles?

Merci déjà pour ces éclairssiements, j'ai de quoi chercher 1 peu mieux
:)



Stéphane







Raymond [mvp]
Le #5040351
c'est la forme standard utilisée dans les listes modifiables. pourquoi
changer une équipe qui gagne ?

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Stéphane Lavergne" news:
Hihi, merci Raymond, j'étais dessus... mais je butais bêtement sur le
jocker... je mettais 1 %

Mais... rs est à décalrer en Object ? pas en Recordset ?

Stéphane


Stéphane Lavergne
Le #5040341
Ca marche !
Mais, j'ai 1 autre problème.

Donc sur ce formulaire, j'ai comme déjà cité ce contrôle indépendant
Recherche, mais aussi 1 bouton Recherche_Suivant.

Mais le problème se situe maintenant sur le contrôle Recherche_suivant qui
ne recherche pas le suivant, mais le 1er déjà trouvé et affiché.
Même si je reclique sur le bouton plusieurs fois de suite.

NB : j'ai bien au moins 2 enregistrements qui répondent au critère que je
teste.

Private Sub Recherche_AfterUpdate()

' Rechercher l'enregistrement correspondant au contrôle.
Dim rs As Recordset

Set rs = Me.Recordset.Clone
rs.FindFirst "[Matière] Like ""*" & Me.Recherche & _
"*"" OR [Code A] Like ""*" & Me.Recherche & _
"*"" OR [Code B] Like ""*" & Me.Recherche & _
"*"" OR [Synonymes] Like ""*" & Me.Recherche & "*"""
Me.Bookmark = rs.Bookmark

Me.Recherche_Suivant.Visible = True

End Sub

Private Sub Recherche_Suivant_Click()

' Rechercher l'enregistrement suivant correspondant au contrôle
Recherche.
Dim rs As Recordset

Set rs = Me.Recordset.Clone
rs.FindNext "[Matière] Like ""*" & Me.Recherche & _
"*"" OR [Code A] Like ""*" & Me.Recherche & _
"*"" OR [Code B] Like ""*" & Me.Recherche & _
"*"" OR [Synonymes] Like ""*" & Me.Recherche & "*"""
Me.Bookmark = rs.Bookmark

End Sub


"Raymond [mvp]" news:
Il faudrait que tu déclares tes 4 champs dans un même index ( les mettre
contigus) et utiliser le seek ( si c'est possible car il ne fonctionne pas
sur tables attachées).
sinon le findfirst peut marcher avec un like et des Or dans la clause
where

mais je ne garantis pas la performance en vitesse.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst ("[blablabla] like *" & Me.moncontrole & "*" ) Or
("[blablabla] like *" & Me.moncontrole1 & "*" ) Or
.........
If Not rs.EOF Then Me.Bookmark = rs.Bookmark


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Stéphane Lavergne" news:%
Bonjour,

OK, je comprends mieux pourquoi ça ne fonctionnait pas.

Je vais essayer de concaténer, en fait ma recherche doit porter sur 4
champs

textes de mon formulaire.

A moins que, Raymond, avec FindFirst, est-il possible de chercher 1
valeur


n'importe où dans le texte de 4 contrôles?

Merci déjà pour ces éclairssiements, j'ai de quoi chercher 1 peu mieux
:)



Stéphane







Raymond [mvp]
Le #5040331
Les méthodes FindFirst, FindLast, FindNext, FindPrevious sont-elles faites
pour les chiens ???????
ça va faire je crois.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Stéphane Lavergne" news:
Ca marche !
Mais, j'ai 1 autre problème.

Donc sur ce formulaire, j'ai comme déjà cité ce contrôle indépendant
Recherche, mais aussi 1 bouton Recherche_Suivant.

Mais le problème se situe maintenant sur le contrôle Recherche_suivant qui
ne recherche pas le suivant, mais le 1er déjà trouvé et affiché.
Même si je reclique sur le bouton plusieurs fois de suite.



Publicité
Poster une réponse
Anonyme