XL 2016 Selection.AdvancedFilter Action:=xlFilterCopy

Deadpool_CC

XLDnaute Accro
Bonjour à tous,

Dans le fichier exemple joint, dans ma Sub ImportCSV ... je veux créer des listes sans Doublon issuent de données dans une colonne d'un autre onglet.
Je m'en sors ... SAUF QUE la donnée de la première ligne coté 'source' (si on la retrouve dans les autres lignes de la source) ... n'est pas Unique dans la copie de 'Destination'.

Pour copier les données (de la plage source vers la cible) j'utilise ce code :

VB:
    Worksheets("BDD").Range(Range("A2"), Range("A20000").End(xlUp)).Select
    Selection.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Parametres").Range("BasesSF"), Unique:=True

Et le méchant résultat, une fois trié automatiquement est :
1670520604029.png


Vous auriez une idée sur l'origine du problème ? et surtout comment le contourner :)
Merci d'avance aux bons samaritains

Signé : La Poule du Mort
 

Pièces jointes

  • Exemple.xlsm
    68.7 KB · Affichages: 8
Solution
alors.. ce que j'ai vu
ici: https://trumpexcel.com/excel-advanced-filter/#Example-1-Extracting-a-Unique-list
avec cette note:
Caution: When you are using Advanced Filter to get the unique list, make sure you have also selected the header. If you don’t, it would consider the first cell as the header.
==> la première ligne selectionnée est considéré comme un header

ensuite..la cellule cible doit etre vide
j'ai défini comme "Destination" UNE cellule en P1
procédure que je viens de tester:
1) D1 vide, et j'execute
Sheets("BDD").Range("A2:A201").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets("Parametres").Range("Destination"), Unique:=True
j'ai un doublon qui reste = A2

2) SANS effacer D1...

Deadpool_CC

XLDnaute Accro
Salut @vgendron

En fait, j'ai testé dans tous les sens avant de vous embêter avec cela :
si je prend depuis A1
VB:
Worksheets("BDD").Range(Range("A1"), Range("A20000").End(xlUp)).Select
Selection.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Parametres").Range("BasesSF"), Unique:=True
il me mets la cellule de titre comme valeur
1670524882862.png

et si j'essaye de cibler 'L1' pour au pire écraser le titre
VB:
Worksheets("BDD").Range(Range("A1"), Range("A20000").End(xlUp)).Select
Selection.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Parametres").Range("A1"), Unique:=True

Alors sur la ligne "Selection.AdvancedFilter ..." :
1670525073215.png


...a s'arracher le peu de cheveux qu'il me reste :)


... allez je quitte le taf : direction SweetHome ... a demain pour lire toutes vos excellentes idées !
 

vgendron

XLDnaute Barbatruc
alors.. ce que j'ai vu
ici: https://trumpexcel.com/excel-advanced-filter/#Example-1-Extracting-a-Unique-list
avec cette note:
Caution: When you are using Advanced Filter to get the unique list, make sure you have also selected the header. If you don’t, it would consider the first cell as the header.
==> la première ligne selectionnée est considéré comme un header

ensuite..la cellule cible doit etre vide
j'ai défini comme "Destination" UNE cellule en P1
procédure que je viens de tester:
1) D1 vide, et j'execute
Sheets("BDD").Range("A2:A201").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets("Parametres").Range("Destination"), Unique:=True
j'ai un doublon qui reste = A2

2) SANS effacer D1, j'execute
Sheets("BDD").Range("A1:A201").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets("Parametres").Range("Destination"), Unique:=True
==> Message d'erreur: Nom de champ....
3) j'efface D1
et j'execute
Sheets("BDD").Range("A1:A201").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets("Parametres").Range("Destination"), Unique:=True

==> plus de doublon, mais la ligne d'entete "Base" apparait"

Voila :-D
 

Laurent78

XLDnaute Occasionnel
Salut @vgendron

En fait, j'ai testé dans tous les sens avant de vous embêter avec cela :
si je prend depuis A1
VB:
Worksheets("BDD").Range(Range("A1"), Range("A20000").End(xlUp)).Select
Selection.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Parametres").Range("BasesSF"), Unique:=True
il me mets la cellule de titre comme valeur
Regarde la pièce jointe 1157505
et si j'essaye de cibler 'L1' pour au pire écraser le titre
VB:
Worksheets("BDD").Range(Range("A1"), Range("A20000").End(xlUp)).Select
Selection.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Parametres").Range("A1"), Unique:=True

Alors sur la ligne "Selection.AdvancedFilter ..." :
Regarde la pièce jointe 1157506

...a s'arracher le peu de cheveux qu'il me reste :)


... allez je quitte le taf : direction SweetHome ... a demain pour lire toutes vos excellentes idées !
Bonjour,

De retour au boulot ? Les cheveux au vent ? ;)

Dans la mesure où AdvancedFilter prend forcément en compte les entêtes, l'astuce consiste à supprimer la cellule et de décaler vers le haut. à retester, vérifier, conrôler, bien sûr !

VB:
    Worksheets("BDD").Activate
    Worksheets("BDD").Range(Range("A1"), Range("A20000").End(xlUp)).Select
    Selection.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Parametres").Range("BasesSF"), Unique:=True
    Worksheets("Parametres").Range("L2").Delete xlShiftUp
    
    Worksheets("BDD").Range(Range("E1"), Range("E20000").End(xlUp)).Select
    Selection.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Parametres").Range("dateDepart"), Unique:=True
    Worksheets("Parametres").Range("M2").Delete xlShiftUp
 

job75

XLDnaute Barbatruc
Bonsoir à tous,

Voyez le fichier joint, pour que le code de la macro ImportCSV fonctionne correctement il faut 3 choses :

1) La plage du filtre avancé doit commencer en ligne 1 pour inclure les en-têtes.

2) Les noms "BasesSF" et "dateDepart" doivent se référer aux cellules L1 et M1.

3) Les en-têtes des colonnes source et destination doivent être les mêmes.

Et par pitié épargnez nous les Select et autres Activate, c'est vraiment pénible et surtout inutile.

A+
 

Pièces jointes

  • Exemple (1).xlsm
    65.3 KB · Affichages: 8

Deadpool_CC

XLDnaute Accro
Bonjour,
un grand merci pour vos infos je devrais pouvoir m'en sortir :)

@job75 : le projet commence à peine et vu que je n'ai pas fait un vrai projet VBA depuis un paquet d'année (c'est plus mon mon métier :) ), je passe par un phase avec les Activate et Select pour être certain que cela fait ce que je veux que cela fasse. Je ferais du nettoyage plus tard :)
[Edit] et J'espère que cela va mieux de ton coté ... Bon courage à toi.
 

Statistiques des forums

Discussions
312 207
Messages
2 086 246
Membres
103 163
dernier inscrit
Pelaez