Listbox multi colonnes sans doublons

bonjour,

Je bloque sur le code pour parvenir à remplir une listbox multicolonne sans doublons.

ça marche très bien pour une listbox à une colonne mais pour plusieurs (5 colonnes) je sais pas du tout comment faire :

voici mon code:

Private Sub UserForm_Initialize()
Dim AllCells As Range, Cell As Range
    Dim NoDupes As New Collection
    Dim i As Integer, j As Integer
    Dim Swap1, Swap2, Item
    Dim derlig As Integer
    derlig = Sheets("Analyse des essais").Range("U" & Rows.Count).End(xlUp).Row

    With ListBox1
    .Clear
    'ListBox1.Columns = 5
    End With

    Set AllCells = Sheets("Analyse des essais").Range("V5" & ":Z" & derlig)

    On Error Resume Next
    For Each Cell In AllCells
        NoDupes.Add Cell.Value, CStr(Cell.Value)
    Next Cell
    On Error GoTo 0

    For i = 1 To NoDupes.Count - 1
        For j = i + 1 To NoDupes.Count
            If NoDupes(i) > NoDupes(j) Then
                Swap1 = NoDupes(i)
                Swap2 = NoDupes(j)
                NoDupes.Add Swap1, before:=j
                NoDupes.Add Swap2, before:=i
                NoDupes.Remove i + 1
                NoDupes.Remove j + 1
            End If
        Next j
    Next i

    For Each Item In NoDupes
    ListBox1.AddItem Item
    Next Item

End Sub

Si quelqu'un sait!?

Bonjour

C'est quoi déjà un doublon pour toi ?

Le même nom dans un colonne et laquelle ?

Les mêmes informations de la ligne (colonne V à Z) ?

Le mieux

Alors les doublons présent dans les colonnes (V5:Z).

mes doublons apparaissent de cette façon :

colonne

V W X Y Z

aa 1 2 3 0

aa 1 2 3 0

ab 3 2 1 0

ac 4 3 2 1

aa 1 2 3 0

En fait la colonne V liste des références et les autres colonnes décrivent la composition de cette référence.

Ainsi une même réf a toujours la même composition.

Du coup on pourrait presque dire qu'il s'agit de doublon de lignes et de colonnes.

Dans ma listbox je voudrait que chaque réf colonne (V) soit listée qu'une seule fois avec la composition correspondante (colonnes(W:Z))

Bonjour

Essayes ce code

Private Sub UserForm_Initialize()
Dim DerLig As Long
Dim J As Long
Dim I As Integer
Dim K As Integer
Dim Ws As Worksheet

  Set Ws = Sheets("Analyse des essais")
  DerLig = Ws.Range("U" & Rows.Count).End(xlUp).Row

  With Me.ListBox1
    .ColumnCount = 5
    For J = 2 To DerLig
      For K = 0 To .ListCount - 1
        If .List(K, 0) = Ws.Range("V" & J) Then Exit For
      Next K
      If K > .ListCount - 1 Then
        .AddItem Ws.Range("V" & J)
        For I = 23 To 26
          .List(.ListCount - 1, I - 22) = Ws.Cells(J, I)
        Next I
      End If
    Next J
  End With
End Sub

merci! Ca marche bien!

Par contre comment je peux faire pour classer les lignes dans un ordre alphavétique selon la colonne V.

Avec ce code sur une lisbtox 1 colonne ça marchait bien :

For I = 1 To NoDupes.Count - 1
        For J = I + 1 To NoDupes.Count
            If NoDupes(I) > NoDupes(J) Then
                Swap1 = NoDupes(I)
                Swap2 = NoDupes(J)
                NoDupes.Add Swap1, before:=J
                NoDupes.Add Swap2, before:=I
                NoDupes.Remove I + 1
                NoDupes.Remove J + 1
            End If
        Next J
    Next I

Bonjour

Une idée

Et si tu tris ta base à l'ouverture de ton userform, cela serait plus simple

Je sais pas comment faire? ça se trouve où?

Bonjour

Avec 2003

Comme tu n'as pas fourni de fichier

Je considère dans ta base

1 ligne d'entêtes

les donnees de A2 jusqu'a Z ....

Dim DerLig As Long
Dim J As Long
Dim I As Integer
Dim K As Integer
Dim Ws As Worksheet

  Set Ws = Sheets("Analyse des essais")
  DerLig = Ws.Range("U" & Rows.Count).End(xlUp).Row

  Ws.Range("A2:Z" & DerLig).Sort Key1:=Ws.Range("V2"), Order1:=xlAscending, Header:=xlNo, _
                           OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                           DataOption1:=xlSortNormal

  With Me.ListBox1
    .ColumnCount = 5
    For J = 2 To DerLig
      For K = 0 To .ListCount - 1
        If .List(K, 0) = Ws.Range("V" & J) Then Exit For
      Next K
      If K > .ListCount - 1 Then
        .AddItem Ws.Range("V" & J)
        For I = 23 To 26
          .List(.ListCount - 1, I - 22) = Ws.Cells(J, I)
        Next I
      End If
    Next J
  End With
End Sub

Ok merci.

En fait je peux pas trier mon tableau. Il doit rester tel quel.

C'est pas grave pour le trie. C'est déjà bien comme ça.

Rechercher des sujets similaires à "listbox multi colonnes doublons"