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 :

Rechercher sur deux champs différents [AC-2016]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Indépendant
    Inscrit en
    Juillet 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Rechercher sur deux champs différents
    Bonjour à tous,

    Je m'arrache betement les cheveux, sans parvenir à trouver une solution.

    J'ai une table prospect avec un champ Tel
    Une autre table liée à prospect avec des contacts, et des numéros de Tel directs

    Sur mon formulaire prospect (qui charge en sous formulaire la table contacts), j'essaie de rechercher un numéro de téléphone aussi bien sur le champ telprospect que sur le champ telcontact


    Lorsque je code de manière distincte, tout fonctionne, mais impossible de joindre les deux champs pour la recherche

    Quelqu'un a t il une idée SVP?

    Je vous joins mon code, le second est bloqué, naturellement

    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
    'Champs de recherche Tel prospect ou Tel Contact sur la fiche prospect
    Private Sub RechTel_AfterUpdate()
    Dim x As Variant
    x = RechTel
    Dim bd As Dao.Database
    Set bd = CurrentDb()
    Dim rst As Recordset
    Dim Chstr As String
        Chstr = "SELECT Contacts.noprospects, Contacts.nocontact, Contacts.TelContact FROM Contacts WHERE ((Contacts.TelContact) Like " & Chr(39) & Chr(42) & x & Chr(42) & Chr(39) & ")"
        'Chstr = "SELECT prospects.noprospects, prospects.TelProspects FROM prospects WHERE ((prospects.TelProspects) Like " & Chr(39) & Chr(42) & x & Chr(42) & Chr(39) & ")"
            Set rst = bd.OpenRecordset(Chstr)
            rst.MoveFirst
            DoCmd.GoToControl "NoProspects"
            DoCmd.FindRecord rst("NoProspects"), , True, , True
     
    End Sub

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    En supposant que x est une constante, remplacer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "WHERE ((Contacts.TelContact) Like " & Chr(39) & Chr(42) & x & Chr(42) & Chr(39) & ")"
    par cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "WHERE ((Contacts.TelContact) Like " & Chr(39) & Chr(42) & "'" & x & "'" & Chr(42) & Chr(39) & ");"

  3. #3
    Membre à l'essai
    Homme Profil pro
    Indépendant
    Inscrit en
    Juillet 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Salut et merci pour ta réponse, cependant...

    Peut etre que je me suis mal exprimé

    Ce que je souhaite, c'est que la recherche de x se fasse sur le champ Telprospects du formulaire et également sur la champ telContact du sous formulaire chargé


    Les formules rédigées séparément fonctionnent bien
    J'ai donc un manque sur la jonction de ces deux formules

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    J'ai donc un manque sur la jonction de ces deux formules
    je ne comprend pas bien la notion de "jonction" mais as-tu essayé d'exécuter les commandes de recherche l'une après l'autre: d'abord le formulaire, ensuite le sous-formulaire ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Indépendant
    Inscrit en
    Juillet 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Bonsoir,

    Oui, l'une après l'autre, cela fonctionne

    Donc ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chstr = "SELECT Contacts.noprospects, Contacts.nocontact, Contacts.TelContact FROM Contacts WHERE ((Contacts.TelContact) Like " & Chr(39) & Chr(42) & x & Chr(42) & Chr(39) & ")"
    Et celui ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chstr = "SELECT prospects.noprospects, prospects.TelProspects FROM prospects WHERE ((prospects.TelProspects) Like " & Chr(39) & Chr(42) & x & Chr(42) & Chr(39) & ")"

    fonctionnent séparément


    Ce que je voudrais, c'est joindre ces deux codes, afin de pouvoir faire une recherche sur les deux champs

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Ce que je voudrais, c'est joindre ces deux codes, afin de pouvoir faire une recherche sur les deux champs
    à mon avis on ne peut pas: ce sont 2 objets différents un formulaire et un sous-formulaire et 2 sources de données différentes, on ne peut que le faire l'un après l'autre.

    Et je ne comprend toujours pas ce que tu entends par "joindre", si c'était possible de faire une recherche dans 2 tables en même temps, cela se saurait
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Puisqu'il semble complexe d'effectuer ta requête sur deux tables simultanément (mes connaissances en SQL ne me permettent pas d'infirmer cette affirmation), la solution consiste peut-être à stocker les résultats de la première requête dans une liste quelconque (Dim Res1(1000) as String, par exemple, ou un contrôle de type ListBox masqué sur ton formulaire).
    Puis, lorsque tu lances ta seconde requête, tu en compares les résultats avec le contenu de ta liste.

    Cordialement,

  8. #8
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 670
    Points : 2 489
    Points
    2 489
    Par défaut
    Je ne vois pas très bien, non plus, mais si tu es familiarisé avec les UNION queries, tu peux en créer une combinant les recordsets des deux formulaires, puis lancer la recherche sur cette UNION query.
    Désolé pour les puristes préférant la terminologie française, mais j'ai toujours travaillé avec des versions anglaises de MS-Office.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Indépendant
    Inscrit en
    Juillet 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Comment?
    Vous voulez dire qu’il n’est pas possible de coder une recherche sur deux champs de tables différentes en sql?
    Ca me surprend...

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    il n'est pas possible de faire cela en une seule fois sur 2 tables différentes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            DoCmd.GoToControl "NoProspects"
            DoCmd.FindRecord rst("NoProspects"), , True, , True
    Access n'est pas multi-tâches et de toute façon le FindRecord recherche le premier enregistrement correspondant au critère
    [EDIT] :mise à jour du message
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Salut,
    je suppose que bien sur tu as fait une relation entre les tables Prospects et Contacts via noprospects
    alors tu peux exploiter simplement la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT prospects.noprospects, prospects.TelProspects,
     Contacts.nocontact, Contacts.TelContact
    FROM Prospects LEFT JOIN Contacts ON Prospects.noProspects = Contacts.noProspects
    ( LEFT JOIN te permet d'avoir les telephones des prospects qui n'ont encore pas de contacts)

    cdlt
    "Always look at the bright side of life." Monty Python.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Indépendant
    Inscrit en
    Juillet 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par micniv Voir le message
    Salut,
    je suppose que bien sur tu as fait une relation entre les tables Prospects et Contacts via noprospects
    Salut et merci!
    Oui, je te confirme, j'ai bien fait la relation entre les tables prospects et contacts via noprospects.

    J'ai renseigné ton code ainsi:

    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
    Private Sub RechTel_Click()
    On Error Resume Next
    Dim x As Variant
    x = RechGnl
    Dim bd As Dao.Database
    Set bd = CurrentDb()
    Dim rst As Recordset
    Dim Chstr As String
        Chstr = "SELECT prospects.noprospects, prospects.TelProspects, Contacts.nocontact , Contacts.TelContact FROM Prospects LEFT JOIN Contacts ON Prospects.noProspects = Contacts.noProspects WHERE ((Contacts.TelContact) Like " & Chr(39) & Chr(42) & x & Chr(42) & Chr(39) & ")"
            Set rst = bd.OpenRecordset(Chstr)
            rst.MoveFirst
            DoCmd.GoToControl "NoProspects"
            DoCmd.FindRecord rst("NoProspects"), , True, , True
        If NoProspects <> rst("NoProspects") Then
        MsgBox "Pas de Résulat pour votre Recherche"
        End If
    RechGnl = ""
    Mais cela ne fonctionne pas... aurais je mal écris le code?

  13. #13
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Tu ne fais aucun traitement si noProspects est trouvé

    déjà , enleve la ligne 'on error resume next'

    est-ce que la requete "SELECT prospects.noprospects, prospects.TelProspects, Contacts.nocontact , Contacts.TelContact FROM Prospects LEFT JOIN Contacts ON Prospects.noProspects = Contacts.noProspects" exécutée directement dans le QBE te donne des résultats ,

    si oui ton code peut être simplifié
    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
    Private Sub RechTel_Click()
    'On Error Resume Next
    
    Dim bd As Dao.Database
    Dim rst As DAO.Recordset
    Dim Chstr As String
    
    Set bd = CurrentDb()
        Chstr = "SELECT prospects.noprospects, prospects.TelProspects, Contacts.nocontact , Contacts.TelContact FROM Prospects LEFT JOIN Contacts ON Prospects.noProspects = Contacts.noProspects WHERE ((Contacts.TelContact) Like " & Chr(39) & Chr(42) & x & Chr(42) & Chr(39) & ") " _
    & " AND prospects.noprospects =" & me.NoProspects 
    debug.print chstr    ' lire la valeur de chstr dans la fenetre exécution
            Set rst = bd.OpenRecordset(Chstr)
    if rst.recordcount = 0 then
    MsgBox "Pas de Résultat pour votre Recherche"
    else
    ' les prospect(s)-contact(s) est trouvé
    rst.movefirst
    rst.movelast
    while not rst.eof
    'ici traitement des lignes trouvées
    ...
    rst.movenext
    wend
    end if
    cdlt
    "Always look at the bright side of life." Monty Python.

  14. #14
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    dans ton 1er message :
    J'ai une table prospect avec un champ Tel
    Une autre table liée à prospect avec des contacts, et des numéros de Tel directs
    Sur mon formulaire prospect (qui charge en sous formulaire la table contacts), j'essaie...
    Or il m'apparait que tu as une relation 1-n de Prospects vers Contacts : donc ce devrait être le form Contacts qui se charge en ss-form de Prospects ?
    "Always look at the bright side of life." Monty Python.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Indépendant
    Inscrit en
    Juillet 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Je viens enfin de trouver une solution à mon souci

    Je la poste pour que d'autres puissent en profiter

    ;-)


    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
    41
    42
     
        'Recherche Tel
        Private Sub RechTel_AfterUpdate()
                On Error Resume Next
                Dim x As Variant
                x = RechTel
                Dim bd As dao.Database
                Set bd = CurrentDb()
                Dim rst As Recordset
                Dim Chstr As String
                Dim chsts As String
                Dim chstt As String
                    'Recherche sur le tel des contacts
                    Chstr = "SELECT Contacts.noprospects, Contacts.nocontact, Contacts.TelContact FROM Contacts WHERE ((Contacts.TelContact) Like " & Chr(39) & Chr(42) & x & Chr(42) & Chr(39) & ")"
                        Set rst = bd.OpenRecordset(Chstr)
                        rst.MoveFirst
                        DoCmd.GoToControl "NoProspects"
                        DoCmd.FindRecord rst("NoProspects"), , True, , True
     
                        'S'il ne trouve rien, recherche sur les tels des prospects
                        If NoProspects <> rst("NoProspects") Then
                        chsts = "SELECT prospects.noprospects, prospects.TelProspects FROM prospects WHERE ((prospects.TelProspects) Like " & Chr(39) & Chr(42) & x & Chr(42) & Chr(39) & ")"
                            Set rst = bd.OpenRecordset(chsts)
                            rst.MoveFirst
                            DoCmd.GoToControl "NoProspects"
                            DoCmd.FindRecord rst("NoProspects"), , True, , True
     
                                'S'il ne trouve rien recherche sur les mobiles des prospects
                                If NoProspects <> rst("NoProspects") Then
                                chstt = "SELECT Contacts.noprospects, Contacts.nocontact, Contacts.MobileContact FROM Contacts WHERE ((Contacts.MobileContact) Like " & Chr(39) & Chr(42) & x & Chr(42) & Chr(39) & ")"
                                    Set rst = bd.OpenRecordset(chstt)
                                    rst.MoveFirst
                                    DoCmd.GoToControl "NoProspects"
                                    DoCmd.FindRecord rst("NoProspects"), , True, , True
     
                                        If NoProspects <> rst("NoProspects") Then
                                                MsgBox "Pas de Résulat pour votre Recherche"
                                        End If
                                End If
                        End If
                RechTel = ""     ' permet de remettre le champs à 0
        End Sub

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/02/2017, 14h54
  2. Réponses: 7
    Dernier message: 07/12/2009, 22h08
  3. Une Recherche sur deux champs
    Par souminet dans le forum Débuter
    Réponses: 8
    Dernier message: 04/11/2008, 13h56
  4. [Oracle] Recherche de doublons sur deux champs
    Par BiM dans le forum Langage SQL
    Réponses: 28
    Dernier message: 04/01/2007, 12h52
  5. Sum de deux champs sur deux tables différentes
    Par kluh dans le forum Oracle
    Réponses: 11
    Dernier message: 29/09/2005, 18h21

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