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 :

Conserver index d'une combobox [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 240
    Par défaut Conserver index d'une combobox
    Bonjour à tous,

    Dans un userform j'ai créé une combobox qui a pour source une plage de données contenue dans une feuille. Sur cette combobox j'ai trouvé comment permettre la recherche à la saisie (sans activex)

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Private Sub Userform_Initialize()
        Dim i As Integer
     
        rg = wsClients.Range("liste_clt").value
        With Me.cb_client_existant
            .ColumnCount = 8
            .ColumnWidths = "150;40;25;150;150;150;150;30"
            .ColumnHeads = False
            .List = rg
        End With
     
    Private Sub cb_client_existant_Change()
        Dim sSearch As String
        Dim i, n, nbCol As Integer
     
        ' Si il n'y a pas de clé de recherche
        ' la source de données est rechargées
        If cb_client_existant.value = "" Then
            cb_client_existant.List = wsClients.Range("liste_clt").value
     
        ' Lance la recherche lorsqu'au moins 3 caractères ont été saisie
        ElseIf Len(cb_client_existant.value) >= 3 And Me.cb_client_existant.ListIndex = -1 And IsError(Application.Match(Me.cb_client_existant, Application.Index(rg, , 1), 0)) Then
            ' Déclaration du tableau
            Dim b()
     
            ' Création de la clé de recherche
            sSearch = "*" & UCase(cb_client_existant) & "*"
            n = 0
     
            ' Nombre de colonne à afficher dans la liste déroulante
            nbCol = 8
     
            'Boucle de recherche entre l'index le plus petit
            ' et le plus grand du tableau rg
            For i = LBound(rg, 1) To UBound(rg, 1)
                ' Recherche de tmp dans le tableau rg
                ' rg(i, 1)
                '   i => index du tableau
                '   1 => numéro de colonne où chercher
                If UCase(rg(i, 1)) Like sSearch Then
                    n = n + 1: ReDim Preserve b(1 To nbCol, 1 To n)
                    ' Pour ajouter une colonne à la liste affichée
                    ' ajouter une valeur à b(1, n)
                    ' doit correspondre au nombre définit dans nbCol
                    b(1, n) = rg(i, 1): _
                    b(2, n) = rg(i, 2): _
                    b(3, n) = rg(i, 3): _
                    b(4, n) = rg(i, 4): _
                    b(5, n) = rg(i, 5): _
                    b(6, n) = rg(i, 6): _
                    b(7, n) = rg(i, 7): _
                    b(8, n) = rg(i, 8)
                End If
    ...
            Next i
            If n > 0 Then
                ReDim Preserve b(1 To nbCol, 1 To n + 1)
                Me.cb_client_existant.List = Application.Transpose(b)
                Me.cb_client_existant.RemoveItem n
            End If
            Me.cb_client_existant.DropDown
        Else
            On Error Resume Next
        End If
    End Sub
    Au fur et à mesure de la saisie dans le champ cb_client_existant, la liste s'adapte pour afficher uniquement les lignes correspondant à la recherche, ensuite au clic je récupère le numéro d'index de la liste pour faire la correspondance entre cet index et le numéro de ligne correspondant dans la source.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub cb_client_existant_Click()
     
        MsgBox (cb_client_existant.ListIndex)
     
    End Sub
    Mon problème est que l'index de la liste est changé au fur et mesure de l'évolution de la recherche. Ma question est : est-ce qu'il y a un moyen de conserver les index ?

    Merci d'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Tu reconstruit la liste de ta combo-box au fur et à mesure,
    En conséquence, l'index retourné par la combo-box n'as de sens que pour l'état courant de cette dernière, qui n'a rien a voir avec la liste originelle.

    Il te faut faire une correspondance entre la donnée de la combo-box et la liste de originelle pour retrouver l'index qui t'intéresse (celui de la liste originelle).

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tu peux ajouter une colonne portant le numéro de la ligne dans tes données sources

    dans la combobox, tu ajoutes une colonne (tu peux la laisser invisible même) qui te permettra de matcher sur tes données sources

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 240
    Par défaut
    Citation Envoyé par deedolith
    Tu reconstruit la liste de ta combo-box au fur et à mesure,
    En conséquence, l'index retourné par la combo-box n'as de sens que pour l'état courant de cette dernière, qui n'a rien a voir avec la liste originelle.

    Il te faut faire une correspondance entre la donnée de la combo-box et la liste de originelle pour retrouver l'index qui t'intéresse (celui de la liste originelle).
    C'est bien ce qui me semblais, mais je me suis que peut être par chance il y a un paramètre magique dans Redim


    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    tu peux ajouter une colonne portant le numéro de la ligne dans tes données sources

    dans la combobox, tu ajoutes une colonne (tu peux la laisser invisible même) qui te permettra de matcher sur tes données sources
    Après avoir continué mes recherches, j'en arrive à la même conclusion et cela sera probablement le plus simple à faire.

    Merci à vous pour vos infos.

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

Discussions similaires

  1. [XL-2010] Definir l'index d'une combobox comme une variable
    Par TonyRc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2013, 10h55
  2. [MySQL] Index d'une Combobox
    Par Tanoak_LaCapuche dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/06/2012, 12h05
  3. [XL-2003] Conserver valeurs d'une combobox
    Par Hokutoki dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/03/2011, 08h02
  4. Choisir l'index d'une combobox
    Par tedori dans le forum PyQt
    Réponses: 2
    Dernier message: 13/10/2009, 13h20
  5. Connaitre l' Index d'une combobox
    Par auver dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/06/2006, 12h14

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