Microsoft 365 Recherche intuitive

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous,
Je vous souhaite une belle journée,

J'ai récupéré une recherche intuitive de notre Jacques Boigontier que je remercie au passage :)

J'ai modifié (incorrigible que je suis) pour adapter à mes besoins.
J'ai un souci que je n'ai pas réussi à résoudre.
Voir photo ci-dessous :
1619703387795.png

Si, par exemple, je recherche "lens", je voudrais qu'il m'affiche, au fur et à mesure de la frappe les communes qui commencent par les lettre saisies.
Or, il m'affiche toutes les communes qui "contiennent les lettres LENS".

Je ne sais pas faire pour modifier le code.
Pourriez-vous m'aider ?

Je joins le fichier,
Avec mes remerciements,
Amicalement,
lionel,
 

Pièces jointes

  • Saisie_intuitive_lio.xlsm
    696.2 KB · Affichages: 28
Solution
Bonsoir Usine à gaz, le forum

J'ai modifié la Sub ComboBox1_Change de ton Userform2 et mis des cases option pour laisser le choix du type de filtre. Les deux types de filtre sont interactifs et tu peux basculer de l'un à l'autre en cours de recherche.
J'ai modifié de la même façon Userform1 et Trouve (le nom n'est pas terrible pour un Userform, en général, on évite de mettre un nom de fonction, méthode ou propriété existant pour un Userform, c'est source de problèmes)

Bien cordialement, @+
VB:
Private Sub ComboBox1_Change()
    [a3] = ""
    If Me.ComboBox1.ListIndex = -1 And IsError(Application.Match(Me.ComboBox1, Choix1, 0)) Then
        If Me.ChoixFiltre1 Then
            Dim Val_Test, Filtre_Txt$
            For Each Val_Test In...

Usine à gaz

XLDnaute Barbatruc
Bonsoir Yeahou,
Merci pour la réponse ça fonctionne très bien :)

J'ai une autre demande si c'est possible ?
Si je prends toujours comme exemple la commune de lens :
L'affichage est
Sans titre1.png
Est-il possible d'avoir cet affichage
Sans titre.png

Déjà merci à toi :)
lionel,
 
Bonsoir Usine à gaz, le forum

J'ai modifié la Sub ComboBox1_Change de ton Userform2 et mis des cases option pour laisser le choix du type de filtre. Les deux types de filtre sont interactifs et tu peux basculer de l'un à l'autre en cours de recherche.
J'ai modifié de la même façon Userform1 et Trouve (le nom n'est pas terrible pour un Userform, en général, on évite de mettre un nom de fonction, méthode ou propriété existant pour un Userform, c'est source de problèmes)

Bien cordialement, @+
VB:
Private Sub ComboBox1_Change()
    [a3] = ""
    If Me.ComboBox1.ListIndex = -1 And IsError(Application.Match(Me.ComboBox1, Choix1, 0)) Then
        If Me.ChoixFiltre1 Then
            Dim Val_Test, Filtre_Txt$
            For Each Val_Test In Choix1
                If UCase(Val_Test) Like UCase(ComboBox1.Value) & "*" Then
                    Filtre_Txt = IIf(Filtre_Txt = "", Val_Test, Filtre_Txt & "_" & Val_Test)
                End If
            Next Val_Test
            Me.ComboBox1.List = Split(Filtre_Txt, "_")
        Else
            Me.ComboBox1.List = Filter(Choix1, Me.ComboBox1.Text, True, vbTextCompare)
        End If
        Me.ComboBox1.DropDown
        Me.TextBox2 = ""
     Else
       Dim Position
       Position = Application.Match(Me.ComboBox1, Choix1, 0)
       Me.TextBox2 = rng.Cells(Position, 1)
       'f.Cells(Position, 1).Select
       [a1].Select
       ActiveWindow.ScrollRow = Selection.Row
     End If
End Sub
 

Pièces jointes

  • Saisie_intuitive_lio.xlsm
    699.4 KB · Affichages: 16
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Bonjour Yeahou, le forum,
Bonne journée à toutes et à tous :)

je viens de mieux regarder et c'est super bien.
Merci d'avoir modifier les 3 UserForm :)

Il reste un petit souci que j'essaie de rectifier sur la recherche "rechercher - atteindre" :
1619764075772.png

Le code n'atteint pas la bonne cellule qui contient la commune sélectionnée.
Encore merci à toi :)
lionel,
 

Usine à gaz

XLDnaute Barbatruc
Bon, j'ai trouvé :
VB:
Private Sub UserForm_Initialize()
  Set f = Sheets(1)
  Set rng = f.Range("A1:A" & f.[A65000].End(xlUp).Row)
  Choix1 = Application.Transpose(rng)
  Me.ComboBox1.List = Choix1
End Sub

avec "Set rng = f.Range("A1:A" & f.[A65000].End(xlUp).Row)", ça fonctionne nickel.

Ma 1ère ligne de recherche commence à la ligne 4. J'ai voulu modifier :
"Set rng = f.Range("A4:A" & f.[A65000].End(xlUp).Row)" et ça ne fonctionne plus.

@+,
lionel,
 
Dernière édition:

Lolote83

XLDnaute Barbatruc
Salut Usine à Gaz, Yeahou,
Le fait d'avoir pris les données non pas de A1:A .... mais A4:A, il y a un décalage de 3
Donc pour que cela fonctionne, il faut aussi un décalage de 3 dans la recherche de position, donc
remplacer Me.TextBox2 = rng.Cells(Position, 1) par Me.TextBox2 = rng.Cells(Position, 1)+3
@+ Lolote83
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous
Je prends en route .....
J'ai un exemple qui était un annuaire , j'ai vidé la liste des N°
Il reste aussi le partage que j'avais mis pour les collègues car on était sur serveur
Sinon : il faut créer un NOM ( liste en A) , affecter la formule DECALER à ce nom
ensuite la sub est toute simple dans la Box, le NOM est repris en variable 'a'
 

Pièces jointes

  • annuaire_mairie_vide.xlsm
    33.8 KB · Affichages: 15

Statistiques des forums

Discussions
315 089
Messages
2 116 099
Membres
112 661
dernier inscrit
ceucri