Suppression de doublon

Bonjour à toute et tous,

J'aimerai comparer les valeurs d'une chaine de caractère pour que si un doublon est présent, il soit supprimé. Internet regorge d'exemple à cette question, mais je ne trouve pas ma solution.

Pour ce faire, j'ai commencé à écrire ce code :

Machaine = Electrode / Tapis / chaise / Electrode

rep = 0
dep = 1

w = InStr(dep,Machaine, " / ") 'renvoi le nombre d'éléments entre les "/"

For y = 1 To w 'boucle autant de fois qu'il y'a d'élément
    machine = Split(Machaine, " / ")(rep) 'isole un élément après l'autre

' compare la variable machine à chaque autres éléments de la variable Machaine

rep = rep +1
dep = dep + w
next y

L'idée était d'isoler un élément après l'autre puis le comparer à chaque autres éléments de la chaine de caractère.

Evidemment, si une meilleure solution existe je suis preneur !!!

merci d'avance ;)

Bonjour Sotin,

La fonction VB InStr ne retourne pas le nombre d'éléments mais la position de la chaîne cherchée. Une manière de procéder pourrait être de mettre en tableau (fonction VB Split) la chaîne à scanner puis de faire 2 boucles imbriquées sur le tableau, la première du 2ème élément (le 1er est forcément unique à ce stade) au nombre d'éléments maxi, la 2ème boucle, du 1er élément jusqu'à l'élément précédent de la 1ère boucle pour vérifier si l'élément est déjà présent et s'il n'est pas présent de la concaténer dans la chaîne résultat.

Dans le fichier joint (ne pas l'ouvrir si tu veux programmer la comparaison), j'ai codé cette possibilité ainsi qu'une variante qui évite la seconde boucle.

9classeur1.xlsm (17.28 Ko)

Cdlt,

Cylfo

Bonjour à tous

Une méthode possible avec une procédure :

Sub SansDoublon()
Dim machaine As String, x As String, t, res As String, i As Long
   machaine = "Electrode / Tapis / chaise / Electrode / chaise / Electrode / Electrode / Tapis"
   x = machaine
   t = Split(x, "/")
   For i = 0 To UBound(t)
      If Trim(t(i)) <> "" Then If InStr(1, x, t(i), vbTextCompare) > 0 Then res = res & " / " & t(i): x = Replace(x, t(i), "", , , vbTextCompare)
   Next i
   res = Mid(res, Len(" / ") + 1)
   MsgBox "Le résultat est res : " & res
End Sub

Re,

Super ! merci à tous les deux pour votre aide. Je vais maintenant essayer de comprendre le code ;)

A+

Re,

Avec une fonction personnalisée OterDoublon() utilisable sur la feuille de calcul ou dans une procédure VBA (plus pratique selon moi). Le code est dans module1.

Dans le classeur joint, la colonne B est remplie avec la procédure. La colonne C utilise la fonction personnalisée.

Function OterDoublon(ByVal x As String) As String
Dim t, res As String, i As Long
   t = Split(x, "/")
   For i = 0 To UBound(t)
      t(i) = Trim(t(i))
      If t(i) <> "" Then If InStr(1, x, t(i), vbTextCompare) > 0 Then res = res & " / " & t(i): x = Replace(x, t(i), "", , , vbTextCompare)
   Next i
   OterDoublon = Mid(res, Len(" / ") + 1)
End Function

Sub SansDoublon()
Dim x
   For Each x In Range("a2:a6"): x.Offset(, 1) = OterDoublon(x): Next
End Sub

Re,

Merci beaucoup pour le coup de main !

A+

Rechercher des sujets similaires à "suppression doublon"