Identifier et extraire les doublons d'une liste

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Contrairement aux habitudes qui veulent éradiquer très sévèrement les doublons d'une liste, non seulement je veux les conserver, mais surtout les récupérer TOUS. En fait, je voudrais dresser une liste de tous les doublons pouvant se trouver dans une liste.
La liste d'origine comprend 2 colonnes ; la 1ère avec le nom d'un élément, la seconde (contiguë) avec une valeur correspondant à cet élément. S'il y a doublon(s), "triplon(s)"..., les éléments concernés peuvent avoir ou ne pas avoir la même valeur de leur(s) homologue(s).
La liste que je voudrais dresser serait récupérée dans une ComboBox, idéalement multicolonnes. Apparaîtraient dans la liste de la ComboBox non seulement les éléments dupliqués (tripliqués...) mais aussi leurs valeurs respectives, afin de discerner les "vrais" doublons des "faux". J'entends par "vrais" doublons les éléments homonymes qui ont la même valeur, et par "faux" doublons, les éléments homonymes qui ont des valeurs différentes. En ce qui concerne les "vrais" doublons, on ne conserve qu'un seul élément et on élimine le ou les autres ayant la même valeur. Quant aux "faux" doublons, et bien là il faut se poser la question : quelle valeur est la bonne ? Vérifier et finir par virer le ou les homonymes dont les valeurs sont erronées.
Si le multicolonnes pour la ComboBox est trop difficile, je pense que l'on peut faire une ComboBox avec une seule colonne dont les items de sa liste seraient une concaténation des éléments et de leur valeur respective.
Enfin, il ne suffirait plus qu'à choisir un item (suivi de sa valeur) de la liste de la ComboBox pour qu'automatiquement son équivalent soit sélectionné dans la liste d'origine afin qu'on puisse l'éliminer ipso facto.

J'ai cherché un peu partout des solutions à ce problème, mais je n'ai rien trouvé concernant la "gestion" des doublons.

Merci d'avance pour tout commentaire.
 

Pièces jointes

  • GetDoublons.xlsm
    18.7 KB · Affichages: 121
  • GetDoublons.xlsm
    18.7 KB · Affichages: 120
  • GetDoublons.xlsm
    18.7 KB · Affichages: 120
Dernière édition:

klin89

XLDnaute Accro
Re : Identifier et extraire les doublons d'une liste

Bonsoir Magic_Doctor
Pas sûr d'avoir compris ton histoire de triplons !
A tester sous Excel2003, résultat dans les colonnes E,F et G

VB:
Sub Doublons_colB_C()
Set mondico = CreateObject("Scripting.Dictionary")
Set Plg = Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row)
For Each c In Plg
  temp = c.Value & "_" & c.Offset(, 1).Text
  mondico(temp) = mondico(temp) + 1
Next c
Range("E2").Resize(mondico.Count, 1) = Application.Transpose(mondico.keys) 'Clé
Range("G2").Resize(mondico.Count, 1) = Application.Transpose(mondico.items) 'Nbre d'items
Range("E2:E" & Range("E" & Rows.Count).End(xlUp).Row).TextToColumns Destination:=Range("E2"), _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="_"
derli = Range("E" & Rows.Count).End(xlUp).Row
Range("E2:G" & derli).Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess, _
                  OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                  DataOption1:=xlSortNormal
End Sub
Visuellement est-ce cela que tu veux récuperer dans une listbox multicolonnes ?
Si oui, je ne traiterais pas le code liée à la listbox, je ne suis pas doué avec ce type de contrôles.

Klin89
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Identifier et extraire les doublons d'une liste

Bonjour klin89,

Merci pour ton intervention qui m'a inspiré.
Mon néologisme "triplon" voulait dire un même élément qui apparaît 3 fois (avec ou pas la même masse volumique)...
J'ai fait quelques modifications dans ta routine et suis pratiquement parvenu à mes fins (voir PJ).
Je reconnais que c'était plus tordu que ce que je me l'imaginais quand j'ai pensé à vérifier d'éventuels doublons dans une liste.
Je pense néanmoins que tout ça est perfectible.

