Liste déroulante selon plusieurs recherches textuelles
Bonjour,
j'ai une liste de produits et jusqu'à présent je sélectionnais les produits en entrant les premiers caractères puis en passant dans une liste déroulante (validation de données). Avec un simple DECALE sur la liste triée.
Il me faut maintenant filtrer sur plusieurs chaînes de caractère du champs ... Par exemple si je veux sélectionner l'un des fauteuils en tissu rouge, je vais taper "faut tiss roug" puis ouvir la list déroulante ..
Comment puis-je faire ça ???
Merci
Benouche
bonjour
de l'abrégé .... faut voir sur piece ; mais cela risque d'etre compliqué ;si il n'y a pas des millions de valeur
donc à voir ....
cordialement
Bonjour Tulipe,
merci pour la réponse. J'ai environ 4000 enregistrements.
Sinon rien de spécial.
mon fichier en PJ. La colonne 'Intitulé' est celle qui m'interesse dans l'onglet N°2.
J'avais mis en place un filtre (onglet 1) pour sélectionner uniquement les intitulé qui commence par ... 'faut' par exemple.
mais il faudrait pouvoir être plus sélectif en entrant plusieurs bout de chaines de caractères...
Je ne vois pas très bien coment utiliser le sommeprod ... qui semble plutot faire des calculs...
Benouche
le fichier en pèce jointe ... troisième onglet dispo pour demo ..
Bonjour,
En faisant une recherche dans GOOGLE, tu trouveras des exemples de saisie intuitive
excel saisie intuitive combobox
Donne la liste des intitulés qui contiennent les lettres frappées
Dim a()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([B11:B30], Target) Is Nothing And Target.Count = 1 Then
a = Application.Transpose(Sheets("BanqueDeDonnees").Range("liste"))
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
Me.ComboBox1.List = Filter(a, Me.ComboBox1.Text, True, vbTextCompare)
Me.ComboBox1.DropDown
End If
ActiveCell.Value = Me.ComboBox1
End Sub
Ceuzin
Merci beaucoup Ceuzin, c'est vraiment pas loin de ce que je cherche.
Il manque seulement la recherche de plusieurs chaînes de caractères... mais pour une seule, ça marche parfaitement.
Au niveau ergonomique c'est aussi satisfaisant.
Seulement j'ai un soucis, c'est que je ne vois pas où l'on doit insérer le code et que j'ai peu d'avoir du mal à le modifier.
C'est bien une macros n'est-ce pas ? Mais je ne la vois pas dans Affichage->Macros . Pourriez-vous me guider ?
Merci encore,
Benouche
Merci beaucoup Ceuzin, c'est vraiment pas loin de ce que je cherche.
Il manque seulement la recherche de plusieurs chaînes de caractères... mais pour une seule, ça marche parfaitement.
Au niveau ergonomique c'est aussi satisfaisant.
Seulement j'ai un soucis, c'est que je ne vois pas où l'on doit insérer le code et que j'ai peu d'avoir du mal à le modifier.
C'est bien une macros n'est-ce pas ? Mais je ne la vois pas dans Affichage->Macros . Pourriez-vous me guider ?
Merci encore,
Benouche
Autre version en PJ
Frapper xxx*yyy*zzz
Dim a()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([B11:B30], Target) Is Nothing And Target.Count = 1 Then
a = Application.Transpose(Sheets("BanqueDeDonnees").Range("liste"))
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
c'est assez génial. Je suis en train de continuer à tester ...
Toutefois il y a une chose qui m'embête, c'est que je comprend pas où est la macro et comment je l'insère sur la cellule en question ...
En tout cas un GRAND MERCI !!!
Benouche
On peut frapper plusieurs mots séparés par un espace
bois blanc tiroir
- Créer un combobox (onglet développeur)
- Propriété MatchEntry à None
- Clic droit sur nom onglet Devis
- Afficher le code
Dim a()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([B11:B30], Target) Is Nothing And Target.Count = 1 Then
a = Application.Transpose(Sheets("BanqueDeDonnees").Range("liste"))
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
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")
clé = UCase("*" & Join(Split(Me.ComboBox1, " "), "*") & "*")
For Each c In a
If UCase(c) Like clé Then d1(c) = ""
Next c
Me.ComboBox1.List = d1.keys
Me.ComboBox1.DropDown
End If
ActiveCell.Value = Me.ComboBox1
End Sub
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.ComboBox1.List = a
Me.ComboBox1.Activate
Me.ComboBox1.DropDown
End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ActiveCell.Offset(1).Select
End Sub
Ceuzin
re; bonjour ceuzin
pour le fun ; sur une maquette confectionnée ( ne pas rigoler)
cordialement
nb) saisir au moins 3 carracteres de chaque pour efficience ;mais .......
Je relance ce sujet car j'ai un soucis.
J'ai besoin de mettre en place cette solution sur Excel 15.15 sur MAC.
Et là .... arrrrrrg !
Il n'y a pas d'onglet développeur sur cette version d'excel pour Mac ...
Quelqu'un aurait une autre solution ?
Merci
Benoit
Bonsoir,
Sur PC, l'onglet Développeur n'apparait pas par Défaut. Il faut aller dans les options.
Dictionary n'existe pas sur Mac
Version PC & MAC
Dim a(),b()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([B6:B25], Target) Is Nothing And Target.Count = 1 Then
a = Application.Transpose(Sheets("BanqueDeDonnees").Range("liste"))
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
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
ReDim b(1 To UBound(a))
clé = UCase("*" & Replace(Me.ComboBox1, " ", "*") & "*")
ligne = 0
For Each c In a
If UCase(c) Like clé Then ligne = ligne + 1: b(ligne) = c
Next c
If ligne > 0 Then
ReDim Preserve b(1 To ligne)
Me.ComboBox1.List = b
Me.ComboBox1.DropDown
End If
End If
ActiveCell.Value = Me.ComboBox1
End Sub
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.ComboBox1.List = a
Me.ComboBox1.Activate
Me.ComboBox1.DropDown
End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ActiveCell.Offset(1).Select
End Sub
Ceuzin