Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Récupérer toutes les valeurs présentes dans un filtre automatique sur une colonne

Franco70

XLDnaute Nouveau
Bonsoir à tous,
Je galère sur le sujet du titre.
Je voudrais récupérer par macro l'ensemble des valeurs présentes dans un filtre automatique sur une colonne.
Soit mettre chacune de ces valeurs dans une variable propre, soit les récupérer et les mettre dans un tableau.

Merci pour votre aide car je sèche sur le sujet.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

@Franco70
Voir ce petit bout de code
VB:
Sub test()
Dim d_l&, col&
col = 1
d_l = Cells(Rows.Count, col).End(xlUp).Row
Dim vArr(), dict As Object, r As Long
Set dict = CreateObject("Scripting.Dictionary")
vArr = Range(Cells(2, col), Cells(d_l, col)).Value
For r = 1 To UBound(vArr)
dict(vArr(r, 1)) = Empty
Next
vArr = WorksheetFunction.Transpose(dict.keys())
Cells(1, 2).Resize(UBound(vArr, 1)) = vArr
End Sub
Pour tester mettre des valeurs (avec quelques doublons) en colonne A
Et voir le résultat obtenu en colonne B
 

Staple1600

XLDnaute Barbatruc
Bonsoir

Elle utilise un dictionnaire (CreateObject("Scripting.Dictionary")

Mais on peut faire plus classique (voir ci-dessous deux exemples)
VB:
Sub PlusClassique_A()
Dim dl&
dl = Cells(Rows.Count, 1).End(xlUp).Row
Range("A1:A" & dl).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("B1"), Unique:=True
End Sub
Sub PlusClassique_B()
Dim t, dl&
dl = Cells(Rows.Count, 1).End(xlUp).Row
t = Range("A1:A" & dl).Value
Cells(1, 2).Resize(UBound(t, 1), UBound(t, 2)).Value = t
Application.DisplayAlerts = False
Range("B:B").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@Staple1600

Attention suivant les versions la 1ere ligne ( les entêtes en principe ) remontent ou pas
(J'ai rajouté la version B sans entête )



Comme il parle de filtre on pourrait en déduire qu'il a des entêtes mais on entre dans la spéculation.
A voir comment sont les données de @Franco70 car j'ai pas vu son fichier

@Phil69970
 

Franco70

XLDnaute Nouveau
Voici le fichier, ma demande concerne les filtres présents sur les 2 premières colonnes (MOD APP et MOD NA) dans le premier onglet.
La première concerne des numéros de modifications appliquées sur des voilures avion.
La deuxième concerne des numéros de modifications NON appliquées à ces mêmes voilures.
Les données à récupérer sont donc l'ensemble des choix possibles dans chacun des filtres des 2 premières colonnes (MOD APP et MOD NA).

Les tests ont été effectués dans le 2ème onglet avec les données de la colonne MOD NA..
Après test des 3 macros sur la colonne MOD NA, elles effectuent toutes le travail de la même façon et avec le même résultat (la différence est que la "PlusClassique_A" fait "sauter" les filtres).
Cela fonctionne, cependant il apparait qu'il y a une cellule vide au milieu de la nouvelle liste contenant les données extraites (ligne n°4 entre les modifs "827" ligne 3 et "350 827 1091 1220" ligne 5).

Tests effectués avec les macros suivantes :

MACRO 1 :

Sub test()
Dim d_l&, col&
col = 1
d_l = Cells(Rows.Count, col).End(xlUp).Row
Dim vArr(), dict As Object, r As Long
Set dict = CreateObject("Scripting.Dictionary")
vArr = Range(Cells(2, col), Cells(d_l, col)).Value
For r = 1 To UBound(vArr)
dict(vArr(r, 1)) = Empty
Next
vArr = WorksheetFunction.Transpose(dict.keys())
Cells(2, 2).Resize(UBound(vArr, 1)) = vArr
End Sub

MACRO 2 :

Sub PlusClassique_A()
Dim dl&
dl = Cells(Rows.Count, 1).End(xlUp).Row
Range("A2:A" & dl).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("B2"), Unique:=True
Range("B:B").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

MACRO 3 :

Sub PlusClassique_B()
Dim t, dl&
dl = Cells(Rows.Count, 1).End(xlUp).Row
t = Range("A2:A" & dl).Value
Cells(2, 2).Resize(UBound(t, 1), UBound(t, 2)).Value = t
Application.DisplayAlerts = False
Range("B:B").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

Voilà pour les informations.
 

Pièces jointes

  • Fichier Test Mod APP et Mod NA.xlsm
    70 KB · Affichages: 4

Franco70

XLDnaute Nouveau
Tout simplement obtenir la liste des éléments sélectionnables dans chacun de ces filtres.
C'est bien ce que font les 3 macros proposées par Staple1600.
Il y a juste un "trou" une cellule vide dans la liste une fois les données extraites, comme expliqué dans mon message précédent et la macro 2 "Plus classique A" fait "sauter" les filtres appliqués sur la ligne des titres.

Voir le fichier joint à mon précédent message.
 

ChTi160

XLDnaute Barbatruc
Re
ca Confirme que je n'ai rien compris
Tu parles de Filtre mais !
Tout simplement obtenir la liste des éléments sélectionnables dans chacun de ces filtres.
Nul part dans les macros on ne fait référence aux Plage Filtrées Lol
J'ai fait un filtre sur la Colonne "A" , et le retour est toujours la Liste de toutes les données uniques de la Colonne "A" sans tenir compte du filtre. (Qui exclut certaines données Lol)
D'où ma question !
Excuses
tu peux mettre le Fil comme "résolu "
Jean marie
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…