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:

Si...

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

salut

Si... la liste n'est pas longue, avec une macro simple :
le premier fichier avec un contrôle "ListBox" pour mieux voir mais sans tri.
le second avec un contrôle "ListView" qui permet de trier, par simple clics sur les titres, par colonne et en ordre croissant ou décroissant.
 

Pièces jointes

  • GetMultiples.xls
    40.5 KB · Affichages: 66
  • SupprimeUniques.xls
    37.5 KB · Affichages: 50

Magic_Doctor

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

Bonjour,

Je relance ce fil.
J'ai choisi la solution de pierrejean qui me semble la plus adaptée pour mon application. Merci aux autres pour leur intérêt.
Néanmoins, il demeure un problème que je n'ai pas réussi à résoudre.
Dans la ComboBox apparaissent les doublons, disons, ambigus. J'entend par là des doublons qui ont le même nom mais pas la même masse volumique (les vrais doublons : même noms + même masse volumique ayant été automatiquement éliminés). À l'opérateur, ensuite, de faire la part des choses et d'éliminer le doublon dont la masse volumique est fausse. En conséquence, dans la liste de la ComboBox figurent les produits avec leur masse volumique respective. Pour des raisons de look, je voudrais, quand on ouvre la ComboBox, que le 1er item (avec sa masse volumique bien sûr) apparaisse ; si l'on veut l'éliminer, il suffira alors de cliquer sur le bouton "OK". Mais voilà, l'item sélectionné apparaît bien, mais non suivi de sa masse volumique.
Un grand merci pour m'aider à y remédier, si tant est que ce soit possible.
 

Pièces jointes

  • GetDoublons.xlsm
    45.5 KB · Affichages: 50
  • GetDoublons.xlsm
    45.5 KB · Affichages: 50
  • GetDoublons.xlsm
    45.5 KB · Affichages: 50

Magic_Doctor

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

Bonjour pierrejean,

Pas pu répondre avant.
D'abord un grand merci pour ton aide précieuse.
Tes solutions (#18 & #19) marchent parfaitement.
Personnellement, j'aurais préféré utiliser ta dernière solution (#20) car je la trouve plus élégante et plus concise, mais, pour une raison que je ne m'explique vraiment pas, elle ne marche pas dans mon application. J'ai tenté de chercher la raison un bon moment, mais impossible de supprimer un doublon sélectionné. Bizarre...

Muy buenas noches
 

Magic_Doctor

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

Re,

En fait c'est allé beaucoup plus vite que prévu.
Je t'explique succinctement mon application.
1ère colonne : on rentre un produit
2ème colonne : on rentre sa masse volumique
On ne peut écrire que dans ces 2 colonnes.

Certains en-têtes sont encadrés en rouge. On peut cliquer dessus et des choses évidentes se passent.

3ème & 4ème colonnes : les items des 2 1ères colonnes sont récupérés sans doublons via un dictionnaire.
On peut les trier soit par familles (but de cette application) soit par ordre alphabétique.
Quand on rentre un nouveau produit avec sa masse volumique, par défaut, dans la 3ème colonne, il sera blanc (il n'appartient encore à aucune famille). Il suffit de double-cliquer dessus pour qu'apparaisse un USF. On n'a plus qu'à lui attribuer la couleur de famille à laquelle il appartient.

5ème colonne : colonne des familles. Chaque famille chimique a sa propre couleur. quand on double-clique sur une des cellules apparaît la palette des couleurs pour éventuellement modifier la couleur de la famille. Si l'on fait 2 double-clics successifs, apparaît alors la boîte de dialogue des polices pour modifier éventuellement la police et/ou sa couleur.
Les 2 derniers items ne sont pas des familles à proprement parler. "Divers" <=> inclassables / "Inclassés" <=> en attente d'être classés (toujours blancs).
6ème colonne : indique le nombre d'items appartenant à chaque catégorie (familles / "Divers" & "Inclassés").

7ème colonne : quand on double-clique sur une des cellules, apparaît alors la palette des couleurs. Ce sont les couleurs des cellules des 1ère, 2ème & 4ème colonnes.

ComboBox :
- "Longueur liste" : on peut rajouter ou supprimer des lignes dans le tableau des saisies sans jamais pour autant supprimer une ligne où il y a déjà quelque chose.
- "Relookages" : on peut modifier la couleur du bandeau et celle de la feuille (sans interférer avec les tableaux qui y sont).
- "Modifications" : on peut rajouter, supprimer ou modifier une ou des familles dans la 5ème colonne. En revanche, on ne peut supprimer les items "Divers" & "Inclassés". On peut quand même modifier la couleur et/ou la police de l'item "Divers" mais pas de l'item "Inclassés". Enfin, on peut aussi avoir accès à l'ensemble de la feuille (montre les colonnes occultes) au cas où l'on voudrait la modifier.
À noter que pour les modifications il faut entrer un mot de passe qui est "zaza".

Passons maintenant aux doublons. Si l'on rentre un doublon dans la 1ère colonne, automatiquement il sera supprimé dans la 3ème colonne (because Dictionary...). La présence d'un doublon est automatiquement détectée et apparaît alors dans le bandeau la lettre "D" (en rouge). Il suffit de cliquer sur celle-ci pour qu'apparaisse ton USF où sont classés tous les doublons. Il ne reste plus qu'à éliminer les doublons inutiles (ceux dont la masse volumique est fausse ; d'où l'intérêt de conserver une trace des doublons pour vérifier d'éventuelles erreurs, et concernant les masses volumiques ce peut être assez fréquent). Une fois les doublons éliminés la lettre "D" disparaît.
Le problème se trouve donc dans le module de l'USF "USF_Doublons" :
VB:
        If UBound(z) > 1 Then
            For m = LBound(z) To UBound(z) - 1
                Me.ComboBox1.AddItem clef(n)
                Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = z(m)
                'Me.ComboBox1.AddItem clef(n) & "  " & z(m)
            Next
        End If
Il s'agit là d'une grosse compilation de plein d'astuces que je dois aux "caïds" du forum et qui sont tous nommés dans les macros.
Un grand merci au passage au forum et à ses "caïds" sans lesquels grand nombre d'applications (dont les miennes) n'auraient jamais abouti.
 

Pièces jointes

  • pierrejean.xlsm
    643.1 KB · Affichages: 29
  • pierrejean.xlsm
    643.1 KB · Affichages: 33
  • pierrejean.xlsm
    643.1 KB · Affichages: 39

pierrejean

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

Re

Je pense avoir résolu le problème
Teste ceci
Attention : tel que il y a 2 petits problèmes: Une page absente et une macro absente (StopHorloge)
Par ailleurs j'ai eu des comportements curieux avec des copier/coller
 

Pièces jointes

  • pierrejean_b.xlsm
    643.7 KB · Affichages: 42
Dernière édition:

Magic_Doctor

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

Bonjour pierrejean,

Pas pu répondre avant.
La solution était donc de "Trimer", je n'y aurais pas pensé. Merci, ça marche impec maintenant.

Effectivement, en voulant minimaliser le classeur, j'ai omis de supprimer certaines sentences. En voulant trop bien faire voilà comment on commet des erreurs.

Bonne soirée.
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 942
Membres
101 849
dernier inscrit
florentMIG