Supprimer les non doublons

anass1958

XLDnaute Occasionnel
Bonsoir
comment chercher les doublons sur 2 colonnes et suprimer automatiquement
les non doublons.
Merci
 

Pièces jointes

  • doublons.xls
    27.5 KB · Affichages: 126
  • doublons.xls
    27.5 KB · Affichages: 140
  • doublons.xls
    27.5 KB · Affichages: 135

skoobi

XLDnaute Barbatruc
Re : Supprimer les non doublons

Bonjour,

pourrais-tu précisé ce que tu veux faire?
vérifier qu'un chiffre de la colonne A ne se trouve pas en colonne B et dans ce cas le supprimer?
Même chose de la colonne B vers colonne A?
Faire une vérification par ligne? Par exemple les chiffres de la ligne 10 ne se trouvent pas ailleurs?
Plein de façon de voir des doublons...
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Supprimer les non doublons

Bonsoir,

Code:
Sub essai()
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In [a2:B1000]
    If Not MonDico.Exists(c.Value) And c.Value <> "" Then MonDico.Add c.Value, c.Value
  Next c
  [D2].Resize(MonDico.Count, 1) = Application.Transpose(MonDico.items)
End Sub

JB
Formation Excel VBA JB
 

Pièces jointes

  • Copie de doublons(1).zip
    14.1 KB · Affichages: 110

anass1958

XLDnaute Occasionnel
Re : Supprimer les non doublons

merci pour votre aide
comme je me suis mal expliqué ; le resultat n'est pas ce que je veux.
la colonne A contient 157 chiffres et c'est celle qui m'intresse pour mes resultats .
je desire trouver dans la colonne B , les chiffres se trouvant dans A (pas tous ; car dans A se trouve des chiffres qui ne figurent pas dans B )
c a d que que B contiendera les chiffres se trouvant dans A .
B contiendera moins que 157 chiffres .
une intersection entre A et B en supprimant ce qui reste en B.
merci pour votre patience
 

Dmnq_xl

XLDnaute Nouveau
Re : Supprimer les non doublons

Bonsoir,

La programmation n'est pas aussi élégante que celle de Boigontier mais j'espère qu'elle répond au cahier des charges ....


Sub essai2()

Dim ca As Range, cb As Range, PlageA As Range, PlageB As Range

Set PlageA = Range("A2:A" & Range("A65536").End(xlUp).Row)

Set PlageB = Range("B2:B" & Range("B65536").End(xlUp).Row)

For Each cb In PlageB
For Each ca In PlageA
If cb.Value = ca.Value Then GoTo suite:
Next ca
cb.Value = " "
suite:
Next cb

End Sub
 

skoobi

XLDnaute Barbatruc
Re : Supprimer les non doublons

Re,

bonjour Dmnq, JB,

donc tu veux supprimer les valeurs en colonne B ne se trouvant pas en colonne A.
C'est comme ça que je l'ai compris:

Code:
Sub test()
Dim Lig As Long, Trouve As Range
Application.ScreenUpdating = False
For Lig = [B65536].End(xlUp).Row To 2 Step -1
  Set Trouve = Columns("A").Find(Range("B" & Lig).Value, LookIn:=xlValues, lookat:=xlWhole)
  If Trouve Is Nothing Then Range("B" & Lig).Delete xlShiftUp
Next
End Sub
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Supprimer les non doublons

Bonjour,

Méthode rapide (0,01 sec):

Code:
Sub Communs()
  a = Range("A2:A" & [A65000].End(xlUp).Row)
  Set MonDico1 = CreateObject("Scripting.Dictionary")
  For Each c In a: MonDico1.Add c, c: Next c
  b = Range("B2:B" & [B65000].End(xlUp).Row)
  Set MonDico2 = CreateObject("Scripting.Dictionary")
  For Each c In b
    If MonDico1.Exists(c) Then If Not MonDico2.Exists(c) Then MonDico2.Add c, c
  Next c
  [B2:B1000].ClearContents
  [B2].Resize(MonDico2.Count, 1) = Application.Transpose(MonDico2.items)
End Sub

JB
 

Pièces jointes

  • Dictionaryx.zip
    12.9 KB · Affichages: 102
Dernière édition:

skoobi

XLDnaute Barbatruc
Re : Supprimer les non doublons

Re,

par curiosité, j'ai "affiné" mon code en supprimant les cellules "d'un seul cout" en créant la variable Plage: 0,04s ;).
Donc presque aussi bien que Dictionnary qui (je le savais) est très rapide.
Une bonne alternative pour ceux qui ne connaissent pas bien Dictionnary.

Code:
Sub test()
Dim Lig As Long, Trouve As Range, Plage As Range
Application.ScreenUpdating = False
For Lig = [B65536].End(xlUp).Row To 2 Step -1
  Set Trouve = Columns("A").Find(Range("B" & Lig).Value, LookIn:=xlValues, lookat:=xlWhole)
  If Trouve Is Nothing Then
    If Plage Is Nothing Then
      Set Plage = Range("B" & Lig)
    Else: Set Plage = Union(Plage, Range("B" & Lig))
    End If
  End If
Next
Plage.Delete xlShiftUp
End Sub
 

merinos

XLDnaute Accro
Re : Supprimer les non doublons

b = Range("B2:B" & [B65000].End(xlUp).Row)


Cette instruction là je la recherche depuis longtemps.

Bientot elle va me permettre d'ajouter des collonnes de données a un tabbleau et de faire des pivots là dessous.
 

natorp

XLDnaute Accro
Re : Supprimer les non doublons

bjr à vous tous,
je me permets de reprendre le fil de cette discussion car c'est presque ce que je cherche (et c'est pas évident de trouver...)
dans l'exemple cité plus haut par Skoobi, j'ai juste besoin que le résultat (c'est à dire les doublons trouvés) soit copié en colonne C et non pas écrase les données de la colonne B
Merci de votre attention, Cordialement
Gérard
 

Discussions similaires

Réponses
10
Affichages
453
Réponses
6
Affichages
518

Statistiques des forums

Discussions
312 386
Messages
2 087 850
Membres
103 669
dernier inscrit
Anne Sicard