Extraire les valeurs distinctes d'une liste

Bonjour,

J'aimerais créer sur VBA une variable qui contient toutes les valeurs d'une liste. Cependant, si une valeur est répété deux fois dans ma colonne initiale, elle ne doit être prise en compte qu'une fois par la variable. Je veux à la fin que la variable stock la liste de valeurs distinctes (comme ce qu'on obtient avec la fonction supprimer les doublons).

Je sais qu'il est possible d'obtenir cela avec Scripting.Dictionary. Le problème étant que j'utilise Excel sur Mac, et que cette fonction n'est pas disponible sur Mac.

Quelqu'un aurait la solution à mon problème?

Merci

Bonjour,

À tester :

Dim c As Collection

Set c = New Collection

For Each r In Range("B2:B8")
      c.Add r, CStr(r)
Next

Bonjour,

Voici une proposition avec une fonction :

Function arrdico(datas As Variant)
Dim temp(), i&, j&, n&, doublon As Boolean: ReDim temp(1 to 1)
For i = LBound(datas) To UBound(datas)
    doublon = False
    If datas(i) <> "" Then
        For j = LBound(temp) To UBound(temp)
            If datas(i) = temp(j) Then
                doublon = True: Exit For
            End If
        Next j
        If Not doublon Then
            n = n + 1: ReDim Preserve temp(1 to n)
            temp(n) = datas(i)
        End If
    End If
Next i
arrdico = temp
End Function

Pour l'instant, la fonction est prévue pour recevoir en argument un array unidimensionnel (datas) : il faudra donc adapter le code s'il en était autrement.

Cdlt,

Edit : Salut Baboutz !

@Babout, cela ne marche pas, j'ai à chaque fois un message d'erreur "This key is already associated with an element of this collection" ...

@3BG Je ne comprends pas du tout cette fonction... peux-tu m'expliquer?

Bonjour,

Vous avez une variable tableau avec vos valeurs (contenant parfois des doublons). Vous entrez ce tableau en argument de la fonction et elle renverra un nouveau tableau sans doublon (normalement^^). Elle est à utiliser ainsi :

sub macro()
dim tablobrut, nvtablo
tablobrut = application.transpose(range("A1:A100"))
nvtablo = arrdico(tablobrut)
range("B1").resize(ubound(nvtablo)) = application.transpose(nvtablo)
end sub

Cdlt,

Bonjour,

Salut @3GB ! (je n'avais pas vu ton message)

@Caliceo

En effet, il faut faire :

    Dim c As Collection

    Set c = New Collection

    On Error Resume Next
    For Each r In Range("B2:B8")
          c.Add r, CStr(r)
    Next
Rechercher des sujets similaires à "extraire valeurs distinctes liste"