initialiser plusieurs combobox

zepeto

XLDnaute Occasionnel
Bonjour,
je suis sous excel 97 et je réalise une macro possédant un userform sur lequel on retrouve 2 combobox permettant de faire des recherche sur des critéres différents, sur un tableau stocké dans mon classeur, feuille 1.
Mon probléme c'est que je n'arrive pas à initialiser correctement mes combobox?
Pour précision les combobox sont indépendantes.
J'ai ceci comme code :

Private Sub UserForm_Initialize()
Dim c As Range
Dim d As Range

Set plage = Feuil1.Range("b1:b" & Feuil1.Range("b65536").End(xlUp).Row)
'On ajoute des occurences uniques à la combobox des noms
bChargementListe = True
For Each d In plage.Cells
If d.Row <> plage.Range("b1").Row Then
ComboBox1.Text = Trim(d.Text) 'cette ligne entraine l'évènement cbNoms_Click()
If ComboBox1.ListIndex = -1 Then
' test de la valeur de d si elle vaut rien alors on affiche pas comme sa sa enléve les trou dans les combobox
If d <> "" Then ComboBox1.AddItem d
End If
End If
Next
ComboBox1.ListIndex = -1
bChargementListe = False

Set plage = Feuil1.Range("A1:A" & Feuil1.Range("A65536").End(xlUp).Row)
'On ajoute des occurences uniques à la combobox des noms
bChargementListe = True
For Each c In plage.Cells
If c.Row <> plage.Range("A1").Row Then
cbDenomination.Text = Trim(c.Text) 'cette ligne entraine l'évènement cbNoms_Click()
If cbDenomination.ListIndex = -1 Then
' test de la valeur de c si elle vaut rien alors on affiche pas comme sa sa enléve les trou dans les combobox
If c <> "" Then cbDenomination.AddItem c
End If
End If
Next
cbDenomination.ListIndex = -1
bChargementListe = False
End Sub

Avec ce code la premiére combobox fonctione mais pas la seconde; et je pense que pour faire fonctionner les deux en même temps, il faudrait mettre une condition permettant de savoir sur quelle combobox l'utilisateur veut faire sa recherche?
Enfin c'est mon point de vue et je peux me tromper.
J'attend avec impatience vos idées et votre aide.
Merci par avance et je reste disponible pour plus d'informations.
 

Pierrot93

XLDnaute Barbatruc
Re : initialiser plusieurs combobox

Bonsoir Zepeto

pas tout compris de ton code, mais regarde le code ci dessous, renvoie dans un combobox les valeurs de la colonne A de la feuille active en écartant les doublons et les cellules vides, si cela peut t'aider :

Code:
Dim p As Range, x As New Collection
For Each p In Range("A1:A" & Range("A65536").End(xlUp).Row)
    If Not IsEmpty(p.Value) Then
        On Error Resume Next
        x.Add p, CStr(p)
        If Err = 0 Then ComboBox1.AddItem p.Value
    End If
Next p
On Error GoTo 0

bonne soirée
@+

Edition : en espérant que cela fonctionne sous 97...
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : initialiser plusieurs combobox

Bonsoir,

Liste sans doublons avec Dictionnary (la méthode la + rapide)

Code:
Private Sub UserForm_Initialize()
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In Range([A2], [A65000].End(xlUp))
     If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
  Next c
  Me.ComboBox1.List = MonDico.items
End Sub

JB
Formation Excel VBA JB
 

Pièces jointes

  • FormSansDoublonsDictionnary.xls
    25.5 KB · Affichages: 52
Dernière édition:

zepeto

XLDnaute Occasionnel
Re : initialiser plusieurs combobox

Merci de vos réponse, mais le code que j'ai mis à disposition permet d'initialiser une combobox sans doublons et sans trous; mais le probléme c'est que je n'arrive pas à initialiser plusieurs combobox en même temps?
Merci pour votre aide
Pour mieux cerné mon probléme je vous met un bout de mon code en Piéce Jointe.
 
Dernière édition:

Eric C

XLDnaute Barbatruc
Bonsoir le forum
Bonsoir le fil (qui doit être coupé depuis .... 11 ans)
Bonsoir goninph

Essaie ceci (Reprise du code de Jacques BOIGONTIER) -- Sinon, il y a des erreurs dans les codes (tes ranges ne sont pas corrects) sur le site où tu exposes ton code :cool:
VB:
Private Sub UserForm_Initialize()
  Set mondico = CreateObject("Scripting.Dictionary")
  Set plage = Feuil1.Range("e3:e" & Feuil1.Range("e65000").End(xlUp).Row)

  For Each c In plage
     If Not mondico.Exists(c.Value) Then mondico.Add c.Value, c.Value
  Next c
  Me.ComboBox1.List = mondico.items

        '--avec tri
        temp = mondico.keys
        Call Tri(temp, LBound(temp), UBound(temp))
        Me.ComboBox1.List = temp

       Set mondico = CreateObject("Scripting.Dictionary")
        Set plage = Feuil1.Range("f3:f" & Feuil1.Range("f65000").End(xlUp).Row)
  For Each c In plage
     If Not mondico.Exists(c.Value) Then mondico.Add c.Value, c.Value
  Next c
  Me.ComboBox2.List = mondico.items

        '--avec tri
        temp = mondico.keys
        Call Tri(temp, LBound(temp), UBound(temp))
        Me.ComboBox2.List = temp
End Sub
Bonne soirée à toutes & à tous
@+ Eric c
 
Dernière édition:

Eric C

XLDnaute Barbatruc
Pour celles ou ceux que cela intéresse, le code avec suppression des "vides" dans les cellules :
VB:
Private Sub UserForm_Initialize()
  Set MonDico = CreateObject("Scripting.Dictionary")
  Set plage = Feuil1.Range("e3:e" & Feuil1.Range("e65000").End(xlUp).Row)

  For Each c In plage
  If c.Value <> "" And Not MonDico.Exists(c.Value) Then
  MonDico.Add c.Value, c.Value
   Me.ComboBox1.List = MonDico.items
 
End If
    Next c
    '--avec tri
        temp = MonDico.keys
        Call Tri(temp, LBound(temp), UBound(temp))
        Me.ComboBox1.List = temp

       Set MonDico = CreateObject("Scripting.Dictionary")
       Set plage = Feuil1.Range("f3:f" & Feuil1.Range("f65000").End(xlUp).Row)
  For Each c In plage
   If c.Value <> "" And Not MonDico.Exists(c.Value) Then
   MonDico.Add c.Value, c.Value
 
  Me.ComboBox2.List = MonDico.items
End If
  Next c
  '--avec tri
        temp = MonDico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
     Me.ComboBox2.List = temp
  End Sub
Bonne après-midi à toutes & à tous
@+ Eric c
 

Discussions similaires

Réponses
6
Affichages
202
Réponses
4
Affichages
165