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

IHM Discussion :

module de recherche dans un sous formulaire


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut module de recherche dans un sous formulaire
    Bonjour,

    Je voudrais créer un petit module de recherche simple dans un sous formulaire.

    J'ai un formulaire "commande", dans ce dernier j'ai un sous formulaire "Lot".

    Dans une commande, j'ai plusieurs lots défois une centaine.

    Je me déplace à l'aide des boutons de déplacement, mais imaginez cliquer 80 fois pour arriver sur le bon lot.

    J'aimerais créer une zone de texte intitulé recherche de lot, et en tapant le nom du lot dedans que sa page correspondante s'ouvre.

    Comment puis je procéder ?

    Merci de vos réponses.

  2. #2
    seb92400
    Invité(e)
    Par défaut
    Comment puis je procéder ?
    En regardant les TUTOS --> Formulaires de Recherche


  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut
    C'est trop complexe pour ce simple module de recherche que je veux.

    Je veux simplement une zone de texte qui recherche mon lot.

    Pas de multicritére, ni de recherche avancée.

  4. #4
    seb92400
    Invité(e)
    Par défaut
    Hi,

    Dans ce cas, uin "simple" recordset devrait suffir...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Dim varNomDuLot as String
        varNomDuLot = Me.txtZoneDeRecherche
        Dim rst As DAO.Recordset
        Set rst = Forms("NomDuFormLots").RecordsetClone
        rst.FindFirst "[txtNomDuLot] = " & varNomDuLot
        If Not rst.EOF Then Forms("NomDUFormLot").Bookmark = rst.Bookmark
        rst.Close
        Set rst = Nothing
    Voilà... Je ne pense pas avoir fait trop de fautes... Place ce code dans l'évènement afterUpdate de ta zone de rechrche, par exemple, en remplaçant les noms que j'ai mis par les tiens.

    Ensuite, tu peux même améliorer un peu en ajoutant un Else et une MsgBox pour indiquer que la référence tapée n'existe pas...

    Mais il me semble aussi, de mémoire, qu'en utilisant l'assistant d'access, tu as directement la possibilité de générer ce genre de code automatiquement...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut
    J'ai du mal à le faire passer

    Mon form est un sous formulaire il s'appelle "Lot Requête"

    mon Champ de recherche s'appelle "RechLot"


    j'ai donc fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub RechLot_AfterUpdate()
        Dim varNomDuLot As String
        varNomDuLot = Me.RechLot
        Dim rst As DAO.Recordset
        Set rst = ("Lot Requête").RecordsetClone
        rst.FindFirst "[txtNomDuLot] = " & varNomDuLot
        If Not rst.EOF Then Forms("Lot Requête").Bookmark = rst.Bookmark
        rst.Close
        Set rst Set rst = Nothing
    End Sub
    Mon messsage d'eereur est :

    2465
    impossible de trouver le champ 'l' auquel il fait reference dans votre expression

  6. #6
    seb92400
    Invité(e)
    Par défaut
    Hello,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rst.FindFirst "[txtNomDuLot] = " & varNomDuLot
    txtNomDuLot doit être le nom du champ dans lequel tu recherches ton info.

    Exemple : RechLot est le nom dans lequel tu tapes la valeur à rechercher. Si la valeur que tu recherches est dans le champ nomLot, à la place de txtNomDuLot tu tapes nomLot...

    Ce n'est peut-être pas très clair pour toi, mais utilise l'aide d'access avec les recordset, tu as de très bons exemples commentés et détaillés.


  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut
    J'ai modifié avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Texte87_AfterUpdate()
        Dim varNomDuLot As String
        varNomDuLot = Me.Texte87
        Dim rst As DAO.Recordset
            Set rst = ("Lot Requête").RecordsetClone
        rst.FindFirst "[N°Lot] = " & varNomDuLot
        If Not rst.EOF Then Forms("Lot Requête").Bookmark = rst.Bookmark
        rst.Close
        Set rst = Nothing
    End Sub
    Dans le débogage il me souligne cette ligne en erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Set rst = ("Lot Requête").RecordsetClone

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut
    J'ai une erreur de synthaxe sur le point entre la parenthèse et le RecordsetClone

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = ("Lot Requête").RecordsetClone

  9. #9
    seb92400
    Invité(e)
    Par défaut
    Hello,

    Un doute en lisant ton message... Tu ne devrais pas mettre des [...] ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = ("[Lot Requête]").RecordsetClone
    Je n'ai pas testé...

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut
    J'ai donc fais ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub RechLot_AfterUpdate()
        Dim varNomDuLot As String
        varNomDuLot = Me.RechLot
        Dim rst As DAO.Recordset
            Set rst = ("Lot Requête").RecordsetClone
        rst.FindFirst "[N°Lot] = " & varNomDuLot
        If Not rst.EOF Then Forms("Lot Requête").Bookmark = rst.Bookmark
        rst.Close
        Set rst = Nothing
    End Sub
    Il me met erreur de compilation

    erreur de syntaxe

  11. #11
    seb92400
    Invité(e)
    Par défaut
    Et avec les cochets ??? [ et ] ???

    As-tu utilisé l'assistant pour créer ton module de recherche ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut
    Où je trouve l'assistant ????

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut
    Toujours la même erreur je pige pas.

    Le recordset devrait suffir mais pourquoi cette erreur ???

  14. #14
    seb92400
    Invité(e)
    Par défaut
    Hello...

    Bon... Reprenons...

    Lorsque tu es dans ton formulaire en mode création, tu sélectionnes l'outil zone de liste déroulante, et tu fais bien attention que ton assistant soit également sélectionné...

    Tu déposes ta zone de liste déroulante sur ton formulaire, l'assistant s'ouvre, et là, tu sélectionnes le troisième choix "Rechercher un enregistrement blablabla..." puis 'Suivant'...

    Tu séléctionnes les champs que tu veux puis 'Suivant'...

    Encore 'Suivant'...

    Eventuellement tu changes le nom, mais peu importe, cette liste sera effacée, c'est juste le code généré qui nous intéresse... puis 'Terminer'...

    Ensuite, tu vas jeter un oeil dans le code, et hop, miracle de la science , le code a été généré... Tu n'as plus qu'à copier ce code et le placer où tu le souhaites !!! (c'est un code un peu simplifié par rapport à celui que je t'ai donné, mais tu apprendras plus tard qu'il faut toujours fermer un recordset)...

    Regarde bien et analyse au passage la syntaxe du code... elle est différente selon le type de données que tu recherches, texte ou nombre...

    Voilà, là, normalement, ça de devrait marcher !!!


  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut
    Ok ça marche.

    Merci beaucoup

    Un autre petit pb c'est que si je tape le N° de lot et que je suis déjà dessus il me fais passer au lot suivant, j'aimerais qu'il me mette vous etes déjà sur le lot et qu'il ne fasse rien.

    Pareil si le lot n'existe pas il me fais passer au lot suivant je voudrais qu'il me mette Ce lot n'existe pas

    j'ai fais ça

    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 Texte91_AfterUpdate()
    If Me.Texte91 = Me.N°Lot Then
     
    MsgBox "tu es deja sur le lot"
    End If
        Dim rs As Object
     
        Set rs = Me.Recordset.Clone
        rs.FindFirst "[N°Lot] = '" & Me![Texte91] & "'"
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark
        If rs.NoMatch Then MsgBox "Ce lot n'existe pas"
     
    End Sub
    I maffiche les bons messages pour les 2 cas mais passe quand même sur le lot suivant

  16. #16
    seb92400
    Invité(e)
    Par défaut
    Hello,

    Remplace ton End If Par Else :

    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 Texte91_AfterUpdate()
     
        If Me.Texte91 = Me.N°Lot Then
            MsgBox "tu es deja sur le lot"
        Else
            Dim rs As Object
            Set rs = Me.Recordset.Clone
            rs.FindFirst "[N°Lot] = '" & Me![Texte91] & "'"
            If Not rs.EOF Then Me.Bookmark = rs.Bookmark
            If rs.NoMatch Then MsgBox "Ce lot n'existe pas"
        End If
     
    End Sub
    Et n'oublie pas de mettre une gestion d'erreur dans ton code... C'est sensible ces petites bêtes de recordset !!!


  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut
    Toujours pareil


    Si je suis sur le lot 1

    et que je tape "1" la message box s'affiche et me met bien Tu es deja sur le lot

    Quand j'appuie sur ok, je passe sur le lot suivant.

    J'aimerais qu'il reste sur le lot affiché avant la recherche.

    Exactement pareil si le lot n'existe pas.

    La message box s'affiche bien (le lot n'existe pas) mais dés que je clique sur OK, il me fais passer au lot suivant.

  18. #18
    seb92400
    Invité(e)
    Par défaut
    Si tu as tapé exaxctement les modifs que je t'ai données, il n'y a aucune raison pour que l'enregistrement change lorsqu'il t'affiche le message situé avant le else...

    D'autre part, pourquoi as-tu utilisé un champ texte pour un numéro ? Si tu tries par ordre alphabétique, n'oublie pas que tu vas obtenir : 1 10 11 12 2 3 4 40 42 5 etc...

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Points : 81
    Points
    81
    Par défaut
    Car défois mon lot à une lette ex : T128

    J'ai fait exactement ce que tu m'as dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub RechLot_AfterUpdate()
        If Me.RechLot = Me.N°Lot Then
            MsgBox "Vous êtes déjà sur le lot"
        Else
            Dim rs As Object
            Set rs = Me.Recordset.Clone
            rs.FindFirst "[N°Lot] = '" & Me.RechLot & "'"
            If Not rs.EOF Then Me.Bookmark = rs.Bookmark
            If rs.NoMatch Then MsgBox "Ce lot n'existe pas"
        End If
    End Sub
    et dés que je clique OK sur la message box il se déplace sur l'enregistrement suivant.

  20. #20
    seb92400
    Invité(e)
    Par défaut
    Hello,

    Le code, c'est le code !!! Et la logique... aussi !!! Voyons cas par cas...

    A partir du moment ou tu as le message "Vous êtes déjà sur le lot" qui s'affiche, tout ce qui est après le else ne s'effectuera jamais !!!

    Donc : S'il se produit un changement d'enregistrement après ok sur CE message, c'est que ce changement s'opère ailleurs que dans cette partie de code...

    Pour en avoir le coeur net, fait un essai en remplaçant ce code par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub RechLot_AfterUpdate()
        If Me.RechLot = Me.N°Lot Then
            MsgBox "Vous êtes déjà sur le lot"
        End If
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/04/2014, 15h46
  2. [AC-2007] Appel de module de classe dans un sous-formulaire
    Par fred-vba dans le forum VBA Access
    Réponses: 1
    Dernier message: 06/09/2013, 00h18
  3. Exécuter le code VBA d'un module dans un sous formulaire
    Par keketteboy dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/06/2008, 11h41
  4. Réponses: 2
    Dernier message: 07/08/2007, 16h59
  5. [Formulaire-VBA]Recherche dans un sous formulaire
    Par Tonio571 dans le forum IHM
    Réponses: 3
    Dernier message: 02/04/2007, 15h31

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