Moteur de recherche avec liste déroulante

Bonjour,

Je dois créer, dans le cadre de mon travail, une grande quantité de fiches techniques (recettes) contenant: produits (avec son code de référence interne à l 'entreprise), prix de revient, plus d' autres info, etc etc . Je dois au maximum, optimiser cette tache au vue du peu de temps que je dispose.

J' ai utilisé les fonctions DECALER et EQUIV, mais:

Dans les cellules de la colonne produits, en tapant simplement quelques lettres consécutives, s' affiche dans la liste déroulante les produits commençant par ces lettres, il me suffit de cliquer sur le bon produit pour afficher le prix, le code de référence, et les autres info

Seulement

j' aimerai que dans la liste déroulante soit présent les produits contenant ces lettres, quelque soit l' emplacement dans les cellules qui servent de "base" - ici , la colonne A:A de la feuille "liste produits"

Exemple avec "pain" qui ne fait pas apparaitre "petit pain"

Je n' ai pas la maitrise des intitulés des produits, qui sont dans une base d' un logiciel professionnel. Par chance, il y a une fonction d' extraction vers Excel. La base de données des produits va atteindre prochainement environ 6 000 produits, donc impossible de renommer certains pour une recherche plus fine.

J' ai mis dans le fichier joint, un exemple de produits qui posent problème.

En espérant ne pas avoir été brouillon dans mes explications,

Merci

@++

233fiche-technique.xlsx (20.57 Ko)

Bonsoir,

La liste déroulante ne fonctionnera pas autrement qu'elle fonctionne actuellement, ce ne serait plus une liste déroulante...

Tu as à mon sens deux méthodes.

Si, ainsi que tu le dis ton problème ne concerne qu'un petit nombre de produits, tu rajoutes un nom de catégorie pour les reclasser dans la catégorie où tu souhaites les voir.

Exemple: si tu mets : PAIN: PETIT PAIN, tu trouveras PETIT PAIN avec les autres PAIN...

Si ton problème est plus large, il faut sans doute repenser ton système pour pouvoir opérer des regroupements par mots-clés, un même produit pourrait alors faire partie de plusieurs regroupements. Là il faudre introduire les mots-clés dans la base, et rebâtir un système de recherche à 2 niveaux : choix de regroupements à partir de mots-clés, recomposition d'une liste correspondant au choix primaire...

Cordialement

Bonjour,

Saisie intuitive type Google (frapper les lettres contenues ou double-clic pour tous les produits)

La recherche intuitive peut se faire sur les 2 colonnes (libellé et référence)

Dim a()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect([H16:H37], Target) Is Nothing And Target.Count = 1 Then
    a = Sheets("Liste produits").Range("liste").Value
    Me.ComboBox1.List = a
    Me.ComboBox1.Height = Target.Height + 3
    Me.ComboBox1.Width = Target.Width
    Me.ComboBox1.Top = Target.Top
    Me.ComboBox1.Left = Target.Left
    Me.ComboBox1 = Target
    Me.ComboBox1.Visible = True
    Me.ComboBox1.Activate
    'Me.ComboBox1.DropDown    ' ouverture automatique au clic dans la cellule (optionel)
  Else
    Me.ComboBox1.Visible = False
  End If
End Sub

Private Sub ComboBox1_Change()
 If Me.ComboBox1 <> "" And IsError(Application.Match(Me.ComboBox1, a, 0)) Then
   Set d1 = CreateObject("Scripting.Dictionary")
   tmp = "*" & UCase(Me.ComboBox1) & "*"
   For Each c In a
     If UCase(c) Like tmp Then d1(c) = ""
   Next c
   Me.ComboBox1.List = d1.keys
   Me.ComboBox1.DropDown
 End If
   ActiveCell.Value = Me.ComboBox1
End Sub

Ceuzin

Mferrand,

Merci pour ces précisions,

J' avais bien commencé une ébauche par catégories, mais c' est la mise à jour de la liste des produits qui posait problème car je dois la rafraichir régulièrement (modification de produits, prix etc etc ...), l' export de données depuis le logiciel professionnel est très rapide est simple, je voulais une solution sans avoir à retoucher cet export.

ceuzin,

Comment dire ... Champagne !!!

Tu as visé vraiment dans le mile, de plus , tu as incorporé dans la recherche les codes, ce qui me permettra de faire également une recherche par type de produits. Mon exemple sur la feuille n' est pas bon, mais les codes respectent une logique , donc , c'est double

Tu n' imagines pas à quel point tu me retire une épine (que dis-je, un pieu) du pied !

J' ai épuré les listes de noms qui ne servent plus (L_PRODUIT, F_PRODUIT, P_PRODUIT), j' ai modifié les formules des colonnes "prix de revient" (inversion des données avec la condition SIERREUR)

J' ai également modifié la plage de données "liste" pour que la recherche se fasse sur toute les colonnes A et B (pour parer à l' arrivée massive de produits). Par contre, ça ralentie un peu la recherche, je n' ai pas un PC dernier cri, je verrais bien au boulot. Je regarde du coté de la condition NBVAL, voir s 'il n' y a pas quelques chose à faire pour ne pas inclure les cellules vides.

Encore merci

@++

J'ai mis un nom de champ dynamique pour LISTE

=DECALER('Liste produits'!$A$2:$B$2;;;NBVAL('Liste produits'!$A:$A))

Je ne sais pas si une des 2 versions jointes est + rapide.

Ceuzin

Merci !!! ça fonctionne très bien

Juste 2 petites choses que je n' arrive pas à affiner:

Supprimer l 'info bulle de la Combobox (j' ai fouillé dans le "mode création" et les propriétés de la combobox)

dans la liste déroulante, y a t-il moyen d'aligner "les références" sur la droite, pour laisser plus de place au libellées (certains sont long)?

J' essaie de décortiqué la macro, c 'est tout nouveau est intéressant, ( les formules Excel, j' ai les mains dedans seulement depuis quelques jours )

@++

  • L'infoBulle ne provient pas du combobox mais des cellules (Données/Validation/Message)
  • Les largeurs des 2 colonnes de la combobox 200;50 (ColumnWidth) peuvent être modifiées ainsi que la largeur de la colonne H
  • La taille de la police du combobox peut être modifiée dans la propriété Font

Ceuzin

Modifications faites

Encore une fois, je ne peux que te remercier

Je mets en résolu

@++

Tonher

Désolé pour le temps passé mais merci à vous tous. Le sujet est résolu.

Cordialement

Rechercher des sujets similaires à "moteur recherche liste deroulante"