tri de données...

pnlop

XLDnaute Occasionnel
Bonjour le forum,
Quelqu'un pourrait-il me trouver une solution à ceci:

J'ai 2 colonnes: A et B.

Dans A, il y a des numéro d'articles. Dans B, il y a aussi des numéros d'articles, les mêmes qu'en A, mais aussi quelques uns en plus disséminés un peu partout.....

Je souhaiterai un formule magique qui efface en A et B toutes les données à doubles et qui laisse en B juste ceux qui n'étaient pas en A...
J'ai essayer le " supprimer les doublons", mais ça ne fonctionne pas comme je veux...

Je joins un classeur avec des données pour illustrer le message...

Merci pour votre aide!
 

Pièces jointes

  • Exemple.xlsx
    37 KB · Affichages: 43
  • Exemple.xlsx
    37 KB · Affichages: 39
  • Exemple.xlsx
    37 KB · Affichages: 42

Paf

XLDnaute Barbatruc
Re : tri de données...

Bonjour à tous

une macro qui laisse en colonne A les données non connues en colonne B et inversement. A tester

Code:
Sub pnlop()
 Dim DerA As Long, DerB As Long, TablA, TablB, DicoA, DicoB, i As Long, Prod
 Set DicoA = CreateObject("Scripting.Dictionary")
 Set DicoB = CreateObject("Scripting.Dictionary")

    DerA = Range("A" & Rows.Count).End(xlUp).Row
    DerB = Range("B" & Rows.Count).End(xlUp).Row
    TablA = Range("A4:A" & DerA)
    TablB = Range("B4:B" & DerB)
    
    For i = LBound(TablB) To UBound(TablB)
        DicoB(TablB(i, 1)) = ""
    Next
    For i = LBound(TablA) To UBound(TablA)
        If DicoB.exists(TablA(i, 1)) Then
            DicoB.Remove (TablA(i, 1))
        Else
            DicoA(TablA(i, 1)) = ""
        End If
    Next
    Range("A4:A" & DerA).ClearContents
    Range("B4:B" & DerB).ClearContents
    Range("A4").Resize(DicoA.Count) = Application.Transpose(DicoA.keys)
    Range("B4").Resize(DicoB.Count) = Application.Transpose(DicoB.keys)
End Sub
A+
 

gosselien

XLDnaute Barbatruc
Re : tri de données...

Bonjour,

j'aurais plutot indique FILTRE et pas tri :)

une autre solution
Colonne A et B pour la recherche et colonne E doit être libre

Sub Uniq()
Dim R As Range, Dico As Object, x, a, b, i&, s ' déclaration des variables OK
Set Dico = CreateObject("Scripting.Dictionary")
Set ws1 = Sheets("794300")
lastrowa = Range("A65000").End(xlUp).Row
lastrowb = Range("B65000").End(xlUp).Row
plus = IIf(lastrowa < lastrowb, lastrowb, lastrowa)
Set R = Range("A1:B" & plus) ' ws1.[A65000].End(xlUp).Row)
For Each R In R ' pour chaque cellule dans le range "r"
If R <> "" Then
x = R ' ? scalaire plus rapide, évite de répéter r.Value
If Not Dico.Exists(x) Then '
Dico(x) = Dico(x) '
End If
End If
Next
'---restitution en colonne E---
Application.ScreenUpdating = False ' OK
Range("E2:E" & Rows.Count).Clear ' OK
If Dico.Count = 0 Then Exit Sub ' si vide on sort OK
a = Dico.Keys
b = Dico.Items
For i = 0 To UBound(a) ' boucle de 0 à nombre d'occurences les "array" commencent toujours à 0
Cells(i + 1, 5) = a(i)
Next
Columns(5).AutoFit
End Sub
 

Discussions similaires