Extraction sans doublon

Salut.

J'ai une liste de ville dans le désordre, avec des répétitions. J'ai par exemple plusieurs fois Marseille.

Mon but est d'extraire la liste des villes sans doublon. Ma liste de villes est entre la case A2 et la case A1000 (ça peut être moins). Je souhaite d'extraire la liste souhaitée entre la case L2 et la case L1000. J'enregistre donc la macro suivante :

DONNÉES -> Dans Trier et Filtrer, je clique sur Avancé -> Extraction sans doublon dans les cases souhaitées.

La macro fonctionne bien lorsque je l'exécute. Mais lorsque je modifie ma liste initiale, en en copiant une autre entre la case A2 et la case A1000, et que j'essaye d'exécuter la macro, Excel m'indique un bug, en me citant cette phrase :

Range("A2:A1000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _

"L2:L1000"), Unique:=True

Je ne comprends pas le problème.

Merci !

Bonjour,

Sans voir le fichier c'est difficile à dire pour ma part surtout que je n'ai jamais eu de problème de macro avec le filtre avancé

Enfin de ce que je vois dans le code, pour moi il n'y a qu'une source de problème potentiel:

Ton Range A2:A1000 n'est plus correct, attention, il faut que A2 soit une en-tête si tu veux pouvoir faire un filtre avancé, une autre chose dont je ne suis pas sûr, si tes données vont jusqu'à la ligne 1100 et que toi tu filtres jusqu'à la ligne 1000, ça peut être source d'erreur...

Sur un autre sujet où j'avais fait un filtre avancé j'avais utilisé cette syntaxe :

Sheets("données").Range("données[#All]").AdvancedFilter Action:=xlFilterCopy _
, CriteriaRange:=Sheets("Filtre").Range(Cellule1, Cellule2), CopyToRange:=Range _
("A1"), Unique:=False 'Réalisation du filtre

Ce qu'il faut voir c'est que je prenais tout le tableau que j'avais déclaré, tu peux faire un Range("A1").currentregion pour faire la même chose, ça revient à faire un Ctrl + A, sinon tu peux faire un range.end(xldown) ça marche aussi si tu ne veux que la colonne A et que tu as d'autres colonnes acollées à celle-ci.

Ensuite autre chose à noter, je copie le résultat du filtre sur une seule cellule, ça marche très bien comme ça

Tu peux remplacer ton Range L2:L1000 par L2 à la place

Ce qu'il faudrait écrire d'après moi :

Range("A2",Range("A2").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
 "L2"), Unique:=True

Note que j'ai essayé de filtrer une base de données sans sélectionner d'en-têtes et ça n'a pas marché, fais bien attention que tu ai tes noms de champs dans la ligne 2

Bonjour, Salut Ausecour !

J'aime assez le filtre avancé en VBA, car le code tient en une ligne et est vite écrit, c'est une des rares opérations plus rapide à réaliser en VBA qu'en manuel avec l'assistant... Par contre, l'enregistrer plutôt que l'écrire directement ne te fait rien gagner... !

Comme te l'as dit Ausecour, A2 doit être ton en-tête de colonne (le filtre avancé ne fonctionne pas sans en-tête), et pour ta zone cible n'indiquer que la première cellule, soit L2.

Pour savoir pourquoi tu as une erreur après modification de tes données, il faut savoir quelles modifications exactement et quell erreur ?

Si tu changes le libellé d'en-tête en A2 par exemple et que tu as fait un filtrage précédemment, tu auras une erreur si le filtre trouve un libellé en L2 ne correspondant pas exactement à celui de A2.

Cordialement.

Par formule je peux te proposer ça.

284doublons-ville.xlsx (10.64 Ko)
Rechercher des sujets similaires à "extraction doublon"