Amélioration de ma liste déroulante avec saisie semi-automatique

Bonjour à tous,

Pour mon travail, j'ai crée un système de devis automatique qui une fois remplis, enregistre et convertit la feuille calc en pdf et l'envoie par mail à une adresse attribué par défaut.

Ce fichier est lié à une base de données contenant les informations des produits mis en vente par ma boite ( un peu plus de 700 produits).

J'ai réussi presque toutes les fonctionnalités que je voulais sauf une et la voici :

Sur la feuille de devis je voudrais ajouter dans une cellule une liste déroulante avec une saisie semi automatique c'est-à-dire que, quand je rentre quelques caractère (comme par exemple javel) il ne m'affiche que les produits portant le mot "JAVEL" dedans.

J'ai en partie réussi cette liste déroulante. Quand je rentre par exemple Verre il m'affiche bel bien tous les article qui commence par verre et c'est à partir de la que viens me problème.

En effet la liste déroulante automatique que j'ai faite ne prend en compte que le premier mot qui est dans le nom de l'article.

Pour donner un exemple concret j'ai un article qui se nomme "CRUCHONS DE JAVEL", dans ma liste Si je tape "cru" il va me trouver "CRUCHONS DE JAVEL" mais si je tape "javel" il ne me trouve aucun produit.

Pour ma liste déroulante j'ai utiliser la méthode suivante :

  • J'ai fait une première formule nommé "f_desi" pour ma base de données : =DECALER(p_produit;0;0;NBVAL(l_produit);1)
    *p_produit est le premier produit de tout la liste
    *l_produit contient la colonne contenant la totalité des produits
  • Pour ma liste avec validation de données j'ai mis la source suivante : =SI(J26<>"";DECALER(f_desi;EQUIV(J26&"*";f_desi;0)-1;;NB.SI(f_desi;J26&"*");1);f_desi)

J’espère avoir été suffisamment explicite et aimerais savoir quelqu'un aurait une astuce pour palier à mon problème car pour le moment je suis vraiment bloqué.

Je vous remercie d'avance pour temps que vous allez m'accorder

PS: Je ne peux pas mettre à disposition le fichier xls car les tarifs de ma boites sont dessus et je sais pas su je peux les dévoilé comme ça #Sorry

capture 3 capture 2 capture

Bonsoir,

En effet la liste déroulante automatique que j'ai faite ne prend en compte que le premier mot qui est dans le nom de l'article

Pour ma liste avec validation de données j'ai mis la source suivante : =SI(J26<>"";DECALER(f_desi;EQUIV(J26&"*";f_desi;0)-1;;NB.SI(f_desi;J26&"*");1);f_desi)

As-tu essayé de rajouter un préfixe de recherche "*" avant les J26 de ta formule ?

elle deviendrait : SI(J26<>"";DECALER(f_desi;EQUIV("*"&J26&"*";f_desi;0)-1;;NB.SI(f_desi;"*"&J26&"*");1);f_desi)

en tapant "jav", tu aurais tous les items contenant ce texte

Ce principe fonctionne aussi sans la formule "f_desi", en rapport direct avec l'ensemble d'inventaire et 1 cellule de recherche.

Bonne suite

Cordialement

Je te remercie pour ta réponse clair et rapide ton conseil à effectivement réglé mon problème <3

Au finale, il ne prend pas tous les produits de ma base de données, il va récupérer un seul article sur trois.

J'ai pu me mettre d'accord avec ma boite pour publié le fichier (j'ai juste mis une ancienne bdd qui change juste niveau des tarifs )

De plus, dans la section Référence(en dessous de recherche), j'ai tenté d'afficher la référence du produit en lien avec le produit sélectionné à l'aide d'une rechercheV j'ai une erreur du à la type de valeur (si une âme charitable pourrais me dépanner sur ce coup là aussi )

Encore merci d'avance pour votre implication sur ce petit projet

capture 6 capture 7 capture 8 capture 9 capture d ecran 19

Bonjour,

Le principe ne fonctionne correctement que...

si les items concernés par le texte saisi sont SUCCESSIFS dans la Base de données, sans espace entre eux.

Pour toute autre situation, il convient de changer le principe

soit par macro, soit par formule et liste intermédiaire sur le concept suivant :

Bonne suite

Cordialement

Merci je vais essayer cette méthode

hello

on m avait filé pas mal de solution vraiment sympa il y a quelques mois si ca peut t aider:

https://forum.excel-pratique.com/viewtopic.php?f=2&t=106093

Merci beaucoup je regarde tout ça

Bonjour,

Un exemple de saisie intuitive type Google

http://boisgontierjacques.free.fr/fichiers/DonneesValidation/DVSaisieIntuitiveComboBox.xls

Boisgontier

Merçi, j'avais déjà vu ce fichier mais malheureusement, dans la section de recherche il ne prend en compte que les premiers caractères du premier mot inscrit dans la base de donnée

Par contre la solution que ma proposer Axion me correspond bel est bien, j'ai juste un peu de mal à l'adapter à mon fichier

Bonjour,

Le principe ne fonctionne correctement que...

si les items concernés par le texte saisi sont SUCCESSIFS dans la Base de données, sans espace entre eux.

Pour toute autre situation, il convient de changer le principe

soit par macro, soit par formule et liste intermédiaire sur le concept suivant :

Bonne suite

Cordialement

Bonsoir,,

>il ne prend en compte que les premiers caractères du premier mot inscrit dans la base de donnée

Il suffit de remplacer tmp = UCase(Me.ComboBox1) & "*" par tmp = "*"& UCase(Me.ComboBox1) & "*"

On peut avoir une recherche intuitive multi-mots:

http://boisgontierjacques.free.fr/fichiers/Formulaire/Liste_deroulante_intuitive_multi_criteresV2.xls

Dim Choix1()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect([B6:B25], Target) Is Nothing And Target.Count = 1 Then
    Set f = Sheets("bd")
    Set Rng = f.Range("A2:A" & f.[A65000].End(xlUp).Row)
    Choix1 = Application.Transpose(Rng)
    Me.ComboBox1.List = Choix1
    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
  Else
    Me.ComboBox1.Visible = False
  End If
End Sub

Private Sub ComboBox1_Change()
 If Me.ComboBox1 <> "" Then
     mots = Split(Trim(Me.ComboBox1), " ")
     Tbl = Choix1
     For i = LBound(mots) To UBound(mots)
       Tbl = Filter(Tbl, mots(i), True, vbTextCompare)
     Next i
     Me.ComboBox1.List = Tbl
     Me.ComboBox1.DropDown
 End If
End Sub

Private Sub ComboBox1_click()
   ActiveCell.Value = Me.ComboBox1
End Sub

Boisgontier

Rechercher des sujets similaires à "amelioration liste deroulante saisie semi automatique"