Créer une liste déroulante avec items distincts

Bonjour,

Voici mon code

Private Sub CPM_Change()
  If Me.CPM.ListIndex = -1 Then Exit Sub
  Me.Campagne.Clear
  For i = 1 To [T_Planning].Rows.Count
   If Me.Type_Campagne = "Sujets Transverses" Or Me.Type_Campagne.ListIndex = -1 Then
    cond = Range("T_Planning").ListObject.ListColumns("CPM").DataBodyRange.Cells(i, 1).Value = Me.CPM.Value
   Else
    cond = Range("T_Planning").ListObject.ListColumns("CPM").DataBodyRange.Cells(i, 1).Value = Me.CPM.Value And Range("T_Planning").ListObject.ListColumns("Type Campagne").DataBodyRange.Cells(i, 1).Value = Me.Type_Campagne.Value
   End If
    If cond Then
       Me.Campagne.AddItem Range("T_Planning").ListObject.ListColumns("Nom du dossier").DataBodyRange.Cells(i, 1).Value
    End If
  Next
  Me.Campagne.ListIndex = -1
      With Me.Campagne
        For i = 0 To .ListCount - 1
            For j = 0 To .ListCount - 1
                If .List(i) < .List(j) Then
                    strTemp = .List(i)
                    .List(i) = .List(j)
                    .List(j) = strTemp
                End If
            Next j
        Next i
    End With
End Sub

Je suis dans un formulaire de recherche :

selon ce qui est sélectionné dans la liste déroulante CPM, je souhaite afficher la liste de ses campagnes (qui se trouvent dans la colonne" Nom du dossier" de mon tableau - il peut y avoir plusieurs campagnes pour un même CPM) mais je ne veux pas de doublons dans ma liste déroulante Campagne.

Il doit manquer un petit bout dans mon code...

Merci par avance :)

Bonjour,
Voir WorksheetFunction et les nouvelles fonctions pour alléger le code VBA.
Soit, les formules Filter, Sort et Unique.
Cdlt.

Merci pour ta réponse mais je ne vois pas du tout comment faire, j'ai beau chercher sur internet, je suis coincée...

Il n'y a aucun moyen, en gardant le code actuel, de ne pas avoir de doublons dans ma liste avec une condition ?

Merci par avance !

Edit : ça ne fonctionne pas, ça prend tous les items de ma colonne :(

J'ai trouvé une autre solution

Private Sub CPM_Change()
Dim Cell As Range
Dim Unique As Object
Set Unique = CreateObject("scripting.dictionary")

If Me.CPM.ListIndex = -1 Then Exit Sub
Me.Campagne.Clear
For i = 1 To [T_Planning].Rows.Count
If Me.type_campagne = "Sujets Transverses" Or Me.type_campagne.ListIndex = -1 Then
cond = Range("T_Planning").ListObject.ListColumns("CPM").DataBodyRange.Cells(i, 1).Value = Me.CPM.Value
Else
cond = Range("T_Planning").ListObject.ListColumns("CPM").DataBodyRange.Cells(i, 1).Value = Me.CPM.Value And Range("T_Planning").ListObject.ListColumns("Type campagne").DataBodyRange.Cells(i, 1).Value = Me.type_campagne.Value
End If
If cond Then

For Each Cell In Range("T_Planning").ListObject.ListColumns("Nom du dossier").DataBodyRange
If Not Unique.exists(Cell.Value) Then
Unique(Cell.Value) = ""
Me.Campagne.AddItem Cell.Value
End If
Next Cell
End If
Next

End Sub

Cela fonctionne très bien :)

merci quand même pour les conseils :)

Bonsoir,

Très bonne solution.

Vous pouvez clore le fil en cliquant sur l'icône à droite de votre fil :

boer

A+

Rechercher des sujets similaires à "creer liste deroulante items distincts"