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

Macros et VBA Excel Discussion :

[E-97][E-03] Recherche par mots clés


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut [E-97][E-03] Recherche par mots clés
    Bonjour,

    Je vous sollicite pour des petits soucis liés à un formulaire de recherche par mots clés.

    Voilà, j'ai un premier UserForm dans lequel je rentre par le biais d'un TextBox un certains nombre de mots clés.
    A chaque changements dans le TextBox, une procédure "recherche" s'exécute permettant ainsi l'affichage dans une ListBox des résultats de la recherche.

    L'objectif à terme est de pouvoir double cliquer sur l'un des résultats situés dans la ListBox et d'ouvri un deuxième formulaire avec des champs déjà pré-rempli.

    Mes questions sont les suivantes :
    - comment peut-on afficher le résultat de la recherche dans la ListBox ?
    - est-il possible de double cliquer sur une ligne résultat et d'ainsi ouvrir un autre formulaire déjà pré-rempli.

    Ci-joint un classeur exemple :
    Je recherche en mots clé "Ville", je dois avoir afficher dans la fenêtre de résultat "Toulouse" et "Montélimar" (=> ce que je n'arrive pas à faire)
    Le but étant de cliquer sur Montélimar et de voir apparaitre dans le second formulaire dans la TextBox ville "Montélimar" et dans la TextBox code Postal "26200"

    Mon code est pour l'instant le suivant mais il est erroné :
    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 UserForm_Initialize()
     
    Dim motclé As Range
     
    Worksheets("Base de données").Activate
     
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Name = "motclé"
     
    End Sub
    '----------------------------------------------------------------
    Private Sub ListeMC_Change()
     
    recherche
     
    End Sub
    '----------------------------------------------------------------
    Sub recherche()
     
    Dim mot_cherché  As String
    Dim celluletrouvee As Range
     
     
    mot_cherché = ListeMC.Value
    Set celluletrouvee = Range("motclé").Find(mot_cherché)
    'ERREUR' UserForm1.Resultat.Value = Range(celluletrouvee, celluletrouvee.Offset(0, 1))
    End Sub
    Merci d'avance si vous voyez des solutions à mes petits soucis
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour couistelle le forum un ex: si j ai compris !!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Oui merci c'est tout à fait ça !!

    Je vais me pencher sur ton travail et essayer de comprendre comment tu as fait, je te poserais des questions si j'ai des problèmes.

    Encore merci !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    J'ai une question :

    Apparemment je suis limité au niveau de l'affichage dans la listbox à 10 items

    comment faire pour en ajouter un de plus ?

    au niveau du code l'erreur se situe ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.List(N, 10) = C.Offset(0, 10)
    Merci

  5. #5
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re, le forum effectivement ce code est limite en nb..de colonnes combien
    tu en as !!!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    j'en ai 12...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Quelqu'un a une idée pour contourner ce problème ?

  8. #8
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour couistelle le forum une version adapter.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup !!

    Tout marche très bien, définitivement résolu !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Une question subsidiaire tout de même :

    Comment dois-je adapter ce dernier code si je veux pouvoir chercher un mot parmi les différents mots clés ?

    Dans l'exemple cela voudrait dire que je veux chercher "Nougat" et non "Ville" en premier pour Montélimar.

  11. #11
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    rebonjour couistelle le forum faire un recheche sur une autre colonne ou sur toutes en meme temps c est facile a batir avec des variables par contre comme tu veus faire il faut que je regarde surement avec une autre fonction pour extraire le deuxieme mot de la cell..ou supprimer le premier .si j ai le temps je regarderais ce soir sujet interessant....

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    En fait ce qu'il faudrait dire c'est :
    Cherche le premier mot (compter le nombre de caractère avant l'espace et rechercher le mot que cela forme) ; Si non trouvé alors chercher le mot apres espace, si non trouvé, chercher le troisième mot....

    avec nombre de mot = nombre d'espaces + 1


    Sinon j'avais aussi penser à une recherche avec caractère générique de type * (comme dans access) pour chercher n'importe où dans le mot

    Mais bon tout ça je ne sais pas comment le traduire...

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Il serait peut-être intéressant d'utiliser Like
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if cellule.value like "*nougat*"
    permet de voir si nougat se trouve dans la cellule.

    Il faut peaufiner un peu pour les majuscules, accents, etc...

    Il serait sûrement utile, pour réaliser cela, de s'orienter vers les expressions régulières , et notamment ce tuto de caféine

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Bonjour et merci d'entrer dans la discussion

    J'ai une question cependant : comment écrire mon programme si justement je ne pas y voir figurer expressément nougat mais plutot *valeur de la cellule*, puisque dans chaque cellule je n'ai pas marqué nougat

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if cellule.value like "*" & valeur & "*"
    avec Valeur représentant une variable de type string.


    Il serait aussi utile d'optimiser le code (dans une autre discussion pour ne pas "polluer" celle-ci)

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Reprenons donc pour ma petite cervelle de débutante :

    Je fais une recherche de plusieurs mots clé (séparés par un espace) quelque soit leur position dans la cellule, et je souhaite afficher le résultat dans une listbox sur 12 colonnes.

    Le code proposé par Laetitia et qui fonctionne pour la recherche sur le premier mot de la cellule est le suivant :
    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
    Private Sub TextBox1_Change()
     
    On Error Resume Next
     
    Application.ScreenUpdating = False
    t = Range("a2:l" & Range("a65536").End(xlUp).Row)
    ListBox1.Clear
    X = 1
    For i = 1 To UBound(t)
    If Left(t(i, 1), Len(TextBox1)) = Left(TextBox1, Len(TextBox1)) Then
    ReDim Preserve ta(1 To 12, 1 To X)
    For k = 1 To 12
    ta(k, X) = t(i, k)
    Next k: X = X + 1: End If: Next i
    If X - 1 = 1 Then
    ListBox1.List = Application.Transpose(ta)
    For t = 1 To Range("a65536").End(xlUp).Row
    If Cells(t, 1) = (ListBox1.List(ListBox1.ListIndex + 1, 0)) Then
    Cells(t, 2).Activate: End If: Next t
    Range(ActiveCell(1, 0), ActiveCell(1, 11)).Select
    ListBox1.Clear: t = Selection: ListBox1.List = t: [a1].Select
    Else
    ListBox1.List = Application.Transpose(ta)
    End If: Erase t, ta: Label6 = X - 1: If TextBox1 = "" Then ListBox1.Clear: Label6 = ""
    Label6.Caption = "nb...  " & ListBox1.ListCount: Beep
     
    End Sub
    Il va donc falloir modifier cette partie du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left(t(i, 1), Len(TextBox1)) = Left(TextBox1, Len(TextBox1)) Then
    Pour insérer quelque chose du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If t like "*"&TextBox1.value&"*"
    Ai-je bon ?

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Il suffit d'essayer... ... Cela devrait fonctionner

  18. #18
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour couistelle Pierre le forum essai comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If t(i, 1) Like "*" & tbx1.Value & "*" Then

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Tout marche à merveille !

    Merci encore à tous pour cette discussion très instructive !

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

Discussions similaires

  1. Recherche par mot clés - Php -Mysql
    Par pod1978 dans le forum Requêtes
    Réponses: 8
    Dernier message: 22/09/2006, 14h01
  2. recherche par mots-clés dans base access
    Par syber72 dans le forum Access
    Réponses: 2
    Dernier message: 07/03/2006, 14h53
  3. [MySQL] recherche par mots clés
    Par spartan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/02/2006, 17h11
  4. [Tableaux] Moteur de recherche par mot clés
    Par Nee dans le forum Langage
    Réponses: 4
    Dernier message: 20/01/2006, 12h30
  5. Recherche par mots clés
    Par legillou dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2005, 11h56

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