Bonne journée.
 

Pièces jointes

  • GetDoublons.xlsm
    25.7 KB · Affichages: 93
  • GetDoublons.xlsm
    25.7 KB · Affichages: 82
  • GetDoublons.xlsm
    25.7 KB · Affichages: 90

job75

XLDnaute Barbatruc
Re : Identifier et extraire les doublons d'une liste

Bonjour Magic_Doctor, salut klin89,

Tu es Accro du VBA Doctor, mais il faut à tout prix éviter les usines à gaz :)

Pourquoi ne pas mettre simplement une MFC sur ta liste avec =NB.SI(ListeItems1;$B2)>1

Formule en espagnol =CONTAR.SI(ListeItems1;$B2)>1

Avec un tri alphabétique de la liste il sera très facile de traiter les doublons ainsi mis en évidence.

Edit : j'avais oublié le signe $ devant B.

A+
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Identifier et extraire les doublons d'une liste

Bonjour à tous

Je me suis amusé à effacer les doublons à partir d'un dictionnaire

Voila le résultat

Je regarde vos œuvres
 

Pièces jointes

  • GetDoublons_a.xlsm
    32 KB · Affichages: 120
Dernière édition:

VIARD

XLDnaute Impliqué
Re : Identifier et extraire les doublons d'une liste

Bonjour Magic_Dotor et à tous

Puisque chacun y va de sa solution, voici la mienne, plus classique
ici pas de dico, je ne connais pas.
seul les doublons sont affichés.

Salutation à tous

Jean-Paul
 

Pièces jointes

  • GetDoublons-2-.xls
    56.5 KB · Affichages: 108

Magic_Doctor

XLDnaute Barbatruc
Re : Identifier et extraire les doublons d'une liste

Bonjour job, pierrejean,

job, j'ai tenté de résoudre ce problème poussivement, à ma manière (et l'aide de klin89). Certes c'était plus compliqué que de rajouter une colonne avec des formules, dont les résultats devaient être triés par la suite.
pierrejean, alors là chapeau : tout se fait sans la nécessité d'une colonne supplémentaire dans la feuille. J'adopte ta solution !
Dernière question, si tu me lis : quand on choisit un item dans la liste de la ComboBox des doublons, comment faire pour qu'alors son équivalent dans la liste de saisie soit sélectionné afin de l'éliminer, sans devoir le chercher un bon moment si la liste venait à être longue ?

Très bonne fin d'après-midi à tous.
 

Pièces jointes

  • GetDoublons (Magic_Doctor).xlsm
    33.2 KB · Affichages: 79
  • GetDoublons (pierrejean).xlsm
    32.3 KB · Affichages: 53

pierrejean

XLDnaute Barbatruc
Re : Identifier et extraire les doublons d'une liste

Re

Bien sur , je te lis mon cher Magic_Doctor

Voila 2 versions qui commencent à approcher l'usine à gaz évoquée par notre ami Job
la version c qui répond je crois à ta question
la version b qui
1) tout d'abord élimine les doublons entiers
2) classe les doublons restants par ordre alphabétique

Pour la petite histoire la version b a précédé la version c

Autre chose: Un tout grand Merci pour ce problème qui a fait travailler les quelques neurones qui me restent
 

Pièces jointes

  • GetDoublons (pierrejean)_b.xlsm
    34 KB · Affichages: 61
  • GetDoublons (pierrejean)_c.xlsm
    33.7 KB · Affichages: 91
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Identifier et extraire les doublons d'une liste

Hola pierrejean,

