Moteur de recherche

Nessie

XLDnaute Occasionnel
Bonjour à tous,

J'ai parcouru le forum (en tapant "moteur de recherche") pour solutionner mon problème mais je vous avoue que je sèche.

Je vous explique. C'est très simple pour les développeurs que vous êtes :
Je souhaiterais réaliser un moteur de recherche, qui me permette dans l'exemple que je vous joins, d'entrer un mot d'une désignation (ou la désignation entière) et que le résultat affiche toutes les désignations qui s'y rapprochent ainsi que leur référence, en allant chercher dans la liste des produits (liste qui se situe à gauche dans mon exemple)

L'idéal serait que je le fasse sur un userform (si je ne me trompe pas dans le terme). J'ai vu un exemple super sur ce site mais je crois que cela demande de grandes connaissances en VBA (VBA que j'ai appris de façon autodidacte pour Access et je suis loin d'être une grande développeuse).
D'ici à vendredi, je n'aurai pas le temps de me former sur le VBA (à mon grand désespoir).
Dans l'exemple que j'ai vu sur ce site, en cliquant sur un bouton RECHERCHE, un userform s'ouvre et on peut saisir les critères de recherche à gauche (dans mon cas, il n'y en a qu'un) et à droite, la liste s'affiche (avec un "ascenseur" en cas de liste trop longue ! trop bien ! ). ça, ça me le ferait de pouvoir le réaliser. Ce serait l'occasion pour moi de commencer à me familiariser avec VBA excel.

Si maintenant, vu mon faible niveau en VBA, il est plus simple que j'affiche les résultats sur la même feuille de calcul, je suis preneuse.

Je vous remercie pour votre aide.

Ness
 

Pièces jointes

  • exemple.xlsx
    11.2 KB · Affichages: 101
  • exemple.xlsx
    11.2 KB · Affichages: 116
  • exemple.xlsx
    11.2 KB · Affichages: 112

Nessie

XLDnaute Occasionnel
Re : Moteur de recherche

Je m'étais fait la même remarque.
J'espère que lynyrd ne m'en voudra pas, mais pour corriger cela, il suffit de supprimer ou de mettre en commentaire la condition IF dans la boucle DO.
Donc :

Code:
Do
'    If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then
       ListBox1.AddItem C.Offset(0, 0), n
        ListBox1.List(n, 0) = C
         ListBox1.List(n, 1) = C.Offset(0, 1)
          ListBox1.List(n, 2) = C.Offset(0, 2)
            n = n + 1
'   End If
    Set C = .FindNext(C)
    Loop While Not C Is Nothing And C.Address <> Adresse
    End If
End With

Et le problème est réglé.... Seront affichés dans la ListeBox toutes les désignations commençant ET contenant la valeur recherchée.


Hello.

Merci à toi. EN fait, submergée par le boulot et par les messages, je n'ai pas pu tout résumer. Je me suis servie du code de Habitude. D'ailleurs, Lynyrd m'a aidée aussi en ce sens, sur la base d'habitude. Pour résumer où j'en suis car il y a des message dans tous les sens :
Là, j'ai réussi à "coller" le code de Habitude sur tout mes forms, tout se passe à peu près nickel sauf que je cherche toujours comment utiliser le Ucase qui, dans le code de Habitude, ne recherche que les articles en lettres capitales. Pour peu que l'article commence par une majuscule et le reste en minuscule, ça ne passe pas. Alors j'ai viré (j'y vais à taton je le répète car je décortique les syntaxes) le Ucase et c'est cool mais les articles commençant par une majuscule ne font pas partie du coup de la recherche.
Par ailleurs, toujours ma décortication de code, je cherche comment ajouter une 4ème colonne (comme expliqué plus haut). je pense que ça se situe au niveau des "cell(-1)" etc.

Du coup, le fichier que j'ai posté hier a bougé depuis, j'ai revu mes codes car j'ai vu où étaient mes erreurs par rapport à certaines choses. Mais en gros c'est ça.

une fois cela réglé, je vais pouvoir balancer mon fichier et être débarrassée ! Ouf
 

unrender

XLDnaute Junior
Re : Moteur de recherche

Ok LoL. J'arrive un peu après la bataille.
Dans ton fichier exemple, toutes les désignations sont en majuscules, donc ça devrait fonctionner.
Par contre, si dans ton fichier chez toi, tu as des désignations en minuscules aussi, essaie de changer cette ligne :
Code:
If InStr(1, Cell.Value, recherche) Or recherche = "" Then

par celle-ci

Code:
If InStr(1, Ucase(Cell.Value), recherche) Or recherche = "" Then

si utilises bien ce code évidemment LoL.

du coup, je ne sais plus... ;)
 

Nessie

XLDnaute Occasionnel
Re : Moteur de recherche

Ok LoL. J'arrive un peu après la bataille.

