XL 2016 Détecter des doublons dans une colonne de 400.000 lignes

Markoko

XLDnaute Nouveau
Bonjour à tous,

je cherche une solution pour détecter les doublons dans une colonne de 400.000 lignes. Avec la formule ci : =SI(NB.SI($A$2:A10;A10)>1;"Doublon";" "). ça se plante

voici un exemple de résultat que j'aimerai avoir.

Merci pour votre précieuse aide
 

Pièces jointes

  • doublon.xlsx
    9.1 KB · Affichages: 30

Lolote83

XLDnaute Barbatruc
Bonjour MARLOKO,
Si l'utilisation des formules fait "planter" ton fichier, peut être faut-il passer par une macro VBA.
Mais vu le nombre de ligne, je ne suis pas sur que cela ne plantera pas le fichier. C'est simplement une autre piste.
Voir fichier joint
@+ Lolote83
 

Pièces jointes

  • Copie de MARKOKO - RechercheDoublons.xlsm
    17.8 KB · Affichages: 9

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Markoko, et bienvenu sur XLD,
Votre formule est correcte, mais appliquée à 400 000 lignes, sur mon PC ça rame énormément et XL me dit que mes ressources sont trop faibles.
Ce n'est pas la formule qui plante ... mais votre PC. :)
Peut être une piste en VBA en PJ avec :
VB:
Option Explicit: Option Base 1
Sub Doublons()
    Dim DL, i, N, Tablo
    Application.ScreenUpdating = False: N = 1
    DL = Range("A1000000").End(xlUp).Row
    ReDim Tablo(DL)
    [B:B].ClearContents
    For i = 2 To DL
        If Application.CountIf(Range("A2:A" & i), Cells(i, "A")) > 1 Then Tablo(i) = "Doublon"
        N = N + 1
        If N = 100 Then
            Application.StatusBar = "Progression : " & i
            N = 0
        End If
    Next i
    Range("B1").Resize(UBound(Tablo), 1).Value = Application.Transpose(Tablo)
    Application.StatusBar = ""
End Sub
N ne sert à rien si ce n'est à montrer la progression dans le statusbar.
Mais même là ça rame, mais ne plante pas.
PS : Pensez à accepter les macros.
 

Pièces jointes

  • doublon.xlsm
    49 KB · Affichages: 7

Markoko

XLDnaute Nouveau
Re,

une autre formule beaucoup plus légère qui donne le résultat en moins de 10s sur mon PC de 14 ans d'age.
En B2 :
VB:
=SI(EQUIV(A2;$A$1:$A$500000;0)=LIGNE();"";"Doublon")
eric
Merci Eriiic ça marche super bien et en moins de 7 secondes.

Re,

une autre formule beaucoup plus légère qui donne le résultat en moins de 10s sur mon PC de 14 ans d'age.
En B2 :
VB:
=SI(EQUIV(A2;$A$1:$A$500000;0)=LIGNE();"";"Doublon")
eric
 

patricktoulon

XLDnaute Barbatruc
bonjour
identifier les doublons
en voilà une belle histoire
oui mais de quelle façon
formule non matricielle (à étirer vers le bas)
pointer les doubles triples etc ...
=REPT("doublon";NB.SI($A$2:$A$100;A16)>1)

ou

pointer seulement les suivants
=REPT("doublon";NB.SI($A$1:$A2;A2)>1)

démo
1644665796004.png
 

Markoko

XLDnaute Nouveau
bonjour
identifier les doublons
en voilà une belle histoire
oui mais de quelle façon
formule non matricielle (à étirer vers le bas)
pointer les doubles triples etc ...
=REPT("doublon";NB.SI($A$2:$A$100;A16)>1)

ou

pointer seulement les suivants
=REPT("doublon";NB.SI($A$1:$A2;A2)>1)

démo
Regarde la pièce jointe 1130628
Merci Patricktoulon. Ta proposition avec les valeurs en triple aurait été idéal pour moi mais ca tourne sans cesse avec mes 389388 lignes
 

eriiic

XLDnaute Barbatruc
Elle est conçue pour être efficiente à différencier la 1ère occurence des autres et rien de plus.
Seule la 1ère occurence n'est pas marquée, elle marque donc aussi les triplets etc.
S'il te faut les compter, tu dois repartir sur des solutions plus gourmandes sur les grandes plages ou par macro.
eric
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
à tout hasard
les vrai uniques

les doubles,triples,etc

et la DicoCountOrder

peut être q'une fonction perso en formule ira plus vite (à tester)
 

Discussions similaires

Réponses
26
Affichages
794

Statistiques des forums

Discussions
311 730
Messages
2 081 978
Membres
101 854
dernier inscrit
micmag26