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 multicriteres sur 2 tables


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut recherche multicriteres sur 2 tables chaine de caracteres
    Salut,

    j ai utilise le code donné dans le tutoriel access en ce qui concerne la réalisation d'une recherche multi-critères en utilisant une procédure, soit dans un module:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Public Sub Restriction(ByVal Chaine As String, _
             ByVal ChamP As String, ByVal matable As String, _
             ByRef ArGument As Integer, ByRef ClausE As String, ByRef astype As Integer)
     
    ' Choix du type : 0 pour un string, 1 pour un numérique ou booleen
    ' 2 pour une date
     
    'Construit la requête au premier passage
    If ArGument = 0 Then
      'Elimine les espaces
       matable = Trim$(matable)
      'Si table est une sous requete :(commence par select)
      If InStr(1, matable, "SELECT ", vbTextCompare) <> 0 Then
        'Enleve le ; s'il existe
        If Right(matable, 1) = ";" Then _
           matable = Left(matable, Len(matable) - 1)
        'encadre la sous requete avec des ()
        ClausE = "SELECT * FROM (" & matable & ")"
      Else
        ClausE = "SELECT * FROM " & matable
      End If
    End If
    If Chaine <> "" Then
        If ArGument = 0 Then
         ' Ajoute le WHERE
        ClausE = ClausE & " WHERE "
        ' Ajout de l'opérateur "AND" si le where existe déja
        Else: ClausE = ClausE & " AND "
        End If
        Select Case astype
          Case 0  'Ajoute le critère si le type est texte
            ClausE = ClausE & ChamP & " like " & Chr(34) & Chaine & "*" & Chr(34)
          Case 1  'Ajoute le critère si le type est Numerique
            ClausE = ClausE & ChamP & "=" & Chaine
          Case 2  'Ajoute le critère si le type est date
            ClausE = ClausE & ChamP & "=#" & Format(Chaine, "mm/dd/yyyy") & "#"
        End Select
        ArGument = ArGument + 1
    End If
    End Sub
    et sur le bouton de recherche:
    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
    Private Sub BRechercher_Click()
    Dim SQL As String
    Dim NomTable As String
    Dim Compteur As Integer
    NomTable = "Tbl_Materiel"
    'Appel de la procedure de creation de requête
    'pour le numero de série de type texte
    Restriction Nz(Tserie, ""), "NumSerie", NomTable, Compteur, SQL, 0
    'pour la date achat de type date (2)
    Restriction Nz(TDate, ""), "DateAchat", NomTable, Compteur, SQL, 2
    'Pour la marque de type texte
    Restriction Nz(TMarque, ""), "Marque", NomTable, Compteur, SQL, 0
    'Affecte la requête au sous formulaire
    Me.Tbl_Materiel.Form.RecordSource = SQL
    End Sub
    cette recherche ne se fait que dans la table Tbl_Materiel. Si je desire la faire dans Tbl_Materiel et dans une autre table et que le resultat affiche les champs des 2 tables sur lesquels j ai fait la recherche, dois rajouter une 2e table dans le code ci dessus?

    La ligne Me.Tbl_Materiel.Form.RecordSource = SQL peut elle etre adapté pour 2 tables?

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Base la recherche sur une requête joignant les deux tables

  3. #3
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    merci

    J avais deja cree une requete qui joint les 2 tables. Je ne sais pas comment l integrer dans le code pour la liée au resultat de la recherche.

  4. #4
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    ah oui petite precision j avais associé la requete joignant les 2 tables dans les propriété du resultat de la recherche (qui est une liste).

  5. #5
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    Salut,

    si qqun a une idee qui pourrait me mettre sur la voie, ce serait vraiment cool car la je seche vraiment.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    salut,

    je ne comprend pas bien ton dernier message. Il faut juste que tu mettes le nom de ta requête à la place du nom de ta table dans ton code.
    Si tu as des problèmes, tu peux regarder sur un post où j'avais des difficultés sur ce même code. J'ai finalement utilisé strWhere et le résultat est nickel, tu faire des recherches assez performantes avec. Si ça t'intéresse :

    http://www.developpez.net/forums/sho...d.php?t=173304

    voila bonne chance
    a+

  7. #7
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    Effectivement c tres logique.

    Merci beaucoup pour ton aide.

    A plus.

  8. #8
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    resalut

    En fait, j ai encore un probleme que je n arrive pas a resoudre depuis hier:

    Dans mon code j ai bien mis le nom de ma requete associée aux 2 tables a la place du nom de table.

    Tout fonctionne bien quand je choisis mes criters dans une liste deroulante, mais la recherche ne marche pas des que je rentre du texte a la main ds un champs texte.

    De meme quand un enregistrement contient un element dans une de ses zone de texte, et que l on cherche cette elt d apres un autre critere (issu d une liste deroulante), le resultat de la recherche ne renvoie rien.

    En d autre terme, une zone de txt remplie dans un enregistrment empeche la recherche de trouver cet enregistrement, ou du moins de l afficher.

    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
    29
    30
    31
    32
    33
    Dim sql As String
    Dim AbfrageName As String
    Dim Compteur As Integer
    AbfrageName = "Suchen"
    'Appel de la procedure de creation de requête
    'pour le numero de série de type texte
    Restriction Nz(Kombinationsfeld33, ""), "ScheibenTyp", AbfrageName, Compteur, sql, 0
    'pour la date achat de type date (2)
    Restriction Nz(Kombinationsfeld0, ""), "ScheibenHersteller", AbfrageName, Compteur, sql, 0
    'Pour la marque de type texte
    Restriction Nz(TFahrerhausfarbe, ""), "FahrerhausFarbe", AbfrageName, Compteur, sql, 0
     
    Restriction Nz(TFahrzeugnummer, ""), "FahrzeugNummer", AbfrageName, Compteur, sql, 0
     
    Restriction Nz(Kombinationsfeld10, ""), "Klebstoffsystem", AbfrageName, Compteur, sql, 0
     
    Restriction Nz(TAuftragsdatum, ""), "Auftragsdatum", AbfrageName, Compteur, sql, 0
     
    Restriction Nz(Tpeeloftestdatum, ""), "Datum PeelOfTest", AbfrageName, Compteur, sql, 0
     
    Restriction Nz(Kombinationsfeld16, ""), "Fehlerart", AbfrageName, Compteur, sql, 0
     
    Restriction Nz(Kombinationsfeld18, ""), "Zone", AbfrageName, Compteur, sql, 0
     
     
     
     
     
    'Affecte la requête au sous formulaire
    'Me.Ergebnis.RecordSource = SQL
     
    Me.Ergebnis.RowSource = sql  ' affecte SQL a lst_Resultat
    Me.Ergebnis.Requery             ' recalcule la liste



    TFahrzeugnummer est une zone de texte
    Kombinationsfeld10 est une zone liste deroulante
    Suchen est le nom de ma requete(abfrage signifie requete en allemand)

    Dites moi si ce n est pas tres clair

  9. #9
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    salut,

    Bon le pb s est reglé tt seul quand je suis revenu a la version precedente,

    Je crois vraiment que Access a ses raisons que ma raison ignore.

    En tous cas j ai un dernier probleme qd meme.

    Dans mon form de recherche, j ai plusieur liste pour choisir les criteres.toutes les liste sont liées a des tables ayant la meme structure: un champs texte Text et un Num auto Id (ds cet ordre)

    Or lors de l affichage du resultat dans ma recherche, certaine colonne affiche le num auto Id, alors que d autre colonne affiche bien le Texte.

    Dans le cas de l'affichage des Id, j ai ds mon form de recherche, ds les prop de la liste correspondante, un 2 pour le nombre de colonnes.

    Au contraire, Dans le cas de l'affichage des Texte, j ai ds mon form de recherche, ds les prop de la liste correspondante, un 1 pour le nombre de colonnes.

    Qqun aurait il une idee, sachant que je n ai pas changé mon code ci dessus.

    Je sais il faut tt relire mais ce serait vraiment cool d avoir un peu d aide, surtout que je suis presque sur que c est une erreur tres bete.

    Merci d avance

    En changeant a la main ,cela n arrange rien.Dans les 2 cas, la colonne liée est la num 1.

  10. #10
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    Encore une petite question, lors de la recherche d une chaine de caractere (par l intermediaire d une liste deroulante), le resultat affiche tous les enregistrements qui contient cette chaine de caractere.

    Cad: Deux criteres: Sita Tack et Sita Tack Booster Plus

    Qd je cherche avec le critere Sita Tack, le resultat affiche les enregistrements contenant Sita Tack ET Sita Tack Booster Plus.

    Quel est la commande a rajouter pour selectionner seulement la chaine de caractere, et non une chaine qui contient cette chaine de caractere?

  11. #11
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    re bonjour a tous,

    Si vous avez un peu de tps,et d envi bien sur , auriez vous qq pistes sur deux derniers petits pb?

    Je n ai malheureusement rien trouve dans le FAQ.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    salut,

    En changeant a la main ,cela n arrange rien.Dans les 2 cas, la colonne liée est la num 1.
    regarde dans le mode sql de ta requête modèle si tu as * à la fin. Si c'est le cas, essaie en la retirant et en mettant tous les champs que tu veux faire apparaitre dans le résultat de ta requête.

    ________________________________________________________________

    Qd je cherche avec le critere Sita Tack, le resultat affiche les enregistrements contenant Sita Tack ET Sita Tack Booster Plus.
    Dans ton code oiur le critère concerné retire *.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    Case 0  'Ajoute le critère si le type est texte
            ClausE = ClausE & ChamP & " like " & Chr(34) & Chaine & "" & Chr(34)
    Si ce qui est dans ton champs correspond toujours exaceement à la valeur que tu cherche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    Case 0  'Ajoute le critère si le type est texte
            ClausE = ClausE & ChamP & " = " & Chr(34) & Chaine & "" & Chr(34)

    ... Mais sinon je ne vois pas pourquoi ce "chaîne" de tout façon, ça devrai pas être le nom de ta liste dérouante dans ton cas ?

    bref essaie déjà ça sinon va voir mon MP si tu veux. Bone chance
    a+

  13. #13
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    nickel pour mon pb de chaine de caractere, mais par contre mon autre pb est tres bizarre, rien n y fait...

    Mais merci qd meme

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    pour ton pb de liste, tu dois les baser sur ta requête joignant tes tables, c'est à dire sur la même requête de base de ton formulaire. J'ai l'impression que tu te bases sur tes tables. Ensuite n'utilise pas forcément l'assistant (tu clic sur l'icone liste, tu clique ds ton forme => qd l'assistant apparait tu clic annuler et tu le fais tout seul) parce que suivant ta version d'access l'assistant va peut être buguer sur les num auto. Puis dans contenu, tu mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCTROW ou DISTINCT (suivant que tu as des doublons ou non) Ton_champ FROM Ta_requête
    Normalement ça devrait marcher.

    bonne chance
    a+

  15. #15
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    malheuresement ca ne fonctionne pas.Il n y a plus rien ds ma liste deroulante.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    si tu met quelque chose de ce style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT [Requete].champs FROM [requete];
    ça devrai marcher. passe par le generateur (les ...) dans contenu.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    peux tu montrer ce que tu met dans contenu.

  18. #18
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 189
    Points : 54
    Points
    54
    Par défaut
    La premiere tentative:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =[SELECT DISTINCT  ScheibenTyp FROM Suchen]
    Sans les crochets, la syntaxe etait apparemment faux.Il n y avait plus rien dans ma liste.

    Deuxieme tentative,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [SELECT DISTINCT Suchen.champs FROM Suchen;]
    Avec les crochets[MaRequete] la syntaxe etait egalement fausse.
    Cette fois dans la liste de choix apparait "#?Name"

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SELECT DISTINCT [Suchen].champs1, [Suchen].champs2 FROM Suchen;
    posons champs1=ton champs texte et champs2=num id

    si tu veux une liste de tes num id => tu mets que le champs2, avec colonne=1 et colonne liée=1

    si tu veux le texte => l'nverse, ou tu peux laisser comme ça ou tu peux mettre colonne=2, c'est pareil.

    Y'a pas de raison que ça marche pas.

    N.B (au cas ou ) : colonne=le nombre de colonnes à afficher ds ta liste
    et colonne lié, celle qui fait la recherche (et qui est prise en compte pour la saisie semie-automatique dans ta liste, même si c'est pas la première colonne)

Discussions similaires

  1. Recherche globale sur une table
    Par webrider dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2006, 11h41
  2. [WinDev 10] Recherche multicritères dans une table
    Par Gonelle dans le forum WinDev
    Réponses: 4
    Dernier message: 19/07/2006, 14h50
  3. recherche multicritères sur deux tables
    Par amélie22 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 11h59
  4. recherche multicritères sur plusieurs tables
    Par amélie22 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 09h48
  5. Recherche multicritère sur plusieurs tables
    Par Nabouille dans le forum Access
    Réponses: 3
    Dernier message: 12/04/2006, 18h39

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