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 FunctionL'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 FunctionEn 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 FunctionCependant 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 FunctionEn 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 ... !!!