Fonction qui supprime les doublons de mon parametre

Hello le forum,

Je travaille actuellement sur SSRS (SQL Server Reporting Service)

Dans un paramètre j'ai une liste de nom de clients avec des doublons .

J'aimerai créer une fonction qui me selectionne uniquement les noms de clients distincts.

pour cela je passe par un bout de code VBA (que j'ai trouvé sur internet) :

Public Shared Function RemoveDuplicates(parameter As Parameter) As String() 
Dim items As Object() = parameter.Value 
System.Array.Sort(items) 
Dim k As Integer = 0 
For i As Integer = 0 To items.Length - 1 
If i > 0 AndAlso items(i).Equals(items(i - 1)) Then 
Continue For 
End If 
items(k) = items(i) 
k += 1 
Next 
Dim unique As [String]() = New [String](k - 1) {} 
System.Array.Copy(items, 0, unique, 0, k) 
Return unique 
End Function

L'expression de mon paramètre sans doublons serait donc égale à =Code.RemoveDuplicates("parametre avec des doublons")

Cependant, cela ne fonctionne pas des masses pour l'instant. Est ce que quelqu'un saurait comment me débloquer ?

Si ça se trouve il est existe un moyen de simplifier la fonction.

En vous remerçiant grandement par avance,

Melanie57

Bonjour Mélanie,

Pour supprimer les doublons ... rien de mieux que Dictionary ...

Et puisque tu en as besoin en anglais ...

Function RemoveDuplicates(InputArray As Variant) As Variant
  Dim X As Long
  With CreateObject("Scripting.Dictionary")
    For X = LBound(InputArray) To UBound(InputArray)
      If Not IsMissing(InputArray(X)) Then .Item(InputArray(X)) = 1
    Next X
    RemoveDuplicates = .Keys
  End With
End Function

En espèrant cela t'aide ...

Hello James007 ou dois je vous appeler Monsieur Bond ?

Merci pour ta réponse mais malheureusement on ne peut pas utiliser Dictionnary via la plateforme SSRS.

Melanie57


Sinon j'ai trouvé cette autre fonction qui me parait un peu plus compréhensible :

Function RemoveDuplicates(parameter As string) As String
Dim value as String
Dim items As Object() = Split(parameter,”~”)
System.Array.Sort(items)
Dim k As Integer = 0
For i As Integer = 0 To items.Length – 1
If i > 0 AndAlso items(i).Equals(items(i – 1)) Then
Continue For
End If
If items(i) <> “”
if i =0 then
value = items(i)
else
value = value+”,”+items(i)
End If
End If
Next
Return value
End Function

Cependant y'a un char qui est invalide et SSRS me dit pas lequel malheureusement

Re,

Alors je te conseille la très efficace Fonction (en anglais aussi ...) du génial John Walkenbach ...

Option Base 1

Function UniqueItems(ArrayIn, Optional Count As Variant) As Variant
'   Accepts an array or range as input
'   If Count = True or is missing, the function returns the number of unique elements
'   If Count = False, the function returns a variant array of unique elements
    Dim Unique() As Variant ' array that holds the unique items
    Dim Element As Variant
    Dim i As Integer
    Dim FoundMatch As Boolean
'   If 2nd argument is missing, assign default value
    If IsMissing(Count) Then Count = True
'   Counter for number of unique elements
    NumUnique = 0
'   Loop thru the input array
    For Each Element In ArrayIn
        FoundMatch = False
'       Has item been added yet?
        For i = 1 To NumUnique
            If Element = Unique(i) Then
                FoundMatch = True
                Exit For '(exit loop)
            End If
        Next i
AddItem:
'       If not in list, add the item to unique list
        If Not FoundMatch And Not IsEmpty(Element) Then
            NumUnique = NumUnique + 1
            ReDim Preserve Unique(NumUnique)
            Unique(NumUnique) = Element
        End If
    Next Element
'   Assign a value to the function
    If Count Then UniqueItems = NumUnique Else UniqueItems = Unique
End Function

En espèrant que cela t'aide

Merci James007 et John Walkenbach (bien evidemment)

ça marche du tonerre

melanie57 a écrit :

Merci James007 et John Walkenbach (bien evidemment)

ça marche du tonerre

De rien ...

John est le Dieu Vivant d'Excel ... !!!

Rechercher des sujets similaires à "fonction qui supprime doublons mon parametre"