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 11/11/2011, 14h27   #1
Invité de passage
 
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 1
Points : 1
Par défaut Problème signet méthode Seek

Bonjour à tous et à toutes,

J'utilise Access et fais un peu de VBA pour améliorer l'utilisation de mes bases.

J'ai le problème suivant:
J'ai une table avec 4 champs. Le premier champ, de type texte, est la clé primaire.
Je créé un formulaire standard (formulaire unique) pour cette table et j'ajoute un contrôle de type liste déroulante avec une requête sur le champ de la clé primaire.
Le but étant de faire une recherche avec ce contrôle.

J'applique donc le code ci-dessous après la mise à jour du contrôle :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub recherche_AfterUpdate()
 
Dim db As Database
Dim RecSet As Recordset
 
Set bd = CurrentDb
Set RecSet = bd.OpenRecordset("MaTable")
 
    'Recherche, dans le jeu d'enregistrements, l'enregistrement correspondant
 
RecSet.Index = "PrimaryKey"
RecSet.Seek "=", Me![recherche]
 
   'positionne l'enregistrement du formulaire sur l'enregistrement trouvé
Me.Bookmark = RecSet.Bookmark
 
RecSet.Close
Set RecSet = Nothing
 
End Sub
Lorsque j'exécute la recherche dans mon formulaire, j'ai le message suivant 'Erreur d'exécution "3159" : Signet non valide'.

Les enregistrements du champ sont de type texte de 20 caractères maxi.

Est-ce que le champ de type texte pose problème au niveau du bookmark ?

Si je reconstruis ma table avec avec un nouveau champ possédant une clé primaire de type NuméroAuto, ça fonctionne !

J'aimerai conserver le premier champ de type texte pour ma recherche et ne pas passer par un champ NuméroAuto.

Quelqu'un a t'il une explication ?

Merci à tous.

Manu
Manu12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 14h40   #2
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 222
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 222
Points : 9 936
Points : 9 936
Envoyer un message via Skype™ à Domi2
Bonjour,

Non, pas de soucis pour faire une recherche sur du texte, mais j'utiliserais plutôt le RecordsetClone et FindFirst (devrait être beaucoup plus performant sur une grosse table).

Essaye ceci :

Code :
1
2
3
4
5
6
7
8
'Recherche et affichage de l'enregistrement sélectionné dans la liste
With Me.RecordsetClone
 
    .FindFirst "[PrimaryKey] = '" & Me.Recherche] & "'"
 
    If .NoMatch = False Then Me.Bookmark = .Bookmark
 
End With
Domi2
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 16h45   #3
Invité de passage
 
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 1
Points : 1
Salut Domi2,

Merci pour ta réponse.
ça fonctionne (j'ai ôté le crochet après 'recherche' dans ton code).

je pensais que la méthode seek était plus rapide mais du moment que ça fonctionne ...

Merci encore !

Bye

Manu
Manu12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 20h29   #4
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 222
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 222
Points : 9 936
Points : 9 936
Envoyer un message via Skype™ à Domi2
Bonsoir,

Citation:
Envoyé par Manu12 Voir le message
je pensais que la méthode seek était plus rapide mais du moment que ça fonctionne ...
J'avais effectué quelques tests, pas avec Seek il est vrai.

Et désolé pour le "]"

Domi2
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 07h58   #5
Invité de passage
 
Inscription : novembre 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 3
Points : 1
Points : 1
Bonjour,

Au départ, j'avais essayé la méthode Find également mais j'avais omis les guillemets pour la valeur 'recherche'. j'avais donc un problème d'argument. Ton exemple m'a donc débloqué.

Ensuite, j'ai testé la méthode Seek car je me suis inspiré de mon livre 'VBA pour Access pour les nuls' (bah oui).
ce livre est basé principalement sur la méthode ADO et non DAO.

Une petite question pour ma connaissance perso : plutôt DAO ou ADO ?

Merci

Manu
Manu12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h46.


 
 
 
 
Partenaires

Hébergement Web