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 :

Combobox: Recherche rapide


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Points : 53
    Points
    53
    Par défaut Combobox: Recherche rapide
    Bonjour,

    J'ai 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.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Bonjours,
    désolé pas à ma connaissance.

  3. #3
    Membre chevronné
    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
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonsoir,

    Bien sûr que ça existe!

    ça s'appelle saisie intuitive dans un combobox de formulaire
    (Frapper les lettres contenues dans l'item cherché)

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

    Jacques Boisgontier

  4. #4
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    j'ai ajouté une deuxième colonne "Notation"devant la colonne des pays et j'ai ajouté une listbox1 au dessous du combobox1. je voulais au fait pour chaque pays affiché il m'indique la notation relative mais apparemment ça ne marche pas. je suis débutant en VBA et je ne sais pas comment le faire avec cette saisie intuitive ci dessous mon code:

    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 a()
    Private Sub UserForm_Initialize()
      a = Application.Transpose([liste])
      Me.ComboBox1.List = a
    End Sub
     
     
    Private Sub ComboBox1_Change()
     
    Dim num_ligne As Integer
    num_ligne = ComboBox1.ListIndex + 2
     
     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)
      End If
     
    ListBox1.AddItem Sheets("BD").Cells(num_ligne, 2)
     
    End Sub
    Merci .

  5. #5
    Membre chevronné
    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
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    Voir 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    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)
        Me.TextBox1 = Range("info")(p)
      End If
    End Sub
     
    Private Sub CommandButton1_Click()
      tmp = Me.TextBox1
      If IsNumeric(tmp) Then tmp = CDbl(tmp)
      ActiveCell = Me.ComboBox1
      ActiveCell.Offset(, 1) = tmp
      Unload Me
    End Sub

    Jacques Boisgontier
    Fichiers attachés Fichiers attachés

  6. #6
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Points : 53
    Points
    53
    Par défaut
    Merci beaucoup ça marche très bien.

    j'ai encore une question si ça ne vous dérange pas:

    j'ai pas su comment décortiquer ton code et savoir comment il fait l'extraction à partir de la deuxième feuille "BD"(colonne A) sans qu'il y'a une indication claire sur le code. Désolé je suis débutant et je veux rajouter d'autres colonnes et d'autres combobox mais je ne savais pas ou changer la plage de donnée sur le code.

    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
    Merci pour votre précieuse réponse.

  7. #7
    Membre chevronné
    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
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    En PJ, un scénario qui semble correspondre

    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
     
    Option Compare Text
    Dim f, ligneEnreg, choix1()
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      choix1 = Application.Transpose(f.Range("A2:A" & f.[a65000].End(xlUp).Row).Value)
      Me.ChoixSociete.List = choix1
      Me.ChoixSociete.SetFocus
    End Sub
     
    Private Sub ChoixSociete_Change()
      If Me.ChoixSociete.ListIndex = -1 And IsError(Application.Match(Me.ChoixSociete, choix1, 0)) Then
       Me.ChoixSociete.List = Filter(choix1, Me.ChoixSociete.Text, True, vbTextCompare)
       Me.ChoixSociete.DropDown
      Else
        ChoixSociete_click
      End If
    End Sub
    Jacques Boisgontier
    Fichiers attachés Fichiers attachés

  8. #8
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Points : 53
    Points
    53
    Par défaut
    Bonjour cher boisgontierjacques,

    Je vous remercie infiniment ;-)

  9. #9
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Points : 53
    Points
    53
    Par défaut
    Re Bonjour,

    Après avoir testé votre code du 2ème fichier qui tient compte des doublons, il s'est avéré que lorsque j'ai tapé "STE UNTEL XXX" qui existe pour deux Gérants différents, le contenu du textbox relatif à la Gérance ne changera pas et n’affiche que NICOLAS même si je tape sur le 2ème Nom de société qui concerne Brigitte !

    Merci pour votre réponse.

  10. #10
    Membre chevronné
    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
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour

    Voir 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
    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
     
    Option Compare Text
    Dim f, ligneEnreg, choix1()
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      choix1 = Application.Transpose(f.Range("A2:A" & f.[a65000].End(xlUp).Row).Value)
      Me.ChoixSociete.List = SansDoublons(choix1)
      ligneEnreg = f.[a65000].End(xlUp).Row + 1
      Me.ChoixSociete.SetFocus
    End Sub
     
    Private Sub ChoixSociete_Change()
      If Me.ChoixSociete.ListIndex = -1 And IsError(Application.Match(Me.ChoixSociete, choix1, 0)) Then
       Me.ChoixSociete.List = Filter(SansDoublons(choix1), Me.ChoixSociete.Text, True, vbTextCompare)
       Me.ChoixSociete.DropDown
      Else
        choixSociete_click
      End If
    End Sub
     
    Private Sub choixSociete_click()
      a = f.Range("A2:B" & f.[B65000].End(xlUp).Row).Value
      Dim b(): ReDim b(1 To UBound(a))
      j = 0
      For i = 1 To UBound(a)
         If a(i, 1) = Me.ChoixSociete Then j = j + 1: b(j) = a(i, 2)
      Next i
      ReDim Preserve b(1 To j)
      Me.ChoixGerant.List = b
      Me.ChoixGerant.SetFocus
      If Val(Application.Version) > 10 Then SendKeys "{f4}"
    End Sub
     
    Private Sub ChoixGerant_click()
     For i = 2 To f.[B65000].End(xlUp).Row
      If f.Cells(i, "a") = Me.ChoixSociete And f.Cells(i, "b") = Me.ChoixGerant Then
        ligneEnreg = i
        For Each c In Me.Frame_Civilite.Controls
         If f.Cells(ligneEnreg, "c") = c.Caption Then c.Value = True
        Next c
        Me.Controls("TextBox1") = f.Cells(ligneEnreg, 1)
        Me.Controls("TextBox2") = f.Cells(ligneEnreg, 2)
        For k = 3 To 6
            Me.Controls("TextBox" & k) = f.Cells(ligneEnreg, k + 1)
          Next k
        End If
      Next i
    End Sub
     
    Function SansDoublons(a())
       Set d = CreateObject("Scripting.Dictionary")
       For Each c In a
          d(c) = ""
       Next c
       b = d.keys
       SansDoublons = b
    End Function

    Jb
    Fichiers attachés Fichiers attachés

  11. #11
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Points : 53
    Points
    53
    Par défaut
    Merci beaucoup boisgontierjacques ;-)

    peut etre que je me suis mal exprimé, ca se complique pour moi avec l'existence de deux combobox. Au fait, je veux garder un seul combobox qui affiche tout les Noms ( y compris les doublons) et si je choisi la première alternative dans le combo "STE UNTEL XXX" il m'affiche toutes les coordonnés de NICOLAS dispatchés dans les textbox et si je choisi la deuxième alternative en doublon dans le combobox "STE UNTEL XXX" il m'affiche toutes les coordonnées de Brigitte !
    je ne veux pas un traitement spécial pour la gérance avec la création d'un deuxième combobox. je veux un traitement égal pour tout les textbox. je ne sais pas si j'étais clair ou pas.

    ci-joint le premier fichier que vous m'avez envoyé:
    Test.xls

    Merci pour votre suivi et désolé pour le dérangement.

  12. #12
    Membre chevronné
    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
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonsoir,

    Pour une ville, il peut y avoir plusieurs gérants

    On recherche la société BERNARD:
    -En frappant BER dans le combobox, on obtient dans un seul combobox la liste des sociétés & gérants contenant BER dans le nom de société.
    -Il suffit de choisir parmi les doublons affichés.

    STE BERNARD PARIS Yann
    SOCIETE BERNARD NICE Zoé
    STE BERNARD ISSY Liliane
    STE BERNARD NICE Nicolas

    Jacques Boisgontier

  13. #13
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Points : 53
    Points
    53
    Par défaut
    Bonsoir,

    vous m'avez pas compris encore une fois. je veux rien changer du fichier initial, je veux que le combobox continu à afficher des doublons sans créer d'autres choses en parallèles. par exemple dans le cas ou mon combobox contient 2 item identiques avec le même nom de société "STE UNTEL XXX" (ci-dessous mon exemple)

    Société Gérant Civilité Date Naissance Salaire Adresse Commune
    STE UNTEL XXX Brigitte Mme 13/12/1945 5000 11,rue des fleurs Paris
    STE UNTEL XXX Nicolas Mr 20/12/1950 3000 11,rue des Cerises Nice

    je veux que le combobox affiche doublement la "STE UNTEL XXX" ( sans ajouter des noms en parallèle comme vous l'avez fait dans votre dernier fichier) et lorsque je clique sur la première proposition dans le combo ("STE UNTEL XXX") il m'affichera dans le textbox 1 "Brigitte", dans le textbox2 sa Date de naissance (13/12/1945), dans le textbox3 son salaire (5000), dans le textbox 4 son adresse (11,rue des fleurs) et la commune dans le dernier textbox. ce même raisonnement s'appliquera si je choisi la 2ème possibilité affiché par le combo qui est la même "STE UNTEL XXX" mais qui correspond à la deuxième ligne et qui affichera dans le textbox 1 "Nicolas", dans le textbox2 sa Date de naissance (20/12/1950), dans le textbox3 son salaire (3000), dans le textbox 4 son adresse et la commune dans le dernier textbox. Test.xlsm

    Désolé encore une fois et Merci.

  14. #14
    Membre chevronné
    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
    Points : 2 156
    Points
    2 156
    Par défaut
    Voir 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
    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
     
    Option Compare Text
    Dim f, ligneEnreg, choix1()
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      choix1 = Application.Transpose(f.Range("A2:A" & f.[a65000].End(xlUp).Row).Value)
      Me.ChoixSociete.List = choix1
      Me.ChoixSociete.SetFocus
    End Sub
     
    Private Sub ChoixSociete_Change()
      If Me.ChoixSociete.ListIndex = -1 And IsError(Application.Match(Me.ChoixSociete, choix1, 0)) Then
       Me.ChoixSociete.List = Filter(choix1, Me.ChoixSociete.Text, True, vbTextCompare)
       Me.ChoixSociete.DropDown
      Else
     
        ChoixSociete_click
      End If
    End Sub
     
    Private Sub ChoixSociete_click()
     poschoisi = Me.ChoixSociete.ListIndex + 1
     'on récupère tous les champs
     n = 0
     For i = 2 To f.[B65000].End(xlUp).Row
      If f.Cells(i, "a") = ChoixSociete Then
        n = n + 1
        If n = poschoisi Then
          ligneEnreg = i
          For Each c In Me.Frame_Civilite.Controls
            If f.Cells(ligneEnreg, "c") = c.Caption Then c.Value = True
          Next c
          Me.Controls("TextBox1") = f.Cells(ligneEnreg, 1)
          Me.Controls("TextBox2") = f.Cells(ligneEnreg, 2)
          For K = 3 To 6
            Me.Controls("TextBox" & K) = f.Cells(ligneEnreg, K + 1)
          Next K
         End If
       End If
      Next i
    End Sub
    Jacques Boisgontier
    Fichiers attachés Fichiers attachés

  15. #15
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Points : 53
    Points
    53
    Par défaut
    Merci de tester votre fichier parce que le problème persiste. si vous choisissez la première composante du combo "STE UNTEL XXX" le textbox2 affiche brigitte avec tout ses coordonnées dans les autres textbox et si j'ouvre de nouveau le combo pour choisir le dernier nom ( qui est aussi "STE UNTEL XXX" mais qui correspond à Nicolas) il m'affiche aucune information de NICOLAS et les donnés restent figées sur brigitte et ses coordonnés !

  16. #16
    Membre chevronné
    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
    Points : 2 156
    Points
    2 156
    Par défaut
    Voir PJ

    Jacques Boisgontier
    Fichiers attachés Fichiers attachés

  17. #17
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Points : 53
    Points
    53
    Par défaut
    le problème persiste ! les textbox restent inchangeables si on défile parmi des doublons .apparemment le Combobox ne fonctionne toujours pas avec les doublons

Discussions similaires

  1. Structure de données pour recherche rapide
    Par socrate dans le forum C
    Réponses: 1
    Dernier message: 18/06/2006, 14h49
  2. Réponses: 7
    Dernier message: 15/02/2006, 11h52
  3. Recherche rapide dans un TDBGrid
    Par Dinytro dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/03/2005, 00h29
  4. Recherche rapide
    Par Pylz dans le forum C++Builder
    Réponses: 14
    Dernier message: 28/02/2005, 13h53
  5. [Kylix] Combobox recherche rapide
    Par litbos dans le forum EDI
    Réponses: 3
    Dernier message: 29/08/2003, 10h13

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