IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Recherche d'un enregistrement dans une liste [AC-2000]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien informatique
    Inscrit en
    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 : 2
    Points
    2
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

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

    Argy

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien informatique
    Inscrit en
    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 : 2
    Points
    2
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    La propriété RecordsetClone te permet de faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien informatique
    Inscrit en
    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 : 2
    Points
    2
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien informatique
    Inscrit en
    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 : 2
    Points
    2
    Par défaut
    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.

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    .FindFirst "[code_produit] = '" & Me![ChercherProd] &"'"
    La gestion d'erreur est posée dans mon avant dernier exemple.

    Argy

  9. #9
    Candidat au Club
    Homme Profil pro
    Technicien informatique
    Inscrit en
    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 : 2
    Points
    2
    Par défaut
    Cela fonctionne parfaitement avec ton dernier findfirst.

    Un grand merci à toi argyronet !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/04/2015, 16h46
  2. Réponses: 3
    Dernier message: 03/11/2008, 10h09
  3. Recherche sur 2 elements dans une liste box.
    Par molarisapa dans le forum Access
    Réponses: 2
    Dernier message: 29/05/2006, 18h43
  4. Recherche d'un élément dans une liste triée (vitesse)
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 18/05/2006, 09h23
  5. Enregistrement dans une liste déroulante & Msgbox
    Par tintinmarre dans le forum Access
    Réponses: 6
    Dernier message: 29/09/2005, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo