Microsoft 365 Suppression des doublons dans une chaîne situé dans une cellule par rapport à la chaîne d'une autre cellule

bioteau

XLDnaute Nouveau
Bonjour à tous,
Merci de m'aider, je n'arrive pas à trouver la solution avec mon petit niveau en VBA.
J'ai dans une cellule "B2" une chaîne de caractères (chiffres sous la forme de texte) et en "B3" une autre chaîne de caractères (également chiffres sous la forme texte).
Je voudrais comparer "B3" à "B2" et supprimer dans "B3" tous les caractères identiques.
Exemple :
B2 contient
1, 2, 3, 10, 11, 14, 16, 18, 20, 21, 23
B3 contient
1, 2, 3, 4, 5, 6, 7, 17, 18, 20, 21, 23, 26
Je souhaite obtenir toujours en B3 :
4, 5, 6, 7, 17, 26
Merci pour votre aide
 
Solution
Bonjour Bioteau, le fil,

ton fichier en retour. :)

fais Ctrl e, ou clique sur ton bouton TEST ➯ résultat correct en B3. 😊

VB:
Sub test()
  Dim T1, T2, s$, v%, a%, b%, i%, j%, k As Byte
  T1 = Split([B2], ", "): a = UBound(T1)
  T2 = Split([B3], ", "): b = UBound(T2)
  For j = 0 To b
    v = Val(T2(j)): k = 0
    For i = 0 To a
      If Val(T1(i)) = v Then k = 1: Exit For
    Next i
    If k = 0 Then s = s & v & ", "
  Next j
  If s <> "" Then [B3] = Left$(s, Len(s) - 2)
End Sub

soan

Phil69970

XLDnaute Barbatruc

Pièces jointes

  • chaîne de caractères.xlsm
    21.3 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
Bonjour
VB:
Sub test()
    Dim plage As Range, i&, x&, t$, t2
    Set plage = Range([B2], [B655335].End(xlUp))    'la plage a trier
    For i = 1 To plage.Cells.Count: t = t & plage.Cells(i).Text & ",": Next    'on conpile toute les valeurs dans un texte
    t = Replace(t, " ", "")    'on suprime les espacesdans la variable (t)texte
    t2 = Split(t, ",")    'on coupe le texte par les virgule (on a un array en base 0)
    MsgBox "origninal " & vbCrLf & Replace(t, " ", "")    'msgbox de l'original
    For i = 0 To UBound(t2)    'on boucle sur l'array
        x = Application.Match(t2(i), t2, 0)    'on récupere l'index de position de chaque valeurs dans l'array
        Debug.Print i & "-->" & x    ' juste pour voir
        'si l'index de position(x) est plus petit que i  c'est que ce nombre est déjà passé (on le vire de la variable t avec sa virgule )
        If x < i - 1 Then t = Replace(t, "," & t2(i) & ",", ",")
    Next
    MsgBox "résultat " & vbCrLf & t    ' le résultat
End Sub
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Bioteau, le fil,

ton fichier en retour. :)

fais Ctrl e, ou clique sur ton bouton TEST ➯ résultat correct en B3. 😊

VB:
Sub test()
  Dim T1, T2, s$, v%, a%, b%, i%, j%, k As Byte
  T1 = Split([B2], ", "): a = UBound(T1)
  T2 = Split([B3], ", "): b = UBound(T2)
  For j = 0 To b
    v = Val(T2(j)): k = 0
    For i = 0 To a
      If Val(T1(i)) = v Then k = 1: Exit For
    Next i
    If k = 0 Then s = s & v & ", "
  Next j
  If s <> "" Then [B3] = Left$(s, Len(s) - 2)
End Sub

soan
 

Pièces jointes

  • test.xlsm
    16.7 KB · Affichages: 7

bioteau

XLDnaute Nouveau
Bonjour PatrickToulon, Bonjour Soan,
Un grand merci pour vos solutions.
Patrick, ta solution compil toutes les cellules de la colonne, j'ai modifié mais n'est pas réussi à obtenir le résultat voulu. Merci quand même.
Soan, c'est génial, tout fonctionne nickel. J'essaye de comprendre le code, pas simple à mon petit niveau.
Grand merci à vous 3, mon projet avance.
 

patricktoulon

XLDnaute Barbatruc
re
j'avoue que je suis perplexe
les uniques de B2 ne ressortent pas
il suffit d'ajouter un nombre dans B2 qui n'est pas dans dans B3 pour ce rendre compte que tout les uniques ne sont pas pris en compte bien qu'il y en avait déjà
B2 dans difficile de parler de doublons dans ce cas là mais on est plutot dans un contexte de "contient "
demo7.gif

sinon la formule de soan simplifiée
VB:
Option Explicit

Sub test()
  Dim T1, T2, s$, a%, b%, j%, k&
  T1 = Split([B2], ", "): a = UBound(T1)
  T2 = Split([B3], ", "): b = UBound(T2)
  For j = 0 To b
  k = Application.IfError(Application.Match(T2(j), T1, 0), 0)
   If k = 0 Then s = s & T2(j) & " "
  Next j
  If s <> "" Then [B3] = Replace(Trim(s), " ", ", ")
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 588
Messages
2 110 988
Membres
111 002
dernier inscrit
Lolo73i