Supprimer des doublons dans une chaîne de texte

Bonjour !

J'ai presque fini une (grosse) macro. Mais elle ne fonctionne pas comme je voudrais. Je pense avoir trouvé l'origine du problème mais je n'ai pas assez de connaissances en VBA pour le résoudre

J'ai une variable t as string qui contient une chaîne de texte.

Par exemple t = "LPH;HZM;TLN;XRS;HZU;HZT;HZS;HZR;HZQ;HZP;HZO;HZN;LPH;HZM;TLN;"

Je voudrais me débarrasser des doublons dans la chaîne (qui sont : LPH;HZM;TLN)

Selon la valeur de t, il peut même y avoir des valeurs en triple. Les valeurs en double peuvent se situer n'importe où dans la chaîne.

Merci d'avance pour vos réponses !

Bonjour.

Tu veux garder chaque élément en un seul exemplaire ou te débarrasser de toutes les occurrences des valeurs qui apparaissent plusieurs fois ?

Bonne journée.

Elhevan a écrit :

Bonjour.

Tu veux garder chaque élément en un seul exemplaire ou te débarrasser de toutes les occurrences des valeurs qui apparaissent plusieurs fois ?

Bonne journée.

Je voudrais les garder en un seul exemplaire.

Bonjour,

en cherchant un peu , un excellent code de jean-eric ici:

https://forum.excel-pratique.com/excel/suppression-de-mot-en-double-sur-une-cellule-t35606.html

P.

Essaye avec ça : (ne marche que si la taille des machins est constante)

Dim Taille As Integer
    Taille = Len(t)
Dim j As Integer
j = InStr(1, t, ";")
Const n As Integer = 20
Dim Liste(1 To n) As String
Dim i As Integer
    i = 1
Dim k As Integer
    k = 1
Dim nb As Integer
    nb = 1
Dim test As String
Do Until i >= Taille
    test = Mid(t, i, j)
    k = 1
    Do Until k = nb + 1
        If test = Liste(k) Then
            Exit Do
        End If
    k = k + 1
    Loop
    If k = nb + 1 Then
        Liste(nb) = test
        nb = nb + 1
    End If
    i = i + j
Loop
i = 1
t = ""
Do Until i = nb
    t = t & Liste(i)
    i = i + 1
Loop

Bonjour,

Solution sous forme de fonction personnalisée :

Function EPURERDBLNS(tx As String, s As String) As String
    Dim ttx, i%, d As Object
    Set d = CreateObject("Scripting.Dictionary")
    ttx = Split(Trim(tx), s)
    For i = 0 To UBound(ttx)
        d(ttx(i)) = ""
    Next i
    ttx = d.keys
    EPURERDBLNS = Join(ttx, s)
End Function

A coller dans un module standard et utiliser comme une fonction Excel.

Exemple : =EPURERDBLNS(A1;";")

Cordialement.

MFerrand a écrit :

Bonjour,

Solution sous forme de fonction personnalisée :

Function EPURERDBLNS(tx As String, s As String) As String
    Dim ttx, i%, d As Object
    Set d = CreateObject("Scripting.Dictionary")
    ttx = Split(Trim(tx), s)
    For i = 0 To UBound(ttx)
        d(ttx(i)) = ""
    Next i
    ttx = d.keys
    EPURERDBLNS = Join(ttx, s)
End Function

A coller dans un module standard et utiliser comme une fonction Excel.

Exemple : =EPURERDBLNS(A1;";")

Cordialement.

Simple et efficace

Salut Patrick,

Je commence à avoir tout un lot de fonctions personnalisées "Texte", il faudra que je rassemble tout ça...

Mais depuis que je réponds à des questions de ce type, j'ai constaté que dès qu'il y a une manipulation un peu sophistiquée de chaîne, la meilleure solution est toujours une fonction personnalisée : non seulement on gagne lors de l'utilisation une fois la fonction réalisée, mais le code est plus rapidement écrit qu'une formule utilisant les fonctions classiques.

C'est un constat dont je ne me doutais pas il y a seulement un an !

Bonne journée.

Rechercher des sujets similaires à "supprimer doublons chaine texte"