IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Autocomplete Textbox ou Combobox ActiveX


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut Autocomplete Textbox ou Combobox ActiveX
    Bonjour à tous,

    Je cherche à créer une liste d'autocomplétion sur un control ActiveX Textbox ou Combobox.

    L'idée, c'est que l'on commence à saisir, une liste apparais sous le control et s'affine automatiquement au fil de la saisie.

    Je suis parti dans l'idée d'une Textbox avec un menu CommandBar Popup.
    Ca fonctionne à ceci prêt qu'a l'affichage le Popup est modal et bloque l'avancement de la saisie dans la Textbox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub txtRepere_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        popup txtRepere
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Function getAutocompleteValues(search As String) As String()
        Dim row As Range
     
        Dim values(7) As String
        Dim nbValues As Integer
     
        For Each row In Range("_456")
            If UCase(Left(row(0, 4), Len(search))) = UCase(search) Then
                values(nbValues) = row(0, 4) & " - " & row(0, 5)
                nbValues = nbValues + 1
            End If
     
            If nbValues > 7 Then Exit For
        Next
     
        getAutocompleteValues = values
    End Function
     
    Sub popup(control As Variant)
        Dim Barre As CommandBar
        Dim sheet As Worksheet
        Dim txtRepere As OLEObject
     
        Set sheet = ActiveSheet
        Set txtRepere = sheet.OLEObjects("txtRepere")
     
        On Error Resume Next
        CommandBars("autoComplete").Delete
     
        Set Barre = CommandBars.Add("autoComplete", msoBarPopup, False, True)
     
        For Each Value In getAutocompleteValues(txtRepere.Object.Value)
            With Barre.Controls.Add(msoControlButton, , , , True)
                .Caption = Value
                '.FaceId = 326
                .OnAction = "autoCompleteChoice"
            End With
        Next
     
        Dim PosX As Single, PosY As Single
        PosX = control.Left - 15
        PosY = control.Top + control.Height + 15 + Barre.Height
        Application.CommandBars("autoComplete").ShowPopup PosX, PosY
    End Sub
    Sinon l'idée est la et ça fonctionne comme je le souhaite, alors déjà, y a t'il un moyen de ne pas rendre le Popup modal ?

    Sinon idée numéro 2, utiliser une Combobox et vider et remplir la liste au fur et a mesure de la saisie.
    Mais alors la c'est la cata !
    Déjà parce que quand on saisi la Combobox présélectionne une valeur et ça malgré le passage de AutoWordSelect à False
    Et ensuite parce que le vidage et le remplissage produise un affichage bizarre de la liste, même en faisant un Dropdown avant vidage et après remplissage pour le rafraîchir.
    Nom : Animation.gif
Affichages : 3132
Taille : 157,4 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        'ComboBox1.Clear
     
        ComboBox1.DropDown
     
        Do While ComboBox1.ListCount > 0
            ComboBox1.RemoveItem (0)
        Loop
     
        For Each Value In getAutocompleteValues(ComboBox1.Value)
            ComboBox1.AddItem Value
        Next
     
        ComboBox1.DropDown
    End Sub
    Qu'en pensez vous ?

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    J'ai trouvé quelque chose de similaire mais avec des formules, ce qui est plutôt pas mal
    Dropdown with Search Suggestion_Final.xls

    Adaptable en VBA uniquement ?

    PS : Suite passage en XLSM ce système fonctionne assez mal en plus

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    il me semble que l'auto complétion est en natif dans la combo ou listbox

    Nom : demoingto64 in-out.gif
Affichages : 3405
Taille : 183,4 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    En fait c'est de l'autocomplétion avec recherche que je veut mettre en place.

    Plus on saisi plus la liste est restreinte pour n'afficher que les résultat qui sont susceptibles de correspondre.

    Un search as you type en fait

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    dans ce cas la c'est encore plus simple

    il te faut une variable tableau pour la source (plage de cellules)
    et voila un exemple avec une liste box pour que tu vois bien les choix se restreindre jusqu'à arriver au bon item

    prends un fichier vierge met lui un textbox et une listebox

    dans le module met ceci et arrange ta plage en fonction de tes données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub TextBox1_Change()
    With Sheets(1)
    tablo = .Range("A1:A7").Value ' la source des données complete 
    .ListBox1.Clear
    For i = 1 To UBound(tablo)
    If InStr(tablo(i, 1), .TextBox1) > 0 Then
    Sheets(1).ListBox1.Object.AddItem tablo(i, 1)
    End If
    Next
    End With
    End Sub
    et voila le tour est joué
    Nom : demoingto64 in-out.gif
Affichages : 3278
Taille : 211,3 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,


    Qq exemples avec vraie saisie intuiive type Google

    Pour en savoir plus faire une recherche sur Google avec : recherche intuitive combobox

    Boisgontier
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer la couleur des TextBox et Combobox dans un USF
    Par olivepao dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 05/01/2009, 21h41
  2. Textbox vs Combobox avec Textcolumn
    Par Jeyjey1 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 30/10/2008, 09h42
  3. [WPF] textbox ou combobox dans un listview
    Par modafine dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 14/08/2008, 10h37
  4. comment vider plusieurs textbox et combobox dans un formilaire et Plus
    Par r.mehdi dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 05/05/2008, 15h52
  5. chaines textbox vers combobox
    Par rober dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/10/2006, 08h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo