[B] Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes! [/B]

omariooo

XLDnaute Nouveau
Bonsoir chers amis,
Je m'y connais pas très bien sur excel, je souhaite supprimer des doublons de types: "ABC" "BAC"

Exemple


Colonne AColonne BColonne C
XYZ
YXZ


est un doublon à supprimer

Merci de m'aider dès que possible car c'est urgent.
 

Pièces jointes

  • Table des liens définitives - Copie.xlsx
    41 KB · Affichages: 53
Dernière édition:

Grand Chaman Excel

XLDnaute Impliqué
Re : Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes!

Bonjour omariooo et bienvenue sur le forum,
Tout d'abord, un petit rappel de la Lien suppriméque tu as sûrement lu avant de t'inscrire...
Ta demande est urgente, mais les gens qui répondent ici le font de façon bénévole, quand ils peuvent...

Ceci dit, afin de clarifier ta demande, est-ce que les colonnes à comparer sont A B et C (source, target et Weight) ou seulement A et B (source et target) ?
 

Dranreb

XLDnaute Barbatruc
Re : Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes!

Bonjour.
En F2:
Code:
=$A2&"|"&$B2
En G2:
Code:
=EQUIV($B2&"|"&$A2;$F$1:$F1;0)
Propagez ces deux formules vers le bas, et vous aurez en colonne G les numéros des lignes où la combinaison existe déjà plus haut avec les colonnes A et B inversées. Il ne reste plus qu'à atteindre les cellules de la colonne G portant une formule rendant un nombre, pus supprimer les lignes entières.
 

Grand Chaman Excel

XLDnaute Impliqué
Re : Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes!

Bonjour,
Voici un code qui compare les colonnes A, B et C. Les résultats sont copiées dans la feulle 2 :

VB:
Sub SuppresionDoublons()
   Dim AL As Object, Dico As Object
   Dim i As Integer, j As Integer, n As Integer, k As Integer
   Dim Temp As String
   Dim ar
   
   ar = Sheets(1).Cells(1).CurrentRegion.Value
   
   Set AL = CreateObject("System.Collections.ArrayList") 'pour trier valeurs dans A, B, C
   Set Dico = CreateObject("Scripting.Dictionary") 'dictionnaire valeurs uniques
   n = 1
   For i = 2 To UBound(ar, 1)
      'Liste triées des valeurs dans A, B, C
      AL.Clear 'on vide
      For j = 1 To 3
         AL.Add CStr(ar(i, j)) 'on ajoute
      Next j
      AL.Sort 'on trie
      Temp = Join(AL.toarray(), "|") 'on crée une valeur temporaire
      If Not Dico.exists(Temp) Then 'on ajoute dans le dictionnaire
         Dico.Add Temp, ""
         n = n + 1   'compteur
         For k = 1 To UBound(ar, 2)
            ar(n, k) = ar(i, k)
         Next k
      End If
   Next i
   'écriture du résultat dans feuille 2
   Sheets(2).UsedRange.Clear  'on vide
   Sheets(2).Range("A1").Resize(n, UBound(ar, 2)) = ar 'on écrit
End Sub

Pour comparer uniquement les colonnes A et B, changer cette ligne :
VB:
      For j = 1 To 2  '<<<< ICI

Les résultats sont identiques.

A+
 

job75

XLDnaute Barbatruc
Re : Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes!

Bonjour omariooo, Grand Chaman Excel, Dranreb,

Une autre solution VBA avec cette macro pour le bouton :

Code:
Private Sub CommandButton1_Click()
Dim tablo, ub%, rest(), d As Object, i&, t1$, t2, t$, n&, j%
tablo = Me.UsedRange
ub = UBound(tablo, 2)
ReDim rest(1 To UBound(tablo), 1 To ub)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
  t1 = tablo(i, 1): t2 = tablo(i, 2)
  t = IIf(t1 < t2, t1 & t2, t2 & t1)
  If Not d.Exists(t) Then
    d(t) = ""
    n = n + 1
    For j = 1 To ub
      rest(n, j) = tablo(i, j)
    Next
  End If
