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'enregistrements/records via plusieurs mots entiers [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut Recherche d'enregistrements/records via plusieurs mots entiers
    Bonjour à tous!

    Ma petite BdD avance gentillement (merci encore User!) et vient maintenant le moment de créer la partie Recherche d'enregistrements.
    J'ai récupéré un code très pratique qui permet de récupérer les enregistrements qui contiennent un mot entier

    Quelqu'un saurait il comment faire pour pouvoir rentrer plusieurs mots à chercher dans les records. Je souhaiterais avoir 2 cas de figure lors de la recherche:
    - mot1 ET mot2 ET ...
    - mot1 OU mot2 OU ...

    Merci à tous


    EDIT: Désolé loufab mais j'avais oublié d'ajouter l'adresse internet, le code n'est pas aussi simple qu'une simple requête avec LIKE


    .

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Pour les expressions régulières tu avais ce tuto :
    http://cafeine.developpez.com/access/tutoriel/regexp/

    Et pour l'utilisation du Like c'est ici :
    http://loufab.developpez.com/tutorie...operateurlike/

    En ce qui concerne l'ajout de condition c'est comme d'habitude :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ like "...." AND champ Like "...." OR champ Like "...."
    Que tu peux retrouver ici :
    http://access.developpez.com/sql/

    Tu avais tout sur place.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Quelqu'un a une idée??

    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    En effet.

    Dans ce cas, enchaine les appels à la fonction comme tu le ferais avec n'importe quel test sql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Recherchermot(champ;"mot") or Recherchermot(champ;"mot") and Recherchermot(champ;"mot")
    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Désolé si je n'ai pas été assez clair:

    en fait je souhaiterais que mes mots soient demandés (mots entre crochets dans la requête SQL ou vba, pas des mots précis déjà rentrés dans la requête) et que l'on puisse en mettre autant qu'on le désire; comme quand on tape des mots dans Menu Démarrer\Rechercher de Windows quoi.

    Du coup, sur mon formulaire j'ai créé un champ texte indépendant où les mots à rechercher peuvent être écrit. Ne reste plus qu'à trouver le code du bouton "Rechercher" associé à ce champ texte. Pour le moment j'ai écrit ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Info sous-formulaire indépendant].RecordSource = "SELECT * FROM TableTriPersonnaliséSQL LEFT JOIN [Info intéressante] ON TableTriPersonnaliséSQL.[Degré d'importance] = [Info intéressante].[Degré d'intérêt] WHERE (([Info intéressante].[Info]) Like ('*' & '\b' & Forms![Info sous-formulaire indépendant].[Texte27] & '\b' & '*'));"
    Problèmes:
    - ma requête ne marche pas: lorsque je clique sur le bouton qui exécute ce code, le formulaire deviens entièrement vide, tout disparait sauf l'arrière-plan!
    - je n'ai toujours pas trouvé le moyen de rechercher plusieurs mots entiers

    Merci par avance pour votre aide

  6. #6
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Peut-être une idée dans ce tuto : les listes multifonctions

    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Je n'ai que jeté un coup d'oeil pour l'instant mais ça semble bien bien loin de mon niveau Access.
    Du coup, je pensais plutôt chercher un moyen de "découper" le texte rentré dans le champs de recherche en fonction des espaces entre chaque mots puis de lancer une requête de recherche de mot entier sur chaque mot.

    Mais comment faire tout ça...alors là, mystère!

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ('*' & '\b' & Forms![Info sous-formulaire indépendant].[Texte27] & '\b' & '*')
    Avec ceci il est évident que tu ne trouveras rien. Tu mélange Like et Expression régulière.
    Je crois que tu vas être obligé soit de lire les tutos, soit de revoir à la baisse les prétentions de ton application.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    En fait ce sont les \b qui semblent poser problème, ils sont censés représenter des fins de mot mais je n'ai pas l'impression qu'ils fonctionnent.
    Je suis en train de lire l'intégralité de la FAQ pour trouver une solution à mon niveau.

    EDIT: la fonction Split(string, séparateur) semble toute indiquée pour séparer les mots

    Merci

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    La fonction Split() marche parfaitement bien (pour vérifier j'ai affiché chaque mot séparé grâce à une MsgBox Split(n) avec n>=0).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub BoutonRecherche_Click()
     
    Dim tabSearch() As String 'les n mots sont donc renvoyer grâce à tabSearch(0) à tabSearch(n)
     
    tabSearch = Split(Forms![Info sous-formulaire indépendant].[Texte27], " ")
     
    Forms![Info sous-formulaire indépendant].RecordSource = "SELECT [Info intéressante].Info, [Info intéressante].[Degré d'intérêt], [Info intéressante].[Réf primaire concernée], [Info intéressante].Localisation FROM TableTriPersonnaliséSQL LEFT JOIN [Info intéressante] ON TableTriPersonnaliséSQL.[Degré d'importance]=[Info intéressante].[Degré d'intérêt] WHERE (((RechercheMot([Info] & [Mots clés], tabSearch(0) Or tabSearch(1))) = True)) ORDER BY TableTriPersonnaliséSQL.TriPersonnalisé;"
     
    End Sub
    Dernier problème maintenant, il semble que les requête SQL écrites en vba n'acceptent pas les tables temporaire (cf. code ci-dessus renvoi une erreur).

    Une idée de la cause de cette erreur? Suis-je obliger de créer une table enregistrant les mots splitté pour contourner cet erreur?

    Merci d'avance

  11. #11
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Pourquoi penses-tu que les requêtes en vba n'accepte pas les tables temporaires ?

    Ce n'est pas plutot que Recherchemot() attent 2 paramètres string. Tu lui envoi un string et un booleen.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RechercheMot([Info] & [Mots clés], tabSearch(0) Or tabSearch(1)))
    il faut plutot ecrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RechercheMot([Info] & [Mots clés], " & tabSearch(0) & ") or RechercheMot([Info] & [Mots clés], " & tabSearch(1) & ")
    Concernant les \b tu mélanges SQL Like et Expression régulière mais je te l'aidéjà dis il me semble.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  12. #12
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Ah super loufab, le coup de "& string &" j'avais justement demandé à quoi ça servait dans un de mes précédent message mais on ne m'avait pas répondu

    Pour finir j'ai trouvé une autre technique que je détaillerais demain (pas trop le temps ce soir, et il me reste encore 2-3 bricoles à arranger pour que ça fonctionne vraiment bien).

    Oui et dans ton code il manque des ', en fait c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') or RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "')
    Merci beaucoup en tout cas, tu éclaires pour moi deux points importants d'un coup!

    @+

  13. #13
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Voilà mon code pour le bouton "Rechercher" associé au champ texte Texte27 où l'utilisateur peut écrire les mots à chercher (jusqu'à 5). Me.Cadre51 fait référence à un Groupe d'Option. N'oubliez pas que la fonction RechercheMot() est à déclarer avant dans un module (voir mon premier post).

    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
    43
    44
    Private Sub BoutonRecherche_Click()
     
    Dim tabSearch() As String 'les n mots sont donc renvoyer grâce à tabSearch(0) à tabSearch(n)
        Dim i As Integer
     
    If Me.Texte27 <> "" Then
            'découpe la chaine en fonction des espaces " ", le résultat de la fonction Split est stocké dans un tableau
    tabSearch = Split(Forms![Info sous-formulaire indépendant].[Texte27], " ")
    For i = 0 To UBound(tabSearch)  'boucle
    Next i  'MsgBox i en sortie de boucle renvoi le nombre de ligne +1 dans la table temporaire Split (= nb de mots à chercher quoi)
    Else
    MsgBox "Aucun mot à rechercher"
    End If
     
    If i = 1 Then
        Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE (RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True);"
    ElseIf i = 2 Then
        If Me.Cadre51 = 1 Then 'cas OU
        Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True));"
        ElseIf Me.Cadre51 = 2 Then 'cas ET
        Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True));"
        End If
    ElseIf i = 3 Then
        If Me.Cadre51 = 1 Then 'cas OU
        Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True));"
        ElseIf Me.Cadre51 = 2 Then 'cas ET
        Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True));"
        End If
    ElseIf i = 4 Then
        If Me.Cadre51 = 1 Then 'cas OU
        Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(3) & "') = True));"
        ElseIf Me.Cadre51 = 2 Then 'cas ET
        Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(3) & "') = True));"
        End If
    ElseIf i = 5 Then
        If Me.Cadre51 = 1 Then 'cas OU
        Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(3) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(4) & "') = True));"
        ElseIf Me.Cadre51 = 2 Then 'cas ET
        Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(3) & "') = True) & and (RechercheMot([Info] & [Mots clés], '" & tabSearch(4) & "') = True));"
        End If
    ElseIf i > 5 Then
    MsgBox "Nombre de mots trop important (> 5)"
    End If
    End Sub
    Attention: je n'ai pas encore trouvé le moyen d'éviter le formulaire vide lorsqu'aucun enregistrement n'est trouvé!

    Merci encore loufab pour les tuyaux

  14. #14
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Voilà j'ai trouvé:
    afin d'éviter la page de formulaire blanche, il suffit d'ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error GoTo fini  'gestion erreur pour control importation
    juste après
    et d'ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fini:
        Select Case Err
            Case 0
            MsgBox "Aucun enregistrement correspondant à votre recherche n'a été trouvé"
            Forms![Info sous-formulaire indépendant].RecordSource = "SELECT * FROM TableTriPersonnaliséSQL LEFT JOIN [Info intéressante] ON TableTriPersonnaliséSQL.[Degré d'importance] = [Info intéressante].[Degré d'intérêt] ORDER BY TableTriPersonnaliséSQL.TriPersonnalisé DESC;"
            Case Else
            MsgBox "Aucun enregistrement correspondant à votre recherche n'a été trouvé"
            Forms![Info sous-formulaire indépendant].RecordSource = "SELECT * FROM TableTriPersonnaliséSQL LEFT JOIN [Info intéressante] ON TableTriPersonnaliséSQL.[Degré d'importance] = [Info intéressante].[Degré d'intérêt] ORDER BY TableTriPersonnaliséSQL.TriPersonnalisé DESC;"
        End Select
    juste avant le End Sub final.

  15. #15
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Je ne comprend pas bien ton Select Case.

    Pourquoi tester la valeur si tu applique le même code ?

    Idem pour ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For i = 0 To UBound(tabSearch)  'boucle
    Next i  'MsgBox i en sortie de boucle renvoi le nombre de ligne +1 dans la table temporaire Split (= nb de mots à chercher quoi)
    Pourquoi ne pas faire simplement ceci ?

    Bon ! L'essentiel c'est que ce soit fonctionnel. Il y a de l'optimisation possible si tu veux.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  16. #16
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Heuu
    En fait c'est que je n'ai pas du tout compris comment (bien) utiliser Select Case donc j'ai juste remplacé les parties qui m'intéressaient d'un code que j'avais récupéré mais qui servait à autre chose.

    Merci beaucoup pour le coup du Je suis preneur pour tout type d'optimisation!

  17. #17
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Re Loufab,

    Je viens d'essayer et ça ne marche pas
    Je reste donc avec ma boucle.

  18. #18
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Argl effectivement mon code Erreur n'est pas du tout au point, j'essaye de règler ça de suite!

  19. #19
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 103
    Points : 71
    Points
    71
    Par défaut
    Et voilà la version finale du code du bouton 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
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
            'AMELIORATION: tri par liste déroulante récupérant automatiquement tous les mots clés de chauque record de la table [Info Intéressante]
    Dim tabSearch() As String 'les n mots sont donc renvoyer grâce à tabSearch(0) à tabSearch(n)
        Dim i As Integer
     
    If Me.Texte27 <> "" Then
            'découpe la chaine en fonction des espaces " ", le résultat de la fonction Split est stocké dans un tableau
    tabSearch = Split(Me.[Texte27], " ")
    For i = 0 To UBound(tabSearch)  'boucle
    Next i  'MsgBox i en sortie de boucle renvoi le nombre de ligne +1 dans la table temporaire Split (= nb de mots à chercher quoi)
    'MsgBox i
    Else
    MsgBox "Aucun mot à rechercher"
    End If
     
    If i = 1 Then
        Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE (RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True);"
        If Me.RecordsetClone.RecordCount = 0 Then
            MsgBox "Aucun enregistrement correspondant à votre recherche n'a été trouvé"
            Me.RecordSource = "SELECT * FROM TableTriPersonnaliséSQL LEFT JOIN [Info intéressante] ON TableTriPersonnaliséSQL.[Degré d'importance] = [Info intéressante].[Degré d'intérêt] ORDER BY TableTriPersonnaliséSQL.TriPersonnalisé DESC;"
        End If
    ElseIf i = 2 Then
        If Me.Cadre51 = 1 Then 'cas OU
            Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True));"
        ElseIf Me.Cadre51 = 2 Then 'cas ET
            Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True));"
        End If
        If Me.RecordsetClone.RecordCount = 0 Then
            MsgBox "Aucun enregistrement correspondant à votre recherche n'a été trouvé"
            Me.RecordSource = "SELECT * FROM TableTriPersonnaliséSQL LEFT JOIN [Info intéressante] ON TableTriPersonnaliséSQL.[Degré d'importance] = [Info intéressante].[Degré d'intérêt] ORDER BY TableTriPersonnaliséSQL.TriPersonnalisé DESC;"
        End If
    ElseIf i = 3 Then
        If Me.Cadre51 = 1 Then 'cas OU
            Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True));"
        ElseIf Me.Cadre51 = 2 Then 'cas ET
            Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True));"
        End If
        If Me.RecordsetClone.RecordCount = 0 Then
            MsgBox "Aucun enregistrement correspondant à votre recherche n'a été trouvé"
            Me.RecordSource = "SELECT * FROM TableTriPersonnaliséSQL LEFT JOIN [Info intéressante] ON TableTriPersonnaliséSQL.[Degré d'importance] = [Info intéressante].[Degré d'intérêt] ORDER BY TableTriPersonnaliséSQL.TriPersonnalisé DESC;"
        End If
    ElseIf i = 4 Then
        If Me.Cadre51 = 1 Then 'cas OU
            Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(3) & "') = True));"
        ElseIf Me.Cadre51 = 2 Then 'cas ET
            Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(3) & "') = True));"
        End If
        If Me.RecordsetClone.RecordCount = 0 Then
            MsgBox "Aucun enregistrement correspondant à votre recherche n'a été trouvé"
            Me.RecordSource = "SELECT * FROM TableTriPersonnaliséSQL LEFT JOIN [Info intéressante] ON TableTriPersonnaliséSQL.[Degré d'importance] = [Info intéressante].[Degré d'intérêt] ORDER BY TableTriPersonnaliséSQL.TriPersonnalisé DESC;"
        End If
    ElseIf i = 5 Then
        If Me.Cadre51 = 1 Then 'cas OU
            Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(3) & "') = True) or (RechercheMot([Info] & [Mots clés], '" & tabSearch(4) & "') = True));"
        ElseIf Me.Cadre51 = 2 Then 'cas ET
            Me.RecordSource = "SELECT * FROM [Info intéressante] WHERE ((RechercheMot([Info] & [Mots clés], '" & tabSearch(0) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(1) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(2) & "') = True) and (RechercheMot([Info] & [Mots clés], '" & tabSearch(3) & "') = True) & and (RechercheMot([Info] & [Mots clés], '" & tabSearch(4) & "') = True));"
        End If
        If Me.RecordsetClone.RecordCount = 0 Then
            MsgBox "Aucun enregistrement correspondant à votre recherche n'a été trouvé"
            Me.RecordSource = "SELECT * FROM TableTriPersonnaliséSQL LEFT JOIN [Info intéressante] ON TableTriPersonnaliséSQL.[Degré d'importance] = [Info intéressante].[Degré d'intérêt] ORDER BY TableTriPersonnaliséSQL.TriPersonnalisé DESC;"
        End If
    ElseIf i > 5 Then
        MsgBox "Nombre de mots trop important (> 5)"
    End If
    Ciao!

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

Discussions similaires

  1. [RegExp] Recherche de plusieurs mots via une regex
    Par UNi[FR] dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/11/2014, 22h52
  2. [MySQL] Recherche des plusieurs mots
    Par jbj dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/01/2006, 23h48
  3. Moteur de recherche et plusieurs mots clés
    Par jack1234 dans le forum Langage
    Réponses: 13
    Dernier message: 14/12/2005, 10h29
  4. Rechercher un enregistrement via un form
    Par priest69 dans le forum IHM
    Réponses: 2
    Dernier message: 28/11/2005, 10h36
  5. Réponses: 6
    Dernier message: 04/11/2005, 17h09

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