Dédoublonnage croustillant

excel_is_amazing

XLDnaute Nouveau
Bonjour les experts,

J'ai été impressionné par le nombre et la qualité des réponses. Du coup, je me lance.
Le soucis est le suivant, j'ai un fichier avec 240 000 lignes et un vingtaines de colonnes.

Dans ce fichier, j'ai une clef primaire, l'adresse email. Mon soucis est le suivant :
je peux avoir une ligne avec juste l'email, l'email avec 3/4 champs remplis et une dernière avec l'email plus beaucoup de champs remplis.

Ce que je cherche à faire c'est éliminer les doublons tout en gardant la ligne la plus renseignée (celle contenant le plus de d'infos). Par exemple :

M / Gates / bill / / / PDG / non / FR / bill.gates@microsoft.com
M / Gates / bill / Microsoft / edition logiciel / PDG / non / FR / bill.gates@microsoft.com
/ / / / / / non / FR / bill.gates@microsoft.com

Je cherche à garder la seconde ligne (la plus renseignée).
Je peux avoir un, deux, trois ou plus de doublon sur la clef Email.

Je vous ai joint un exemple.

l'idée, c'est donc de toujours garder une seule ligne, celle avec le plus de renseignement.
 

Pièces jointes

  • exemple.xls
    33.5 KB · Affichages: 47
  • exemple.xls
    33.5 KB · Affichages: 53
  • exemple.xls
    33.5 KB · Affichages: 50

Victor21

XLDnaute Barbatruc
Re : Dédoublonnage croustillant

Bonsoir, et bienvenue sur le forum.


En attendant d'autres pistes :
le nombre de caractères de la concaténation des 20 colonnes en U2 par exemple à recopier ves le bas :
=NBCAR(A2&B2&C2&D2&E2&F2&G2&H2&I2&J2&K2&L2&M2&N2&O2&P2&Q2&R2&S2&T2)
vous donnera, pour chaque nom, la ligne la plus remplie.

Un tri d'abord sur le nom, puis en 2° clé sur ce nombre placera la ligne de chaque nom la plus remplie en tête.
 

Softmama

XLDnaute Accro
Re : Dédoublonnage croustillant

Bonjour excel_is_amazing, Salutations Victor21,

Une proposition par macro qui ne devrait pas trop trop mouliner, vu la nombre de lignes à traiter... :p
VB:
Sub test()
Dim c As Range, nLig As Long,  t#, x#
Application.ScreenUpdating = False
nLig = Split(ActiveSheet.UsedRange.Address, "$")(4)
With Range("IV2:IV" & nLig)
  .FormulaR1C1 = "=R[-1]C+IF(RC11=R[-1]C11,0,1)"
  .Value = .Value
End With
For t = 1 To Application.Max(Range("IV:IV"))
  Set Zonerech = Range("A" & Application.Match(t, Range("IV:IV"), 0) & ":T" & Application.Match(t, Range("IV:IV"), 0) + Application.CountIf(Range("IV:IV"), t) - 1)
    For x = 1 To 20
      Set c = Intersect(Columns(x), Zonerech)
      With Cells(nLig + t, x)
        .FormulaArray = "=MIN(IF(NOT(ISBLANK(" & c.AddressLocal & ")),ROW(" & c.AddressLocal & ")))"
        If .Value > 0 Then .Value = Cells(.Value, x) Else .Value = ""
      End With
    Next x
Next t
Range("A2:T" & nLig).Delete xlUp
Range("IV:IV").Clear
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • Exemple.xls
    50 KB · Affichages: 35
  • Exemple.xls
    50 KB · Affichages: 40
  • Exemple.xls
    50 KB · Affichages: 40
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Dédoublonnage croustillant

Bonjour à tous,

@Victor;
je préfèrerais utiliser la fonction = nombredecolonneparligne - NB.VIDE qui donnera le nombre de cellules non-vides par ligne

si dans une ligne, il y a 10 cellules remplies avec un seul caractère
et que dans une autre ligne il y a une seule cellule remplie avec 20 caractères

la fonction NBCAR considérera que c'est cette seconde ligne qui est la plus complète
tandis qu'avec NB.VIDE, le résultat est plus proche de la réalité

à+
Philippe

Edit: Bonjour Softmama
 

PMO2

XLDnaute Accro
Re : Dédoublonnage croustillant

Bonjour,

Une piste avec l'exemple joint.

Le résultat s'affiche dans une nouvelle feuille et laisse intacte la feuille source.
Il conviendra de changer la constante FEUILLE_SOURCE à votre usage.
Si cela fonctionne, je serais intéressé de savoir combien dure le traitement pour 240.000 lignes.
Merci de me le faire savoir.

A plus.
 
Dernière édition:

excel_is_amazing

XLDnaute Nouveau
Re : Dédoublonnage croustillant

wow, ok, vous êtes impressionnants.
Je dois avouer que j'ai fréquenter pas mal de forums mais avoir 3 réponses qualifiées à un problème croustillant en moins de 24h, c'est impressionnant... Vraiment.

Bon je vais tester tout ca et vous dire les résultats en terme de timing sur mon I7/4Go/Win7.
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 144
Membres
103 129
dernier inscrit
Atruc81500