Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Valeurs dans une filterDataBase

11 réponses
Avatar
Le Nordiste
Bonjour =E0 tous,

Je d=E9sire :
1) Connaitre le nombre de valeurs diff=E9rentes dans une colonne de
_filterDataBase,
J'ai filtr=E9 en colonne "A" et veux lire les valeurs de la
coilonne "B"
2) R=E9cup=E9rer ces diff=E9rentes valeurs sans doublon


Et je s=E9che sur ces Pb, je suis sur de trouver ici solutions
Merci

10 réponses

1 2
Avatar
Le Nordiste
Tout cela en VBa bien entendu.

Et exigeant qu'il est (lol)
Avatar
Daniel.C
Bonjour.
Essaie :

Sub test()
Dim Plage As Range, Coll As Collection, c As Range, Ctr As Long
Set Plage = Range("_filterdatabase").Offset(1)
Set Plage = Plage.Resize(Plage.Rows.Count -
1).SpecialCells(xlCellTypeVisible)
Set Plage = Intersect(Plage, [B:B])
Plage.Select
Set Coll = New Collection
On Error Resume Next

'add unique items to collection
For Each c In Plage
Coll.Add CStr(c), CStr(c)
Next
On Error GoTo 0
For Each Item In Coll
Ctr = Ctr + 1
Cells(Ctr, 6) = Item
Next Item
MsgBox Ctr
End Sub

Cordialement.
Daniel
"Le Nordiste" a écrit dans le message de
news:
Bonjour à tous,

Je désire :
1) Connaitre le nombre de valeurs différentes dans une colonne de
_filterDataBase,
J'ai filtré en colonne "A" et veux lire les valeurs de la
coilonne "B"
2) Récupérer ces différentes valeurs sans doublon


Et je séche sur ces Pb, je suis sur de trouver ici solutions
Merci
Avatar
Le Nordiste
daniel merci,

Je viens de tester vite fait cela m'ote une épine du pied.
je vais adapter ton code à mon besoin mais l'idée de base te reviens,
merci.
Avatar
Le Nordiste
Ok pour ton code Daniel,

mais je suis sous excel 2007 et vu le nombre de lignes à traiter
(>75000) je cherche à éliminer le maximum de boucles.
n'y a t'il pas une fonction -perso ou native- pour reprendre les
valeurs filtrées sans doublon ?

Comment fait la fonction filtre pour constituer sa liste déroulante ?
Avatar
Alfred WALLACE
bonjour Daniel.C

j'ai regardé ton code et si tu permets je te pose les
question dans les lignes :


On 14 mai, 11:26, "Daniel.C" wrote:
Bonjour.
Essaie :

Sub test()
Dim Plage As Range, Coll As Collection, c As Range, Ctr As Long

Set Plage = Range("_filterdatabase").Offset(1)
Set Plage = Plage.Resize(Plage.Rows.Count - 1).SpecialCells(xlCellTy peVisible)


là j'ai remplacé ces lignes par :

Selection.CurrentRegion.Select
Set Plage = Selection.CurrentRegion

Set Plage = Intersect(Plage, [B:B])
Plage.Select





Set Coll = New Collection
On Error Resume Next






'add unique items to collection
For Each c In Plage
Coll.Add CStr(c), CStr(c)
Next
On Error GoTo 0


c'est surement que je ne connais pas la syntaxe, mais, pourquoi çà
"add unique items" ??



For Each Item In Coll
Ctr = Ctr + 1
Cells(Ctr, 6) = Item
Next Item

MsgBox Ctr


est-ce que coll.count est valide ?


End Sub



je me dis que je peux utiliser cette methode pour faire un filtre
élaboré avec
une extraction unique dans une autre plage de cellule (ce que l'on
fait
en passant par le menu).


Dernière question, comment je peux "détruire" cette collection ?
l'éffacer ? pour
éventuellement changer de colonne ?


Merci encore pour vos commentaires et aide !

José

Avatar
isabelle
bonjour Le Nordiste,

une solution serait de copier le résultat du filtre sur une feuille temporaire,
et d'appliquer un filtre sans doublon sur cette nouvelle feuille.

isabelle

Ok pour ton code Daniel,

mais je suis sous excel 2007 et vu le nombre de lignes à traiter
(>75000) je cherche à éliminer le maximum de boucles.
n'y a t'il pas une fonction -perso ou native- pour reprendre les
valeurs filtrées sans doublon ?

Comment fait la fonction filtre pour constituer sa liste déroulante ?