Tu m'as fait bosser jusqu'à tard dans la nuit (j'ai fini par un film très con, ça relaxe...).
N'ayant pas rafraîchi l'écran, je n'ai donc pas pu voir ton dernier post que je découvre à l'instant.
J'ai essayé de comprendre tes routines, vraiment fort instructives. Mais j'avoue que persistent nombre de zones d'ombres (tiens, c'est bô ce que je viens de dire !).
Pas à pas, je me suis penché sur toutes les sentences. "Menos mal" j'en ai compris quelques unes.
J'ai fait quelques modifications que job comprendrait bien, à savoir que je nomme toujours les plages "stratégiques" afin de ne pas sempiternellement tout revoir dans les entrailles des macros si l'on venait à modifier la feuille.
J'ai passé un bon moment pour tout notifier dans les macros et, par la même occasion, poser quelques questions.
La principale modification, tu le verras, est que l'on n'élimine aucune ligne. Grace à une routine de job (vraiment très pratique) quand une ligne devient vide, tout le tableau est, disons, "resizé". En combinant ta solution + celle de job, le résultat est vraiment pas mal.
Il est vrai que je suis un chouïa perfectionniste. D'une part, quand j'ouvre la ComboBox de l'USF, ce serait bien que les items soient classés par ordre alphabétique (il me semble, après avoir visionné en "diagonale" ton dernier post, que tu as résolu le problème), d'autre part, quand la ComboBox multicolonne s'ouvre, question de rigueur, j'aimerais que dans la 2ème colonne (celle correspondant aux masses volumiques) après le chiffre il y ait le suffixe " g/mL". Je sais, c'est un détail. J'ai tenté de résoudre moi-même le problème en me disant "eh ! eh ! fastoche"... tu parles... je n'y suis jamais arrivé. Cela prouve que je n'ai encore pas compris grand chose quant aux dictionnaires et autres "array".
Je sens que je vais encore bosser un moment cet après-midi austral sur tes dernières solutions.
job a raison quand il parle d'usine à gaz. J'essaie de réaliser une base de données, somme toute toute simple, qui permette un classement des items par ordre alphabétique, par familles (catégories si tu préfères) et que les saisies (y compris ces fameux doublons) soient contrôlées automatiquement de telle sorte qu'aucune erreur ne soit introduite. Ce n'est que la première partie d'un projet qui remonte à plus de 10 ans (une histoire de dilutions sophistiquées)... Le reste devrait se faire plus rapidement. Enfin, je l'espère !

Quant à tes neurones, mon cher pierrejean "¡te sobran!" (= tu en as en rabe !).

Encore merci pour ton aide.
 

Pièces jointes

  • GetDoublons (pierrejean)4.xlsm
    34.6 KB · Affichages: 69

pierrejean

XLDnaute Barbatruc
Re : Identifier et extraire les doublons d'une liste

Re

Voila ton fichier avec quelques réponses et l'ajout des g/ml
teste mes dernières versions et dis moi comment tu souhaites la version finale
 

Pièces jointes

  • GetDoublons (pierrejean)4_a.xlsm
    36.8 KB · Affichages: 65
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Identifier et extraire les doublons d'une liste

Re

Vois cette version et dis-nous

Tu remarqueras que j'ai fait l'effort de déclarer les variables , histoire de faire plaisir aux ayatollah de l'Option Explicit
 

Pièces jointes

  • GetDoublons (pierrejean)4_b.xlsm
    46 KB · Affichages: 65

Habitude

XLDnaute Accro
Re : Identifier et extraire les doublons d'une liste

Bonjour

Bel exemple pour Utiliser le Tree View

Pour ceux que ca intéresse.

Tu choisi dans l'arbre par double click.
La valeur désirée se met en bleu
 

Pièces jointes

  • GetDoublonsMagic_doctor.xlsm
    31.9 KB · Affichages: 72

Magic_Doctor

XLDnaute Barbatruc
Re : Identifier et extraire les doublons d'une liste

Bonsoir pierrejean, Habitude,

Pas pu répondre plus tôt, car là où j'étais, pas d'électricité. On survit !

Habitude, je viens d'essayer votre solution. Curieusement chez moi ça plante et ça donne des résultats bizarres.

