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 :

VBA: Modification d'une liste combobox


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Commercial
    Inscrit en
    Janvier 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Commercial
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut VBA: Modification d'une liste combobox
    Bonjour à tous,

    Voici mon souci:
    Je travaille sur VBA//Excel pour une base de données de clients.
    J'ai besoin d'un Userform avec une combobox.
    Mon but est d'aider l'utilisateur à la saisie de la façon suivante:

    A l'initialisation du form, la liste de la combobox ne comprend aucun item.
    La liste doit se créer dynamiquement en fonction de ce que rentre l'utilisateur dans la partie "text" de la combobox.

    Ex: si l'utilisateur commence a rentrer la lettre "b", automatiquement ma combo va dérouler son menu et afficher uniquement les clients dont la lettre "b" est comprise dans le nom.

    J'ai déjà construit ma Sub, et elle marche.
    Seulement je suis obligé (je crois) la placer dans l'évenement "Change" (cf code ci-dessous)

    Le GROS problème, c'est que les méthodes "List","AddItem" et "RemoveItem" déclenchent également l'évenement "Change". Or je dois en utiliser au moins une pour modifier la liste. Ce qui me cause une erreur vu que ma Sub est déjà dans le même évenement: ça fait tourner en rond!!

    Si une bonne âme peut m'aider, je lui serais mille fois reconnaissant!!
    Merci d'avance.

    <config>Windows 7 / Firefox 8.0</config>

    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
    Private Sub CBNomCtc_Change()
     
    i = 0
    EntreeNom = CBNomCtc.Text
    Nblignes = Sheets("BDD Contact").Range("A65536").End(xlUp).Row + 1
     
    'Recherche de correspondance entre le Text de la combo et la base de données de clients
    With Sheets("BDD Contact").Range("D2:D" & Nblignes)
    Set c = .Find(EntreeNom, LookIn:=xlValues)
    Set Plage = Nothing
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                Set a = c.Offset(columnoffset:=-2)
                If a.Value = NumSte Then
                If Not Plage Is Nothing Then
                Set Plage = Application.Union(Plage, c)
     
                Else
                Set Plage = c
                End If
                End If
             Set c = .FindNext(c)
             Loop While Not c Is Nothing And c.Address <> firstAddress
     
    'Traitement correspondance
    If Not Plage Is Nothing Then
        ReDim Tab1(1 To Plage.Count, 1)
     
    For Each Cell In Plage
        i = i + 1
        Tab1(i, 0) = Cell
    Next
     
    'Attribution de la liste (et c'est là que ça coince!!!)
    CBNomCtc.List = Tab1
     
    'Classement par ordre alphabétique
    For i = LBound(CBNomCtc.List, 1) To UBound(CBNomCtc.List, 1) - 1
    For j = i + 1 To UBound(CBNomCtc.List, 1)
    If CBNomCtc.List(i, 0) > CBNomCtc.List(j, 0) Then
    a = CBNomCtc.List(i, 0)
    b = CBNomCtc.List(i, 1)
    CBNomCtc.List(i, 0) = CBNomCtc.List(j, 0)
    CBNomCtc.List(i, 1) = CBNomCtc.List(j, 1)
    CBNomCtc.List(j, 0) = a
    CBNomCtc.List(j, 1) = b
    End If
    Next
    Next
     
    End If

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Essaie comme ceci. Dans un module standard, mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Teste As Boolean
    Dans ta macro, mets en tête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CBNomCtc_Change()
    If Teste = True Then
        Teste = False
        Exit Sub
    End If
    et avant la ligne fatale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'Attribution de la liste (et c'est là que ça coince!!!)
    Teste = True
    CBNomCtc.List = Tab1
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

Discussions similaires

  1. Réponses: 15
    Dernier message: 21/11/2006, 10h13
  2. [VBA-E] Protéger une liste déroulante
    Par nattyman dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/08/2006, 16h52
  3. VBA : modification d'une entrée dans une table
    Par Thibaut_Dupont dans le forum Access
    Réponses: 6
    Dernier message: 13/07/2006, 15h24
  4. modification d'une liste déroulante
    Par julio02200 dans le forum Access
    Réponses: 32
    Dernier message: 23/06/2006, 15h50
  5. [VBA-E] Manipuler une liste de Validation
    Par Ptit Dark dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/06/2006, 16h28

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