Meuh non ! Moi j'en ai pas fini avec cette bataille donc tu n'arrives pas après. Effectivement dans mon fichier exemple (le tooooouuuuuuuuut premier), les désignations sont en majuscule. Normal, c'était le seul cadencier correct que j'avais. Depuis, j'en ai récupéré quelques uns et dans ceux-là, La première lettre est en majuscule et le reste en minuscule. Donc oui, le code de Habitude fonctionnait nickel, et il fonctionne nickel du reste mais pas avec mes autres cadenciers.

Je vais essayer de mettre à profit ton conseils.

Et sinon, ....euh... pour mon histoire de colonne ....ça te tente de m'aider ?...
 
Dernière édition:

unrender

XLDnaute Junior
Re : Moteur de recherche

Oui, mais ce n'est pas ma modif ça.
Le fait que la Textbox soit en majuscule vient de là :

Code:
recherche = UCase(TRecherche.Text)
qui veut dire que la variable recherche reçoit la forme majuscule de la Textbox

et de ça :
Code:
TRecherche.Text = recherche
la valeur 'recherche' est réinjectée dans la Textbox.


La modif que je t'ai donnée c'est pour passer les valeurs de ton tableau en majuscule, et donc qu'elles correspondent à la valeur de la Textbox qui elle aussi est en majuscule.

Si, pour une question de goût, tu préfères afficher la Textbox en minuscule (ou minuscule et majuscule), il suffit de supprimer (ou mettre en commentaire) cette ligne :
Code:
TRecherche.Text = recherche

De ce fait, la Textbox acceptera : vanille, VANILLE, Vanille, VANille....
 
Dernière édition:

Nessie

XLDnaute Occasionnel
Re : Moteur de recherche

OK :)

C'est quoi ton histoire colonne ? Tu peux m'expliquer ?

C'est simple, à l'origine, je souhaitais voir dans la listeview les colonne "réf, désignation et prix" et le code de Habitude a été fait en ce sens. Maintenant, il faudrait que la colonne "conditionnement" (qui est la 4ème dans mes tableaux) s'affiche également. Donc dans son code, je dois ajouter ce paramètre et je soupçonne que ça se situe au niveau des (-1), (,1)
Code:
Private Sub TRecherche_Change()
ListeResultats.ListItems.Clear
recherche = UCase(TRecherche.Text)
With Sheets("SCHOEN")
    For Each Cell In .Range("B" & LigneDebut & ":B65536").SpecialCells(xlCellTypeConstants)
        If InStr(1, UCase(Cell.Value), recherche) Or recherche = "" Then
            Set a =[COLOR="red"] ListeResultats.ListItems.Add(Text:=Cell.Offset(, -1))
            a.ListSubItems.Add Text:=Cell.Value: a.ListSubItems.Add Text:=Cell.Offset(, 1)
        End If
    Next Cell
End With

End Sub

C'est ce sur quoi je pêche.
 

unrender

XLDnaute Junior
Re : Moteur de recherche

OK. En fait tu dois d'abord ajouter la colonne dans la ListView.
Dans VBA, tu sélectionnes la ListView ListeResultats du UserForm FormRecherche. Puis dans ses propriétés, tu vas dans (Personnalisé).
Dans En-têtes de colonnes, tu fais Insérer une colonne, tu mets "Conditionnement", tu changes la largeur si tu veux (Width) et tu appliques.

Ensuite au niveau du code, il faut remplacer cette ligne :

Code:
a.ListSubItems.Add Text:=Cell.Value: a.ListSubItems.Add Text:=Cell.Offset(, 1)

par ça :

Code:
a.ListSubItems.Add Text:=Cell.Value: a.ListSubItems.Add Text:=Cell.Offset(, 1): a.ListSubItems.Add Text:=Cell.Offset(, 2)

La ligne ci-dessus s'affiche sur 2 lignes, mais c'est bien une seule est même ligne...
 
Dernière édition:

Habitude

XLDnaute Accro
Re : Moteur de recherche

Re bonjour

L'avantage de déclarer un nouvel objet UserForm est que tu peux initialiser des variables avant d'afficher la UserForm.

Ca force aussi le code a passé par Me au lieu d'appler la Userform directement.

Ceci évite de créer X fois la même userform.
 

Pièces jointes

  • version habitude.zip
    205.5 KB · Affichages: 57
  • version habitude.zip
    205.5 KB · Affichages: 59
  • version habitude.zip
    205.5 KB · Affichages: 60

Nessie

XLDnaute Occasionnel
Re : Moteur de recherche

Merci pour ces explications Unrender. C'est marrant, j'avais fait cela toute seule mais ça ne fonctionnait pas. J'ai peut-être du oublier un "," ou ":".

Merci encore pour ta patience
 
Dernière édition:

Nessie

XLDnaute Occasionnel
Re : Moteur de recherche

Merci habitude pour cette explication. Mais je ne comprends pas pourquoi dans ma transposition, le code coince au niveau de
Code:
Const LigneDebut = 2
Dim [B]m_feuille As String[/B]
.

Que dois-je comprendre sur cette ligne ?
 
Dernière édition:

Discussions similaires

Réponses
5
Affichages
295

Statistiques des forums

Discussions
312 361
Messages
2 087 613
Membres
103 607
dernier inscrit
lolo1970