Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2012, 17h31   #1
Invité de passage
 
Homme
Commercial
Inscription : 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 : 0
Points : 0
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 :
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
Reveolte est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 18h42   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Essaie comme ceci. Dans un module standard, mets :

Code :
Public Teste As Boolean
Dans ta macro, mets en tête :

Code :
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 :
1
2
3
'Attribution de la liste (et c'est là que ça coince!!!)
Teste = True
CBNomCtc.List = Tab1
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h01.


 
 
 
 
Partenaires

Hébergement Web