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 06/07/2011, 13h09   #1
Invité de passage
 
Homme
Technicien informatique
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien informatique
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 1
Points : 1
Par défaut Recherche d'un enregistrement dans une liste

Bonjour,

Je chercher à modifier le formulaire suivant :



J'ai besoin de rajouter un champ de recherche (déjà présent) en bas au milieu.
Ce champ de recherche doit servir à mettre le focus sur la ligne correspondant au code produit entré en recherche.

J'ai écrit le code suivant pour l'action du bouton de recherche.

Code :
1
2
3
4
5
6
7
8
9
10
11
Private Sub Btn_Chercher_Click()
 
If IsNull(ChercherProd) Then
    MsgBox "Veuillez rentrer le code du produit à rechercher.", vbInformation
Else
 
' ???
 
End If
Form.Refresh
End Sub
Merci de m'aider pour le code de la recherche en elle-même.

Merci par avance.
pyroteknix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h58   #2
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
Bonjour,

Ta liste est-elle un sous-formulaire ?
En toute apparence, oui...

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 16h40   #3
Invité de passage
 
Homme
Technicien informatique
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien informatique
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 1
Points : 1
La liste des produits est extraite d'une table.

C'est une base Access 2.0 que j'ai transférée en Access 2000. Tout marche à présent, j'en suis à l'ajout des fonctionnalités demandées par les utilisateurs.

Merci de votre aide, je débute avec Access et VBA.

Cordialement.

Edit: Voici le formulaire en mode création.



Edit 2 : J'ai réussi à insérer une fonction de tri par colonne en cliquant sur le titre de chacune d'elle (Famille, N° Produit, Nom Produit, etc) grâce à une fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub CodeFamille_Click()
 
Form.OrderByOn = True
 
    If gBol0 = False Then
        Form.OrderBy = "[code_fam_prod] asc"
        gBol0 = True
    Else
        Form.OrderBy = "[code_fam_prod] desc"
     gBol0 = False
    End If
Form.Refresh
End Sub
J'aimerai donc une fonction similaire pour effectuer une recherche par numéro de produit pour pointer directement sur celui-ci.

Merci par avance pour votre aide.
pyroteknix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 11h05   #4
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
Bonjour,

La propriété RecordsetClone te permet de faire cela :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub cmdQuoi_Click()
Dim RS                                                 As DAO.Recordset
Dim strProduit                                         As String
    strProduit = Nz(Me!txtQuoi, 0)
    If CInt(strProduit) Then
        Set RS = Me.RecordsetClone
        With RS
            .FindFirst "[N° commande] = " & Me![N° commande] & " And [Réf produit] = " & strProduit
            If .NoMatch Then
                MsgBox "Pas de produit correspondant !", vbInformation
            Else
                Me.Bookmark = RS.Bookmark
            End If
            .Close
        End With
    End If
    Set RS = Nothing
End Sub
Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 16h04   #5
Invité de passage
 
Homme
Technicien informatique
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien informatique
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 1
Points : 1
Merci pour ta réponse.

J'ai essayé mais cela ne fonctionne pas, j'essaie ceci (en m'inspirant de ton code et de celui d'autres fonctions) :

Je précise que "ChercherProd" est la valeur numérique du produit que je veux chercher (entré via une zone de texte sur le formulaire) et "code_produit" est le nom de la colonne dans la table dans laquelle je veux rechercher.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub Btn_Chercher_Click()
 
Dim MaTable As DAO.Recordset
 
If IsNull(ChercherProd) Then
    MsgBox "Veuillez rentrer le code du produit à rechercher.", vbInformation,
Else
 
    Set MaTable = Form.RecordsetClone
    MaTable.FindFirst "[code_produit] = " [ChercherProd]
    If MaTable.NoMatch Then
        MsgBox ("Produit non trouvé")
    Else
        Screen.ActiveForm.Bookmark = MaTable.Bookmark
    End If
 
MaTable.Close
 
End If
 
Form.Refresh
End Sub
Merci de m'éclaire où j'ai faux.

Merci pour votre aide.
pyroteknix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 16h27   #6
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
Oui, j'ai bien compris, c'est une demande, disons, commune...

Pourquoi Screen.ActiveForm.Bookmark au lieu de Me puisque c'est le même formulaire ?

ChercherProd est bien le nom du contrôle zone de texte ?

Pose une gestion d'erreur en amont dans ta procédure et un option explicit en en-tête de module... Il y a des erreur de syntaxe dans ton code. Cela doit être de base :
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
Private Sub Btn_Chercher_Click()
Dim MaTable                                            As DAO.Recordset
 
    On Error GoTo L_ErrBtn_Chercher_Click
    If IsNull(ChercherProd) Then
        MsgBox "Veuillez rentrer le code du produit à rechercher.", vbInformation
    Else
        Set MaTable = Me.RecordsetClone
        With MaTable
            .FindFirst "[code_produit] = " & Me![ChercherProd]
            If .NoMatch Then
                MsgBox ("Produit non trouvé")
            Else
                Me.Bookmark = .Bookmark
            End If
            .Close
        End With
    End If
    Me.Refresh
    On Error GoTo 0
L_ExBtn_Chercher_Click:
    Set MaTable = Nothing
    Exit Sub
 
L_ErrBtn_Chercher_Click:
    MsgBox Err.Description, 48, Err.Source
    Resume L_ExBtn_Chercher_Click
End Sub
Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 16h43   #7
Invité de passage
 
Homme
Technicien informatique
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien informatique
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 1
Points : 1
Oui "ChercherProd" est bien le nom de la zone de texte et "code_produit" est un nombre à 6 chiffres comme par exemple 029397.

J'ai essayé ton code, je n'ai plus d'erreur qui ouvre le debogage mais une erreur point d'exclamation avec comme titre "DAO.Recordset" et comme message "Type de données incompatible dans l'expression du critère"...

Désolé mais je n'ai pas compris "Pose une gestion d'erreur en amont dans ta procédure et un option explicit en en-tête de module"

Merci pour ton aide.
pyroteknix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 17h18   #8
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
Code :
1
2
3
4
5
6
7
8
 
'En-tête de page de module
 
Option Explicit
 
Sub UneProcédure()
 
End Sub
Si ta valeur est 029397, ce n'est pas un nombre mais un texte donc il faut poser des '' soit :
Code :
.FindFirst "[code_produit] = '" & Me![ChercherProd] &"'"
La gestion d'erreur est posée dans mon avant dernier exemple.

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 16h10   #9
Invité de passage
 
Homme
Technicien informatique
Inscription : juillet 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien informatique
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juillet 2011
Messages : 5
Points : 1
Points : 1
Cela fonctionne parfaitement avec ton dernier findfirst.

Un grand merci à toi argyronet !
pyroteknix 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 03h28.


 
 
 
 
Partenaires

Hébergement Web