XL 2010 Alimenter ComboBox multi-colonne sans doublons

modus57

XLDnaute Occasionnel
J'ai trouvé une discussion sur ce forum concernant ce sujet.
Le code d'Hervé XLDnaute Barbatruc fonctionne bien sauf que les données dans le ComboBox sont juxtaposées et non pas alignées.
Voici mon code légèrement modifié :
VB:
Private Sub UserForm_Initialize()
Dim Coll As New Collection
Dim Cellule As Range
With Me.ComboBox1
.ColumnCount = 4
.ColumnWidths = ("45;50;50;120")
End With
With Sheets("BDD")
For Each Cellule In .Range("Tableau1")
On Error Resume Next
Coll.Add Cellule, CStr(Cellule)
If Err = 0 Then
Me.ComboBox1.AddItem (CStr(Cellule))
End If
On Error GoTo 0
Next Cellule
End With
End Sub
Comment le corriger pour des données alignées dans le ComboBox.
Merci d'avance pour votre aide.
 

patricktoulon

XLDnaute Barbatruc
tiens regarde celle ci sans changer l'ordre des colonnes
je formate comme dans la plage
VB:
Private Sub UserForm_Activate()
    Dim Table As Range, ColWidth(), CW$, Tabl, tablNom, C&
    Set Table = Sheets("BDD").ListObjects("Tableau1").DataBodyRange
    Tabl = Table.Value    ' on prend tout le databodyrange du listobject("tableau")dans une variable tableau
    tablNom = Application.Index(Tabl, 0, 4)    ' on cré un tableau avec la colonnes des noms
       With ComboBox1
        .ColumnCount = UBound(Tabl): .ColumnWidths = "60;55;25;60"   'parametrage combo
        For i = 1 To UBound(tablNom)  'on boucle sur les noms si x=i alors il n'y est pas encore  on le met sinon non
            x = Application.IfError(Application.Match(tablNom(i, 1), tablNom, 0), 0)
            If i = x Then
                ComboBox1.AddItem ""
                For C = 1 To UBound(Tabl, 2)
                    forme = "@"
                    If C = 3 Then forme = "000"
                    If C = 1 Then forme = Table.Cells(1).NumberFormat
                    .List(.ListCount - 1, C - 1) = Format(Tabl(i, C), forme)
                Next
            End If
        Next
    End With
End Sub
 

modus57

XLDnaute Occasionnel
Je me suis absenté cet a-m, je viens de consulter vos derniers posts et c'est toujours aussi pointu.
Merci pour votre réactivité et disponibilité.
Cette abondance de code me permet d'approfondir mes connaissances ainsi qu'à ceux qui débute et qui non pas votre expertise.
 

patricktoulon

XLDnaute Barbatruc
si on va bien chercher si je voulais formater ton combo comme la plage entièrement
VB:
Private Sub UserForm_Activate()
    Dim Table As Range, ColWidth(), CW$, Tabl, tablNom, C&
    Set Table = Sheets("BDD").ListObjects("Tableau1").DataBodyRange
    Tabl = Table.Value    ' on prend tout le databodyrange du listobject("tableau")dans une variable tableau
    tablNom = Application.Index(Tabl, 0, 4)    ' on crée un tableau avec la colonnes des noms
       With ComboBox1
        .ColumnCount = UBound(Tabl): .ColumnWidths = "60;55;25;60"   'parametrage combo
        For i = 1 To UBound(tablNom)  'on boucle sur les noms si x=i alors il n'y est pas encore  on le met sinon non
            x = Application.IfError(Application.Match(tablNom(i, 1), tablNom, 0), 0)
            If i = x Then
                ComboBox1.AddItem ""
                For C = 1 To UBound(Tabl, 2)
                     .List(.ListCount - 1, C - 1) = Format(Tabl(i, C), Table.Cells(c).NumberFormat)
                Next
            End If
        Next
    End With
End Sub
et voila
;)
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi