OVH Cloud OVH Cloud

filtre élaboré VBA

6 réponses
Avatar
Misange
Coucou,

je voudrais utiliser un filtre élaboré en VBA mais ... Sans passer par
une feuille !

Le pb : j'ai une petite bdd que je souhaite filtrer sur plusieurs
critères. Les critères sont choisis par le biais d'un formulaire et je
construis un critère composé en fonction des choix.
Ma question : au lieu de copier les données triées dans une feuille,
comment ne récupérer dans un array que les N°s des lignes ? J'ai eu beau
chercher, j'ai pas trouvé ça sur excelabo ;-(

--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

6 réponses

Avatar
michdenis
Bonjour Misange,


Après avoir fait ton filtre élaboré,


'Les variables à déclarer pour le bout de ma procédure

Dim Rg As Range, T(), A As Long

'le code pour ton filtre


'Si tu ne veux pas avoir dans ton tableau la ligne de tes étiquettes
'Définis le range à partir de la deuxième ligne Range("A2:A25")

With WorkSheets("Feuil1")
Set Rg = .Range("A1:A25").SpecialCells(xlCellTypeVisible)
End With

For Each c In Rg
A = A + 1
ReDim Preserve T(A)
T(A) = c.Row
Next


La variable T est un tableau qui contiendra toutes les numéro de ligne du résultat de ton filtre élaboré.



Salutations!




"Misange" a écrit dans le message de news:
Coucou,

je voudrais utiliser un filtre élaboré en VBA mais ... Sans passer par
une feuille !

Le pb : j'ai une petite bdd que je souhaite filtrer sur plusieurs
critères. Les critères sont choisis par le biais d'un formulaire et je
construis un critère composé en fonction des choix.
Ma question : au lieu de copier les données triées dans une feuille,
comment ne récupérer dans un array que les N°s des lignes ? J'ai eu beau
chercher, j'ai pas trouvé ça sur excelabo ;-(

--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta
Avatar
Misange
Merci Denis , mais ce n'est pas tout à fait cela que je cherche à faire.
Je voudrais en fait carrément supprimer l'étape de modification de la
feuille excel (filtrage sur place ou recopie dans une autre feuille). Je
dois effectuer un traitement sur les fiches sélectionnées et n'ai pas
besoin de voir les fiches.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

on 12/09/2004 14:47:
Bonjour Misange,


Après avoir fait ton filtre élaboré,


'Les variables à déclarer pour le bout de ma procédure

Dim Rg As Range, T(), A As Long

'le code pour ton filtre


'Si tu ne veux pas avoir dans ton tableau la ligne de tes étiquettes
'Définis le range à partir de la deuxième ligne Range("A2:A25")

With WorkSheets("Feuil1")
Set Rg = .Range("A1:A25").SpecialCells(xlCellTypeVisible)
End With

For Each c In Rg
A = A + 1
ReDim Preserve T(A)
T(A) = c.Row
Next


La variable T est un tableau qui contiendra toutes les numéro de ligne du résultat de ton filtre élaboré.



Salutations!




"Misange" a écrit dans le message de news:
Coucou,

je voudrais utiliser un filtre élaboré en VBA mais ... Sans passer par
une feuille !

Le pb : j'ai une petite bdd que je souhaite filtrer sur plusieurs
critères. Les critères sont choisis par le biais d'un formulaire et je
construis un critère composé en fonction des choix.
Ma question : au lieu de copier les données triées dans une feuille,
comment ne récupérer dans un array que les N°s des lignes ? J'ai eu beau
chercher, j'ai pas trouvé ça sur excelabo ;-(



Avatar
xx
Une boucle sur un tableau 2D, et à chaque itération, vérifier si la ligne
correspond aux critères.
???

"Misange" a écrit dans le message de
news:
Merci Denis , mais ce n'est pas tout à fait cela que je cherche à faire.
Je voudrais en fait carrément supprimer l'étape de modification de la
feuille excel (filtrage sur place ou recopie dans une autre feuille). Je
dois effectuer un traitement sur les fiches sélectionnées et n'ai pas
besoin de voir les fiches.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

on 12/09/2004 14:47:
Bonjour Misange,


Après avoir fait ton filtre élaboré,


'Les variables à déclarer pour le bout de ma procédure

Dim Rg As Range, T(), A As Long

'le code pour ton filtre


'Si tu ne veux pas avoir dans ton tableau la ligne de tes étiquettes
'Définis le range à partir de la deuxième ligne Range("A2:A25")

With WorkSheets("Feuil1")
Set Rg = .Range("A1:A25").SpecialCells(xlCellTypeVisible)
End With