Avatar
Alfred WALLACE
Dernière question, comment je peux "détruire" cette collection ?
l'éffacer ? pour
éventuellement changer de colonne ?

Merci encore pour vos commentaires et aide !

José


En cherchant j'ai trouver çà pour vider la collection :

For x = 1 To Coll.Count
Coll.Remove (x)
Next

y'a rien de plus synthetique ? genre coll.kill ou un truc dans le
genre ?
parceke j'aimerai etre sûr que la mémoire est liberée.

Merci
José

Avatar
MichDenis
| Set Plage = Range("_filterdatabase").Offset(1)

Il n'est pas souhaitable d'utiliser cette façon de définir une plage en utilisant
"_FilterDataBase en début de procédure Car :

_FilterDataBase est un simple nom (name) de la collection "Names" qui est créé
automatiquement APRÈS (pendant) l'exécution d'un filtre. Ce qui le distingue des
"NOMS" que l'on crée via l'interface de la feuille de calcul, c'est qu'il a été créé
par code, et qu'il est invisible par l'interface de la feuille de calcul.
Voir l'aide dans vba...sur la méthode "ADD" à la collection "Names"

A -
Le nom "_FilterDataBase" représente la plage de données sur laquelle s'est effectué le filtre.
AVANT la toute première exécution d'un filtre (par macro ou à l'aide des commandes
du menu) le nom de la plage est inexistant et provoque une erreur.
À la limite, il pourrait aussi représenter une toute autre plage de la feuille où on a utilisé le
filtre
pour une toute autre raison. Une feuille de calcul ne peut contenir
qu'UN "NOM" "_FilterDataBase" à la fois et ce que ce soit pour désigner la plage
où s'est effectuée un filtre automatique ou élaboré.


B -
Si des nouvelles données ont été ajoutées entre deux exécutions de la macro,
définir en début de procédure la plage filtrée de cette manière signifie, ne pas
tenir compte des ajouts des nouvelles données puisque le nom "_filterdatabase"
est mis à jour suite à l'exécution du filtre et non avant. Avant que la commande du filtre
s'exécute, le code doit permettre de définir l'étendue des données à tenir compte, de sorte
que la commande "Filtre" pourra mettre à jour le nom "_FilterDataBase" (la plage qu'il représente)

Un petit exemple pour illustrer le tout :

L'une ou l'autre de ces syntaxes sont identiques...au niveau du résultat
La méthode CurrentRegion est sous attendu à la ligne suivante du code
Pour ceux qui connaissent mal le concept de CurrentRegion, il y a l'aide d'excel...

Range("A1").AutoFilter field:=1, Criteria1:=1
OU
Range("A1").CurrentRegion.AutoFilter field:=1, Criteria1:=1

Pour limiter la plage de cellules à une plage spécifique, il faut y faire référence explicitement
Range("A1:A10").AutoFilter field:=1, Criteria1:=1

Évidemment, la résultante est l'effet sur la plage que représente : "FilterDataBase".







"Daniel.C" a écrit dans le message de news:

Bonjour.
Essaie :

Sub test()
Dim Plage As Range, Coll As Collection, c As Range, Ctr As Long
Set Plage = Range("_filterdatabase").Offset(1)
Set Plage = Plage.Resize(Plage.Rows.Count -
1).SpecialCells(xlCellTypeVisible)
Set Plage = Intersect(Plage, [B:B])
Plage.Select
Set Coll = New Collection
On Error Resume Next

'add unique items to collection
For Each c In Plage
Coll.Add CStr(c), CStr(c)
Next
On Error GoTo 0
For Each Item In Coll
Ctr = Ctr + 1
Cells(Ctr, 6) = Item
Next Item
MsgBox Ctr
End Sub

Cordialement.
Daniel
"Le Nordiste" a écrit dans le message de
news:
Bonjour à tous,

Je désire :
1) Connaitre le nombre de valeurs différentes dans une colonne de
_filterDataBase,
J'ai filtré en colonne "A" et veux lire les valeurs de la
coilonne "B"
2) Récupérer ces différentes valeurs sans doublon


Et je séche sur ces Pb, je suis sur de trouver ici solutions
Merci
Avatar
MichDenis
| En cherchant j'ai trouver çà pour vider la collection :

| For x = 1 To Coll.Count
| Coll.Remove (x)
| Next


Set Coll = Nothing
Avatar
Le Nordiste
Merci pour ces explications Michdenis.
1 2