Next
'---restitution---
Me.UsedRange = rest
End Sub
L'exécution est très rapide.

Fichier joint, noter la MFC sur les colonnes A:E (couleur et bordures).

A+
 

Pièces jointes

  • Table des liens définitive(1).xls
    146 KB · Affichages: 46
Dernière édition:

Grand Chaman Excel

XLDnaute Impliqué
Re : Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes!

Petit commentaire:
Le code de job75 est semblable au mien, toutefois, s'il faut comparer plus de 2 colonnes, il y a un net avantage à utiliser un ArrayList. Le ArrayList permet en effet de trier simplement les éléments avec la méthode .Sort.

Exemple, si on veut comparer 5 colonnes, on aura simplement à changer pour
Code:
For j = 1 To 5  '<<<< ICI

Ce qui serait nettement plus complexe à faire avec le code de job75.

A+
 

job75

XLDnaute Barbatruc
Re : Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes!

Re,

Par curiosité j'ai voulu voir ce que donnait le Quick sort de Jacques Boisgontier :

Code:
Private Sub CommandButton1_Click()
Dim col%, a(), tablo, ub%, rest(), d As Object, i&, j%, t$, n&
col = 3 'nombre de colonnes à comparer, à adapter
ReDim a(1 To col)
tablo = Me.UsedRange
ub = UBound(tablo, 2)
ReDim rest(1 To UBound(tablo), 1 To ub)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
  For j = 1 To col
    a(j) = tablo(i, j)
  Next
  Tri a, 1, col
  t = Join(a)
  If Not d.Exists(t) Then
    d(t) = ""
    n = n + 1
    For j = 1 To ub
      rest(n, j) = tablo(i, j)
    Next
  End If
Next
'---restitution---
Me.UsedRange = rest
End Sub

Sub Tri(a, gauc, droi) ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
  Do While a(g) < ref: g = g + 1: Loop
  Do While ref < a(d): d = d - 1: Loop
  If g <= d Then
    temp = a(g): a(g) = a(d): a(d) = temp
    g = g + 1: d = d - 1
  End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
Fichier (2) joint.

Sur Excel 2003, l'exécution prend 0,078 s contre 0,125 s pour la macro du post #6 de Grand Chaman Excel.

Edit : bon, les temps indiqués sont pour la 1ère exécution de chaque macro.

Si l'on en fait une 2ème les temps deviennent identiques : 0,0625 s.

A+
 

Pièces jointes

  • Table des liens définitive(2).xls
    149.5 KB · Affichages: 46
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes!

Bonjour.
Mon module de classe TableIndex ne devrait pas être mauvais non plus,
d'autant plus que je me suis enfin décidé cette aprem à bilatéraliser sa part Quick sort.
 

Yad

XLDnaute Nouveau
Re : Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes!

bonjour, je me permet d'intyervenir sur cette question, car je viens d'en poser uen similaire...
celà vous éviterait peut être de répondre doublement...

comment faire évoluer ce code vers un autre filtre...

je souhaiterai signaler par un MsgBox les lignes dont au moins deux cellules sont identiques (car dans mon cas il y a plusieurs lignes qui ont des cellules en communs)



merci d'avance


PS: je vous de m'excuser je suis débutante autodidacte
 
G

Guest

Guest
Re : Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes!

Bonjour,

@Yad, généralement on essaie pas non plus de squatter le fil des autres. Un peu de patiente, ton tour viendra. Je vai répondre dans ton autre fil!

A+
 

david84

XLDnaute Barbatruc
Re : Suppression doublons genre: "ABC" "BAC" étendus sur plusieurs lignes!

Bonsoir à tous,
@Grand Chaman Excel,
sais-tu s'il y a une bibliothèque permettant l'utilisation de ArrayList en VBA (une référence à cocher dans le VBA Project) sans passer par un CreateObject (histoire de voir les propriétés et méthodes liées à cet objet) ?
A+
 

Discussions similaires

Réponses
26
Affichages
846

Statistiques des forums

Discussions
312 098
Messages
2 085 265
Membres
102 844
dernier inscrit
atori2