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 :

Saisie dans Combobox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Par défaut Saisie dans Combobox
    Bonjour tout le monde

    J'avais une question concernant les items dans une combobox, quand on commence à écrire dans la combobox.

    Par exemple j'ai une combobox qui contient les noms complets des usagers.

    Exemple de nom et prénom : Anaud Cédric

    Quand je commence à écrire correctement le nom d'une personne (ex: An…) la combobox filtre automatiquement comme ci-dessous :

    Nom : Capture.JPG
Affichages : 651
Taille : 13,7 Ko

    Mais si je commence par écrire le prénom de la personne en premier (ex : Céd…), la combobox ne réagit pas.

    Y a t'il un moyen que la combobox puisse filtrer peu importe les caractères qu'on rentre?


    Merci beaucoup!

  2. #2
    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,

    Ca s'appelle la recherche intuitive. Faire une recherche dans Google (recherche intuitive excel combobox)

    Exemple en PJ

    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
    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
    Autre exemple:

    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
    Dim a()
    Private Sub UserForm_Initialize()
      Set f = Sheets("feuil1")
      a = Application.Transpose(f.Range("A2:A" & f.[A65000].End(xlUp).Row).Value)
      Me.Combobox1.List = a
    End Sub
     
    Private Sub ComboBox1_Change()
     If Me.Combobox1.ListIndex = -1 Then
       Me.Combobox1.List = Filter(a, Me.Combobox1.Text, True, vbTextCompare)
       Me.Combobox1.DropDown
      End If
    End Sub
     
    Private Sub ComboBox1_Click()
      Me.TextBox1 = Me.Combobox1
    End Sub

    Boisgontier
    Fichiers attachés Fichiers attachés

  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
    bonjour jacques
    j'ajoute l'evenement dropbuttonclick dans le quel je remet la liste complete

    on a ainsi les deux mode d'exploitation de la combobox (recherche intuitive/selection manuelle dans liste complete )


    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
    Dim tablo()
    Private Sub ComboBox1_DropButtonClick()
    With ComboBox1: .List = tablo: .DropDown: End With
    End Sub
    '
    Private Sub UserForm_Initialize()
        tablo = Application.Transpose(Range("A1:A10").Value)
        Me.ComboBox1.List = tablo
    End Sub
    '
    Private Sub ComboBox1_Change()
        With ComboBox1
            If .ListIndex = -1 And IsError(Application.Match(.Value, tablo, 0)) Then
                .List = Filter(tablo, .Text, True, vbTextCompare)
                .DropDown
            End If
        End With
    End Sub
    EDIT:
    j'ajouterais aussi que sauf erreur de ma part!!! le test iserror sur match n'est pas necessaire dans le sens ou le le match demande l'expression complete pour matcher
    donc tant qu'une expression tapée ne correspond pas a un element entier de l'array le match sera toujours en error (il es donc inutile )
    et comme le
    matchentry est en mode 2 !!! le test listindex est inutile aussi (j'ai testé)
    ca n'empeche pas le mode selection manuelle dans liste complete(j'ai testé!!)puisque la selection va donner un seul item dans le tableau filtré
    et comme je remet la liste complete avec le dropbuttonclick j'ai toujours ma liste complete dispo dans la combo


    je te propose de tester toi meme
    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
     
    Dim tablo()
    '
    'je remet la liste complete au dropbuttonclik pour une eventuelle selection manuelle
    Private Sub ComboBox1_DropButtonClick()
        With ComboBox1: .List = tablo:: End With
    End Sub
    '
    'remplissage de la variable tablo
    'injection de la variable tableau dans la combobox
    Private Sub UserForm_Initialize()
        tablo = Application.Transpose(Range("A1:A10").Value)
        With Me.ComboBox1: .MatchEntry = 2: .List = tablo: End With
    End Sub
    '
    'on filtre quand le value de la combobox change
    Private Sub ComboBox1_Change()
        With ComboBox1
            .List = Filter(tablo, .Text, True, vbTextCompare)
            .DropDown
        End With
    End Sub
    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 confirmé
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Par défaut merci
    Ça marche parfaitement.

    Merci les amis!


    Comment faire pour éliminer les doublons dans les items de la combobox

    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
     
     
    Private Sub UserForm_Initialize()
     
    Sheets("DEMANDES").Select
     
        dossier = Application.Transpose(Range("AK2:AK65536").Value)
        Me.cbo_dossier.List = dossier
     
     
    cbo_dossier.Value = ""
    INDEX_DEMANDE.Value = ""
     
     
     
    End Sub
     
    Private Sub cbo_dossier_DropButtonClick()
     
        With cbo_dossier: .List = dossier: .DropDown: End With
     
    End Sub
     
     
    Private Sub cbo_dossier_Change()
     
     
      With cbo_dossier
            If .ListIndex = -1 And IsError(Application.Match(.Value, dossier, 0)) Then
                .List = Filter(dossier, .Text, True, vbTextCompare)
                .DropDown
            End If
      End With
     
    end sub

    Mon ancien code qui me permettait de le faire est celui ci :

    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
     
     
    Private Sub UserForm_Initialize()
     
     
    Dim I As Integer
    For I = 2 To Sheets("DEMANDES").Range("AK65536").End(xlUp).Row
      cbo_dossier = Sheets("DEMANDES").Range("AK" & I)
      If cbo_dossier.ListIndex = -1 Then cbo_dossier.AddItem Sheets("DEMANDES").Range("AK" & I)
    Next I
     
    cbo_dossier.Value = ""
     
     
     
    End Sub



    Merci encore!

  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
    bonsoir siramane

    fait moi plaisir teste ca

    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
    'model patricktoulon
    Dim tablo()
    '
    'je remet la liste complete au dropbuttonclik pour une eventuelle selection manuelle
    Private Sub ComboBox1_DropButtonClick()
        With ComboBox1: .List = tablo:: End With
    End Sub
    '
    'remplissage de la variable tablo
    'injection de la variable tableau dans la combobox
    Private Sub UserForm_Initialize()
        tablo = Application.Transpose(Range("A1:A15").Value)
        With Me.ComboBox1: .MatchEntry = 2: .List = tablo: End With
    End Sub
    '
    'on filtre quand le value de la combobox change
    Private Sub ComboBox1_Change()
        Dim dico As Object, tabl, i&
        With ComboBox1
            If .ListIndex = -1 Then
                Set dico = CreateObject("scripting.dictionary")
                tabl = Filter(tablo, .Text, True, vbTextCompare)
                For i = 0 To UBound(tabl): dico(tabl(i)) = "": Next
                .List = dico.keys
            End If
            .DropDown
        End With
    End Sub
    Nom : demo2.gif
Affichages : 719
Taille : 144,9 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 confirmé
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Par défaut merci
    Franchement Patrick,

    Je ne saurai comment te remercier.

    Ça marche! Impeccable

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 21/09/2018, 10h05
  2. [XL-2007] Saisie dans combobox
    Par flo1411 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/03/2013, 20h24
  3. [XL-2003] Autoriser une nouvelle saisie dans Combobox
    Par mikadoo57 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/01/2013, 22h24
  4. [XL-2007] Controle de saisie dans combobox
    Par Gestionnaire_rh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/04/2011, 15h33
  5. pre-saisie dans combobox ou textbox
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/03/2008, 18h21

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