Userform: Recherche plus rapide d'un Combobox

Aragon10

XLDnaute Occasionnel
Bonjour,

J'ai créé un combobox qui contient une liste des clients. Le problème se pose pendant ma recherche. par exemple dans le cas ou le client s'appelle " STE DE TRANSPORT ET DE SERVICE" et je veux rechercher cette relation parmi plusieurs. le combobox facilite notre recherche dans le cas ou je tape "STE" mais pas lorsque je tape "TRANSPORT" ou "SERVICE". y'a t-il un moyen qui facilite la recherche au sein du combobox (afficher le client en tapant n'importe quel mot qui le compose) ?

Merci pour votre réponse.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Userform: Recherche plus rapide d'un Combobox

Bonsoir,

Saisie intuitive (type Google) dans un ComboBox d'un Formulaire
(Frapper les lettres contenues dans l'item cherché)

Code:
Dim a()
Private Sub UserForm_Initialize()
  a = Application.Transpose([liste])
  Me.ComboBox1.List = a
End Sub

Private Sub ComboBox1_Change()
 If Me.ComboBox1.ListIndex = -1 And IsError(Application.Match(Me.ComboBox1, a, 0)) Then
   Me.ComboBox1.List = Filter(a, Me.ComboBox1.Text, True, vbTextCompare)
   Me.ComboBox1.DropDown
  Else
    ActiveCell = Application.Proper(Me.ComboBox1)
    Unload Me
  End If
End Sub

http://boisgontierjacques.free.fr/fichiers/DonneesValidation/ListeIntuitiveFormulaireFilter.xls
http://boisgontierjacques.free.fr/fichiers/DonneesValidation/DVComboBoxIntuitif_lettresContenues.xls

Saisie_intuitive.gif

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

Autres exemples à plusieurs niveaux:


Saisie intuitive tableur et formulaire directement dans un ComboBox

JB
Formation Excel VBA JB
 

Pièces jointes

  • ListeIntuitiveFormulaireFilterInfo.xls
    96 KB · Affichages: 390
Dernière édition:

job75

XLDnaute Barbatruc
Re : Userform: Recherche plus rapide d'un Combobox

Bonjour Aragon10, Bernard, JB,

C'est un peu hors sujet mais voici une solution avec une TextBox et une ListBox.

A+
 

Pièces jointes

  • Recherche(1).xls
    40 KB · Affichages: 254
  • Recherche(1).xls
    40 KB · Affichages: 214
  • Recherche(1).xls
    40 KB · Affichages: 261

Aragon10

XLDnaute Occasionnel
Re : Userform: Recherche plus rapide d'un Combobox

Merci pour votre réponse.

Dans le cas ou on a un combobox lié à plusieurs Textbox (disons 4) .par exemple si on choisit le item dans le combo il affiche les informations dans chacunes des TEXTBOX . Comment activer la saisie intuitive dans ce cas la au sein du combobox ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Userform: Recherche plus rapide d'un Combobox

Bonsoir.

Au lieu de TextBox vous ne pourriez pas mettre aussi des ComboBox pour les autres infos ? (si toutefois il faut pouvoir rechercher dessus, évidemment)
Et aussi dissocier en 2 combobox un pour le nom du client et un autre pour tous les mots trouvés dans tous les noms de clients.
 

Dranreb

XLDnaute Barbatruc
Re : Userform: Recherche plus rapide d'un Combobox

Pour moi une saisie dans un ComboBox est toujours intuitive si sa liste est classée: on peut taper jusqu'à ce que le mot existant recherché est affiché, et si on ne sait plus quoi taper (rarement), on affiche la liste positionnée à partir du mot retenu momentanément. Avec deux ComboBox vous auriez une telle recherche intuitive pour un mot du nom de client, avec affichage dans l'autre des seuls clients qui le comportent, ou une saisie intuitive du nom du client.
 

Aragon10

XLDnaute Occasionnel
Re : Userform: Recherche plus rapide d'un Combobox

oui c'est pas mal comme solution. j'ai un autre petit problème , ma liste contient des doublons y'a t-il un moyen d'ajouter un code pour ne pas avoir des doublons dans la saisie intuitive du deuxième combobox ?
 

Dranreb

XLDnaute Barbatruc
Re : Userform: Recherche plus rapide d'un Combobox

Si un 2ième critère permet de les départager, qu'il fasse l'objet d'un 3ieme ComboBox, sinon on est réduit à les parcourir positionnellement par des boutons toupies, ou s'il peuvent différer peu et de façon irrégulière, tout afficher dans une ListBox multi colonnes. Il n'y a de toute façon jamais de doublon dans les listes de mes ComboBox liées.
 
Dernière édition:

Aragon10

XLDnaute Occasionnel
Re : Userform: Recherche plus rapide d'un Combobox

Merci beaucoup pour votre suivi.

juste je veux insister sur l'ajout d'un truc pour le code ci-dessous afin qu'il ne tient pas compte des doublons si c'est possible:

Code:
Dim a()
Private Sub UserForm_Initialize()
  a = Application.Transpose([liste])
  Me.ComboBox1.List = a
End Sub

Private Sub ComboBox1_Change()
 If Me.ComboBox1.ListIndex = -1 And IsError(Application.Match(Me.ComboBox1, a, 0)) Then
   Me.ComboBox1.List = Filter(a, Me.ComboBox1.Text, True, vbTextCompare)
   Me.ComboBox1.DropDown
  Else
    ActiveCell = Application.Proper(Me.ComboBox1)
    Unload Me
  End If
End Sub

Merci.
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Userform: Recherche plus rapide d'un Combobox

Voici 4 infos associées

Code:
Dim a()
Private Sub UserForm_Initialize()
  a = Application.Transpose([liste])
  Me.ComboBox1.List = a
End Sub

Private Sub ComboBox1_Change()
 If Me.ComboBox1.ListIndex = -1 And IsError(Application.Match(Me.ComboBox1, a, 0)) Then
   Me.ComboBox1.List = Filter(a, Me.ComboBox1.Text, True, vbTextCompare)
   Me.ComboBox1.DropDown
   Me.TextBox1 = ""
  Else
    p = Application.Match(Me.ComboBox1, a, 0)
    For i = 1 To 4
     Me("textbox" & i) = Range("info")(p).Offset(, i - 1)
    Next i
  End If
End Sub

Elimine les doublons (Argentine qui est 3 fois dans la BD n'apparaît qu'une fois dans le ComboBox)

filtre.gif

Code:
Dim a()
Private Sub UserForm_Initialize()
  a = Application.Transpose([liste])
  Me.ComboBox1.List = a
End Sub

Private Sub ComboBox1_Change()
If Me.ComboBox1.ListIndex = -1 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
 Else
   p = Application.Match(Me.ComboBox1, a, 0)
   For i = 1 To 4
     Me("textbox" & i) = Range("info")(p).Offset(, i - 1)
   Next i
 End If
End Sub

Avec un fichier exemple, il serait + simple de répondre à la question qui est floue.


S'agit-il de choisir parmi les doublons?
Ceci est un exemple de recherche intuitive en cascade dans 2 combobox (département/ville)
-Choix du département (doublons)
-Choix de la ville dans le département choisi.

La recherche se fait sur les premiers caractères (il suffit de changer tmp = UCase(Me.ComboBox1) & "*" par tmp = "*" & UCase(Me.ComboBox1) & "*" pour obtenir une recherche sur le contenu)

http://boisgontierjacques.free.fr/f...ConditionSaisieIntuitiveFormCascade2Choix.xls

Un autre exemple de 2 comboboxs en cascade:Choix du Nom puis du Prénom ).
Seul le premier combobox est intuitif

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



JB
 

Pièces jointes

  • ListeIntuitiveFormulaireFilterInfo2.xls
    113 KB · Affichages: 199
  • ListeIntuitiveFormulaireFilterInfo3.xls
    133.5 KB · Affichages: 207
  • filtre.gif
    filtre.gif
    18.3 KB · Affichages: 192
  • filtre.gif
    filtre.gif
    18.3 KB · Affichages: 181
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Userform: Recherche plus rapide d'un Combobox

juste je veux insister sur l'ajout d'un truc pour le code ci-dessous afin qu'il ne tient pas compte des doublons si c'est possible:
Vous voulez donc laisser tomber complètement mon histoire de ComboBox liées de façon automatique par des modules de service extérieurs ?
 

job75

XLDnaute Barbatruc
Re : Userform: Recherche plus rapide d'un Combobox

Bonjour Aragon10, Bernard, JB, le forum,

Toujours avec ma ListBox, cette fois avec le filtre avancé :

Code:
Sub Recherche()
Application.ScreenUpdating = False
With Feuil1
  .[B2] = "=COUNTIF(A2,""*" & TextBox1 & "*"")*COUNTIF(A2,""*" & TextBox2 & _
  "*"")*COUNTIF(A2,""*" & TextBox3 & "*"")*COUNTIF(A2,""*" & TextBox4 & "*"")"
  .[A:A].AdvancedFilter xlFilterInPlace, Feuil1.[B1:B2]
  Feuil2.[A:A] = ""
  .[A:A].Copy Feuil2.[A1]
  Feuil2.Rows(1).Delete
  .[A:A].AdvancedFilter xlFilterInPlace, ""
  .[B2] = ""
End With
'au moins 2 éléments pour définir la liste
ListBox1.List = Feuil2.UsedRange.Resize(, 2).Value
Application.ScreenUpdating = True
End Sub
Fichier (2).

Bonne journée.
 

Pièces jointes

  • Recherche(2).xls
    50.5 KB · Affichages: 137
  • Recherche(2).xls
    50.5 KB · Affichages: 158
  • Recherche(2).xls
    50.5 KB · Affichages: 202

Discussions similaires

Statistiques des forums

Discussions
312 181
Messages
2 085 997
Membres
103 083
dernier inscrit
SALAHBEN