For Each c In Rg
A = A + 1
ReDim Preserve T(A)
T(A) = c.Row
Next


La variable T est un tableau qui contiendra toutes les numéro de ligne
du résultat de ton filtre élaboré.





Salutations!




"Misange" a écrit dans le message de
news:


Coucou,

je voudrais utiliser un filtre élaboré en VBA mais ... Sans passer par
une feuille !

Le pb : j'ai une petite bdd que je souhaite filtrer sur plusieurs
critères. Les critères sont choisis par le biais d'un formulaire et je
construis un critère composé en fonction des choix.
Ma question : au lieu de copier les données triées dans une feuille,
comment ne récupérer dans un array que les N°s des lignes ? J'ai eu beau

chercher, j'ai pas trouvé ça sur excelabo ;-(





Avatar
Misange
Merci de la suggestion Mme xx (avec des chromosomes comme ça...) mais vu
le nombre de critères possibles ce ne serait guère rapide. Le filtre
élaboré répond bien de ce point de vue au traitement à effectuer. En
fait je vais me dépatouiller avec la proposition de Denis. Mais pour le
fun j'aimerais quand même savoir si c'est possible ou pas. Pas de quoi
se prendre le chou non plus pendant 107 ans vu qu'avec un filtre élaboré
et une boucle sur les résultats du filtre, de fait on y parvient ;-)
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

on 12/09/2004 18:37:
Une boucle sur un tableau 2D, et à chaque itération, vérifier si la ligne
correspond aux critères.
???

"Misange" a écrit dans le message de
news:

Merci Denis , mais ce n'est pas tout à fait cela que je cherche à faire.
Je voudrais en fait carrément supprimer l'étape de modification de la
feuille excel (filtrage sur place ou recopie dans une autre feuille). Je
dois effectuer un traitement sur les fiches sélectionnées et n'ai pas
besoin de voir les fiches.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

on 12/09/2004 14:47:

Bonjour Misange,


Après avoir fait ton filtre élaboré,


'Les variables à déclarer pour le bout de ma procédure

Dim Rg As Range, T(), A As Long

'le code pour ton filtre


'Si tu ne veux pas avoir dans ton tableau la ligne de tes étiquettes
'Définis le range à partir de la deuxième ligne Range("A2:A25")

With WorkSheets("Feuil1")
Set Rg = .Range("A1:A25").SpecialCells(xlCellTypeVisible)
End With

For Each c In Rg
A = A + 1
ReDim Preserve T(A)
T(A) = c.Row
Next


La variable T est un tableau qui contiendra toutes les numéro de ligne



du résultat de ton filtre élaboré.



Salutations!




"Misange" a écrit dans le message de



news:

Coucou,

je voudrais utiliser un filtre élaboré en VBA mais ... Sans passer par
une feuille !

Le pb : j'ai une petite bdd que je souhaite filtrer sur plusieurs
critères. Les critères sont choisis par le biais d'un formulaire et je
construis un critère composé en fonction des choix.
Ma question : au lieu de copier les données triées dans une feuille,
comment ne récupérer dans un array que les N°s des lignes ? J'ai eu beau




chercher, j'ai pas trouvé ça sur excelabo ;-(










Avatar
michdenis
Bonjour Misange,

Une feuille de calcul dans un classeur dont la propriété visible = Xlveryhidden n'est accessible d'AUCUNE façon par
l'usager et de dernier n'a AUCUN moyen de connaître l'existence de cette feuille à moins que ce dernier ait accès au
code de ton programme. De plus, il n'y a aucune restriction a effectué des filtres automatiques, élaborés avec critères,
des tris sur un tableau de données en conservant le caractère "invisible à la feuille" avant, pendant et après
l'exécution des procédures. Je ne vois pas pourquoi tu te priverais d'un tel support pour effectuer le travail quite à
ce que l'usager ne perçoive le résultat via les contrôles d'un formulaire destinés à cet effet.

Pour que ton code fonctionne, tu dois utiliser cette structure.

With worksheets("MaFeuille")
with .Range("A1:H" & .Range("A65536").end(xlup).row)
.AdvancedFilter.....


end with
End with


Pour aller de l'avant dans ce que tu demandes, il faudrait avoir une petite idée de la grandeur du tableau de tes
données (nombre de champs), du type de critères complexes que tu désires utiliser et enfin, de quelle façon tu désires
disposer des résultats et comment comptes-tu afficher ces résultats le cas échéant ?


Salutations!



