Comment GARDER les doublons ???

Bonjour !

Je cherche désespérément un moyen de faire un tri d'un tableau Excel monstrueux qui comprend 50 000 adresses...

Mon objectif est de garder uniquement les personnes dont les noms se répètent 3 fois et plus dans la colonne "NOM".

En ce qui concerne les noms qui sont renseignés 1 ou 2 fois, je les vire pour le moment manuellement...

Je pense qu'il existe un moyen de garder uniquement les doublons (plus précisément - des "triples", "quadruples" etc., ceci pouvant aller jusqu'à 50 répétitions du même nom) ?

Je ne suis pas à l'aise avec tout ce qui est macros, formules dans Excel !

Pourriez-vous me renseigner s'il vous plaît ?

Bonjour et bienvenue,

Avec une macro, mais pour faire, envoie la structure de ta feuille,

les en-têtes et quelques lignes suffisent

en gros, tu ne veux garder que les noms apparaissant au moins 3 fois ?

Faudra-t-il supprimer définitivement les autres lignes ?

Amicalement

Claude.

Merci pour l'accueil, Claude !!!!!!!

C'est tout à fait ça : la sélection devrait comporter des noms apparaissant au moins 3 fois et il faut supprimer définitivement les autres lignes !

Tu trouveras ci-joint un extrait du fichier.

https://www.excel-pratique.com/~files/doc2/extrait_fichier.xls

Je te remercie d'avance,

Cordialement,

[/url]

re,

Dans un module tu mets ce code

Ta feuille d'origine n'est pas affectée, tu la supprimera après vérif.

Sub Ménage()
''Macros par Claude Dubois pour "vero" Excel-Pratique le 6 Août 09
Dim Lg As Integer, Cel As Range, Nf As String
    Nf = ActiveSheet.Name
    Lg = Range("A65536").End(xlUp).Row
    Application.ScreenUpdating = False
    Sheets.Add.Name = "bibi"
    Sheets(Nf).Activate
    Range("a1:t1").Copy Destination:=Range("bibi!a1")
    Range("x2").Formula = "=$v2>=3"
    Range("v2:v" & Lg) = "=COUNTIF(R2C6:R37C6,RC[-16])"
    Range("a1:v" & Lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
    "x1:x2"), CopyToRange:=Range("bibi!a1:t1"), Unique:=False
End Sub

Amicalement

Claude.

Merci beaucoup !

J'ai essayé de mettre le texte dans une module de mon fichier via "Macro-VBE", mais ça me met "erreur type 6" et quand j'appuie sur "Débodage", la ligne qui se met en jaune est celle-là :

Lg = Range("A65536").End(xlUp).Row

Que dois-je faire ?

Cordialement,

re,

oui, j'oubliais qu'il y avait 50000 lignes

remplace au début

Dim Lg As Integer

par

Dim Lg As Long

Claude.

Re-,

C'est fait, il y a une feuille de classeur "Bibi" qui s'est créée, mais dans cette feuille il n'y a que 2 lignes. Tu la trouveras sur ce lien :

https://www.excel-pratique.com/~files/doc2/extrait2.xls

Quelle manipulation dois-je faire ?

Merci pour ta réponse !

re,

vérifie que la configuration est identique à ce que tu m'a envoyé

si les en-têtes sont bien en ligne 1

Fichier

https://www.excel-pratique.com/~files/doc2/Vero2.xls

Claude.

Re-salut,

J'ai compris en partie pourquoi ça ne fonctionnait pas : il y avait 2 feuilles dans mon fichier, et quand j'ai supprimé une feuille, ça a marché, mais pas totalement. La nouvelle feuille "bibi" contient seulement 33 lignes (répétitions).

J'ai fait un 2e essai : j'ai trié tous les noms par ordre alphabétique, et puis j'ai activé la macro. La nouvelle feuille "bibi" contient 13 lignes de répétition, je pense que la manip ne va pas plus loin que la ligne 50 de la feuille de départ.

Aurais-tu une explication ?

re,

pas besoin de tri !

envoie tes 20 premières lignes complètes et sans rien changer

Le fichier démo fonctionne ?

Claude.

Re-,

Voici les 20 premières lignes sans changement :

https://www.excel-pratique.com/~files/doc2/20_lignes.xls

Le fichier démo fonctionne parfaitement !!!!!

Cordialement,

re,

La macro fonctionne bien également sur ton fichier 20 lignes,

Avant de lancer la macro, tu doit supprimer la feuille "bibi"

as-tu bien mis le code dans un module (et pas dans une feuille VBE) ?

La colonne A est-elle renseignée complètement ?

Si çà coince, envoie carément une copie du fichier auquel tu aura supprimer 49800 lignes