pierrejean, quand j'ai déclenché ta macro, le 1er truc que je me suis dit c'est : "merde ça céconne".
Des lignes avaient subitement disparu. Il devait y avoir normallement 22 doublons et je me retrouvais avec 12 doublons. ¡Caramba!où est la couille (pardon, el huevo) ? Je vérifie et là je comprends et me dis : "Putain (pardon, la puta que lo pario), il a réussi à virer automatiquement tous les doublons superflus... BINGO ! Alors là, chapeau bas !!! Je crois que dans le pire de mes caprices, je n'aurais jamais osé demander que l'on me résolve l'anihilation de ces verrues inutiles. Quoique...
Tu es allé encore plus loin que mes desiderata et je t'en remercie. Pour finir, les doublons sont classés par ordre alphabétique !
Je vais de ce pas étudier tes macros. Il reste un petit détail, mais d'abord je dois régler un problème de fonction.
Ton gros travail, combiné avec celui de job, est ce qu'on appellerait une "perle" !

Encore une fois merci et... (vu le décalage) très bonne nuit.
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Identifier et extraire les doublons d'une liste

Bonsoir,

Maintenant ça marche très bien.

Pardon, une petite étourderie.
 

Pièces jointes

  • GetDoublons (pierrejean)5.xlsm
    42 KB · Affichages: 79
  • GetDoublons (pierrejean)5'.xlsm
    43.2 KB · Affichages: 65
Dernière édition:

klin89

XLDnaute Accro
Re : Identifier et extraire les doublons d'une liste

Bonsoir à tous,

J'arrive après la bataille:p
Malgré les solutions proposées, j'ai toujours du mal à savoir ce qu'il faut ressortir.
2 macros à exécuter successivement sous Excel 2003, prendre en compte une liste qui commence à B2
(Je m'y perds dans tous ces fichiers)
Le résultat s'affiche à partir de E2, ai-je bien compris la problématique ?
VB:
Sub Supprime()
'En s'appuyant sur la colonne B, on supprime
'les lignes contenant des valeurs uniques
' La colonne B n'est pas triée
Dim n As Long, i As Long, j As Long, cpt As Byte, valeur As String
For i = 2 To Range("B" & Rows.Count).End(xlUp).Row
    valeur = Cells(i, 2)
    For j = 2 To Range("B" & Rows.Count).End(xlUp).Row
        If valeur = Cells(j, 2) Then
            cpt = cpt + 1
        End If
    Next j
    If cpt < 2 Then
        For n = 2 To Range("B" & Rows.Count).End(xlUp).Row
            If Cells(n, 2) = valeur Then
                Rows(n).Delete Shift:=xlUp
                i = i - 1
            End If
        Next n
    End If
    cpt = 0
Next i
End Sub
Puis :
VB:
Sub Doublons_colB_C()
'Doublon = concaténation de colonne B & C
Dim c As Range, Plg As Range, mondico As Object, temp As String, derli As Long
Set mondico = CreateObject("Scripting.Dictionary")
Set Plg = Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row)
For Each c In Plg
  temp = c.Value & " : " & c.Offset(, 1).Text
  mondico(temp) = mondico(temp) + 1
Next c
'On renvoie la liste des doublons en colonne E
Range("E2").Resize(mondico.Count, 1) = Application.Transpose(mondico.keys) 'Clé
derli = Range("E" & Rows.Count).End(xlUp).Row
Range("E2:E" & derli).Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess, _
                  OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                  DataOption1:=xlSortNormal
End Sub
Je n'ai pas traité la solution combobox :p
Tes fichiers 2007 converti chez moi en 2003, me renvoie ceci dans la combobox, voir l'image jointe.
Est-ce le résultat attendu ? Je vois des items similaires :(
Ai-je bien compris ceci ?
En ce qui concerne les "vrais" doublons, on ne conserve qu'un seul élément et on élimine le ou les autres ayant la même valeur.
combo.JPG
Klin89
 

Pièces jointes

  • combo.JPG
    combo.JPG
    49.9 KB · Affichages: 104
  • combo.JPG
    combo.JPG
    49.9 KB · Affichages: 104
Dernière édition:

Discussions similaires