"Misange" a écrit dans le message de news:
Merci Denis , mais ce n'est pas tout à fait cela que je cherche à faire.
Je voudrais en fait carrément supprimer l'étape de modification de la
feuille excel (filtrage sur place ou recopie dans une autre feuille). Je
dois effectuer un traitement sur les fiches sélectionnées et n'ai pas
besoin de voir les fiches.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

on 12/09/2004 14:47:
Bonjour Misange,


Après avoir fait ton filtre élaboré,


'Les variables à déclarer pour le bout de ma procédure

Dim Rg As Range, T(), A As Long

'le code pour ton filtre


'Si tu ne veux pas avoir dans ton tableau la ligne de tes étiquettes
'Définis le range à partir de la deuxième ligne Range("A2:A25")

With WorkSheets("Feuil1")
Set Rg = .Range("A1:A25").SpecialCells(xlCellTypeVisible)
End With

For Each c In Rg
A = A + 1
ReDim Preserve T(A)
T(A) = c.Row
Next


La variable T est un tableau qui contiendra toutes les numéro de ligne du résultat de ton filtre élaboré.



Salutations!




"Misange" a écrit dans le message de news:
Coucou,

je voudrais utiliser un filtre élaboré en VBA mais ... Sans passer par
une feuille !

Le pb : j'ai une petite bdd que je souhaite filtrer sur plusieurs
critères. Les critères sont choisis par le biais d'un formulaire et je
construis un critère composé en fonction des choix.
Ma question : au lieu de copier les données triées dans une feuille,
comment ne récupérer dans un array que les N°s des lignes ? J'ai eu beau
chercher, j'ai pas trouvé ça sur excelabo ;-(



Avatar
michdenis
La constante est :

Feuil2.Visible = xlSheetVeryHidden

et non xlveryhidden


Salutations!



"michdenis" a écrit dans le message de news:
Bonjour Misange,

Une feuille de calcul dans un classeur dont la propriété visible = Xlveryhidden n'est accessible d'AUCUNE façon par
l'usager et de dernier n'a AUCUN moyen de connaître l'existence de cette feuille à moins que ce dernier ait accès au
code de ton programme. De plus, il n'y a aucune restriction a effectué des filtres automatiques, élaborés avec critères,
des tris sur un tableau de données en conservant le caractère "invisible à la feuille" avant, pendant et après
l'exécution des procédures. Je ne vois pas pourquoi tu te priverais d'un tel support pour effectuer le travail quite à
ce que l'usager ne perçoive le résultat via les contrôles d'un formulaire destinés à cet effet.

Pour que ton code fonctionne, tu dois utiliser cette structure.

With worksheets("MaFeuille")
with .Range("A1:H" & .Range("A65536").end(xlup).row)
.AdvancedFilter.....


end with
End with


Pour aller de l'avant dans ce que tu demandes, il faudrait avoir une petite idée de la grandeur du tableau de tes
données (nombre de champs), du type de critères complexes que tu désires utiliser et enfin, de quelle façon tu désires
disposer des résultats et comment comptes-tu afficher ces résultats le cas échéant ?


Salutations!



"Misange" a écrit dans le message de news:
Merci Denis , mais ce n'est pas tout à fait cela que je cherche à faire.
Je voudrais en fait carrément supprimer l'étape de modification de la
feuille excel (filtrage sur place ou recopie dans une autre feuille). Je
dois effectuer un traitement sur les fiches sélectionnées et n'ai pas
besoin de voir les fiches.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

on 12/09/2004 14:47:
Bonjour Misange,


Après avoir fait ton filtre élaboré,


'Les variables à déclarer pour le bout de ma procédure

Dim Rg As Range, T(), A As Long

'le code pour ton filtre


'Si tu ne veux pas avoir dans ton tableau la ligne de tes étiquettes
'Définis le range à partir de la deuxième ligne Range("A2:A25")

With WorkSheets("Feuil1")
Set Rg = .Range("A1:A25").SpecialCells(xlCellTypeVisible)
End With

For Each c In Rg
A = A + 1
ReDim Preserve T(A)
T(A) = c.Row
Next


La variable T est un tableau qui contiendra toutes les numéro de ligne du résultat de ton filtre élaboré.



Salutations!




"Misange" a écrit dans le message de news:
Coucou,

je voudrais utiliser un filtre élaboré en VBA mais ... Sans passer par
une feuille !

Le pb : j'ai une petite bdd que je souhaite filtrer sur plusieurs
critères. Les critères sont choisis par le biais d'un formulaire et je
construis un critère composé en fonction des choix.
Ma question : au lieu de copier les données triées dans une feuille,
comment ne récupérer dans un array que les N°s des lignes ? J'ai eu beau
chercher, j'ai pas trouvé ça sur excelabo ;-(