vire les autres feuilles

çà doit marcher !

Je reviens vers 19 h

Claude.

Re !

Je suis vraiment désolée, mais j'ai tout essayé et ça ne fonctionne toujours pas !

Pour répondre à tes questions :

Je supprimais la feuillé "bibi" à chaque fois que je refaisais la manip, de toute façon si on ne la supprime pas, il y a un message d'erreur, lol !

J'ai mis le code dans un module et non dans une feuille VBE.

La colonne A est renseignée complètement, c'est dans la colonne "NOM" qu'il y a des lacunes.

J'avais essayé aussi en supprimant des lignes différentes dans la feuille de départ, j'ai l'impression que c'est la feuille "bibi" qui ne veut pas accepter plus de 35 lignes...

Je t'envoie ci-joint un classeur où à partir de 49 000 et quelque lignes, les noms ne sont plus renseignés.

https://www.excel-pratique.com/~files/doc2/Fin_classeur.xls

Je reviens vers 20h

Si on y arrive pas, pourrais-je te faire parvenir toute la base (pèse 4 Mo zippée) pour que tu puisse regarder ?

Merci infiniment !

Véronika

re,

J'ai trouvé, l'erreur était dans la formule,

j'aurai du commencé par vérifier çà !

Remplace le code complet par celui-ci (même emplacement)

Sub Ménage()
''Macros par Claude Dubois pour "vero" Excel-Pratique le 6 Août 09
Dim Lg As Long, Nf As String, X, Y
    X = Time
    Nf = ActiveSheet.Name
    Lg = Range("A65536").End(xlUp).Row
    Application.ScreenUpdating = False
    Sheets.Add.Name = "bibi"
    Sheets(Nf).Activate
    Range("a1:t1").Copy Destination:=Range("bibi!a1")
    Range("x2").Formula = "=$v2>=3"
    Range("f2:f" & Lg).Name = "toto"
    Range("v2:v" & Lg) = "=COUNTIF(toto,RC[-16])"
    Range("a1:v" & Lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
    "x1:x2"), CopyToRange:=Range("bibi!a1:t1"), Unique:=False
    Y = Time
    MsgBox ("temps macro = " & Format(Y - X, "hh:mm:ss"))
End Sub

édit: ajouté chrono, tu me diras le temps du traitement

mea culpa

Claude.

Merci beaucoup, Claude !!!!!!

Ça a marché !!!!!!!!!!!!!!

Quand tu as un peu de temps, tu pourra m'expliquer où était l'erreur ?

Je te remercie cordialement !

Bonne soirée !

Véro

re,

l'erreur, on ne comptait que jusqu'à la ligne 37

Range("v2:v" & Lg) = "=COUNTIF(R2C6:R37C6,RC[-16])" 

j'ai donc nommé la plage "toto"

Range("f2:f" & Lg).Name = "toto"
Range("v2:v" & Lg) = "=COUNTIF(toto,RC[-16])"

j'aurai voulu connaitre le temps de traitement (curiosité pour les 50000 lignes) ?

Amicalement

Claude.

Salut Claude !

Merci beaucoup encore une fois !!!!

Désolée de ne pas avoir répondu, j'étais partie vendredi.

Le traitement du fichier avec ton macro a pris environ 35-40 minutes.

Bonne continuation et j'espère à bientôt !

Cordialement,

Véronika

Bonjour,

35 minutes, c'est beaucoup trop !, cela ne devrait pas dépasser la minute)

ton fichier doit avoir d'autres macros (événementielles non ?)

C'est une action que tu auras à renouveler régulièrement ? auquel cas il faudra revoir la

macro.

Sinon, n'oublie pas la petite formalité :

1H0T7resolu

Amicalement

Claude.

Re-bonjour !

Non, le fichier n'avait pas d'autres macros...

Il a fait un calcul et puis ce qui a pris le plus de temps, c'était le recalcul des lignes qui s'affichait en bas de page...

Pour le moment le renouvellement de l'action n'est pas prévu.

Désolée, je n'ai pas compris la formalité ? Cela sert à faire quoi ?

Cordialement,

Véronika

6mco.xlsm (39.26 Ko)

re,

Je revois la macro pour ma culture personnelle,

La petite formalité (résolu), çà sert à faire savoir au forum que le fil à été réglé,

donc plus la peine de chercher inutilement une solution.

Amicalement

Claude.

édit: après modif macro j'arrive à 7 minutes, testé sur 50 000 lignes,

mais comme j'ai fait des copies de lignes, il reste encore 42 000 lignes dans la feuille "bibi",

Combien en restaient-il sur ton fichier réel ?

Rechercher des sujets similaires à "comment garder doublons"