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

Filtre avancé et VBA

10 réponses
Avatar
Amiral
Bonjour, après plusieurs heures de lecture, notamment sur MPFE, je n'ai pas
trouvé la solution à mon problème :

Je voudrais créer une macro qui puisse, à une certaine condition filtrer un
tableau. Jusque là pas trop de problème.
Mais le filtre doit avoir pour critère (compris entre la valeur de d48 et
celle de d47 de la feuille TI", et c'est là que je bloque complètement, je ne
trouve pas comment l'écrire.

Je ne suis plus tout à fait débutant en VBA, mais je ne suis pas encore tout
à fait un connaisseur des syntaxes, alors je suis prêt à écouter tous les
conseils.

Merci d'avance

PS voici ce que j'ai écrit jusque là, et qui, évidemment ne fonctionne pas !
If Range("C47") Then

'Définition du critère
Sheets("TabTot").Range("V3").Formula = "(>=TabInterméd!D48) *
(<=TabInterméd!D47)"
'Application du filtre
Sheets("TabTot").Select
[V2:V10000].AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range("U2:U3")


End If

10 réponses

Avatar
Ellimac
Bonjour,

Tu ne dois pas être obligé d'utiliser les filtres élaborés. Ici filtre
automatique personnalisé récupérant les cellules H1 et I1 :
Selection.AutoFilter Field:=3, Criteria1:=">=" & Range("h1"), _
Operator:=xlAnd, Criteria2:="<=" & Range("i1")

Camille

"Amiral" wrote:

Bonjour, après plusieurs heures de lecture, notamment sur MPFE, je n'ai pas
trouvé la solution à mon problème :

Je voudrais créer une macro qui puisse, à une certaine condition filtrer un
tableau. Jusque là pas trop de problème.
Mais le filtre doit avoir pour critère (compris entre la valeur de d48 et
celle de d47 de la feuille TI", et c'est là que je bloque complètement, je ne
trouve pas comment l'écrire.

Je ne suis plus tout à fait débutant en VBA, mais je ne suis pas encore tout
à fait un connaisseur des syntaxes, alors je suis prêt à écouter tous les
conseils.

Merci d'avance

PS voici ce que j'ai écrit jusque là, et qui, évidemment ne fonctionne pas !
If Range("C47") Then

'Définition du critère
Sheets("TabTot").Range("V3").Formula = "(>=TabInterméd!D48) *
(<=TabInterméd!D47)"
'Application du filtre
Sheets("TabTot").Select
[V2:V10000].AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range("U2:U3")


End If


Avatar
papou
Bonjour
Il me semble qu'il y a une petite erreur en ce qui concerne l'identification
de la plage de critère :

Tu positionnes ton critère en V3 :

'Définition du critère
Sheets("TabTot").Range("V3").Formula = "(>=TabInterméd!D48) *
(<=TabInterméd!D47)"


Alors que plus loin :
CriteriaRange:=Range("U2:U3")



Mais sinon, suggestion personnelle :
Applique "manuellement" ton filtre élaboré et vérifie qu'il te retourne ce
que tu souhaites avec le critère que tu indiques.
Une fois que tu auras validé le bon fonctionnement de ton filtre élaboré, il
te suffira de transcrire en VBA la valeur utilisée en tant que critère.

Cordialement
Pascal

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

Bonjour, après plusieurs heures de lecture, notamment sur MPFE, je n'ai
pas
trouvé la solution à mon problème :

Je voudrais créer une macro qui puisse, à une certaine condition filtrer
un
tableau. Jusque là pas trop de problème.
Mais le filtre doit avoir pour critère (compris entre la valeur de d48 et
celle de d47 de la feuille TI", et c'est là que je bloque complètement, je
ne
trouve pas comment l'écrire.

Je ne suis plus tout à fait débutant en VBA, mais je ne suis pas encore
tout
à fait un connaisseur des syntaxes, alors je suis prêt à écouter tous les
conseils.

Merci d'avance

PS voici ce que j'ai écrit jusque là, et qui, évidemment ne fonctionne pas
!
If Range("C47") Then

'Définition du critère
Sheets("TabTot").Range("V3").Formula = "(>=TabInterméd!D48) *
(<=TabInterméd!D47)"
'Application du filtre
Sheets("TabTot").Select
[V2:V10000].AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range("U2:U3")


End If


Avatar
tissot.emmanuel
Bonjour,

Avant tout:

[V2:V10000].AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range("U2:U3")
Implique que U2 contient le nom d'un champ de ta base et U3 un critere.


.Range("V3").Formula = "(>=TabInterméd!D48)*(<=TabInterméd!D47)"
Une formule doit toujour commencer par = (ou +)


Ceci dit, je crois comprendre que ton critere est: Enregistrements dont la
valeur est supérieure ou égale à TabInterméd!D48 ET inférieure ou égale à
TabInterméd!D47. Le nom du champ à examiner étant indéterminé dans ton
message.

Ta plage de critere doit se présenter comme ceci: (les || marquent la
séparation des cellules)

||A || B
1 || NomChamp || NomChamp
2 || =">="&TabInterméd!D48 || ="<="&TabInterméd!D47

Dans ta macro:

Sub FiltreAvance()
Dim xCriteres As Range
Set xCriteres=Range("A1:B2")'definition de la plage

'Ajout des formules
Range("A2").Formula = "="">=""&TabInterméd!D48"
Range("B2").Formula = "=""<=""&TabInterméd!D47"

'Exécution du filtre
Sheets("TabTot").Select
[V2:V10000].AdvancedFilter Action:=xlFilterInPlace, xCriteres

End Sub

Il te reste à adapter les références des cellules de la plage de critere.

Cordialement,

Manu/

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

Bonjour, après plusieurs heures de lecture, notamment sur MPFE, je n'ai
pas
trouvé la solution à mon problème :

Je voudrais créer une macro qui puisse, à une certaine condition filtrer
un
tableau. Jusque là pas trop de problème.
Mais le filtre doit avoir pour critère (compris entre la valeur de d48 et
celle de d47 de la feuille TI", et c'est là que je bloque complètement, je
ne
trouve pas comment l'écrire.

Je ne suis plus tout à fait débutant en VBA, mais je ne suis pas encore
tout
à fait un connaisseur des syntaxes, alors je suis prêt à écouter tous les
conseils.

Merci d'avance

PS voici ce que j'ai écrit jusque là, et qui, évidemment ne fonctionne pas
!
If Range("C47") Then

'Définition du critère
Sheets("TabTot").Range("V3").Formula = "(>=TabInterméd!D48) *
(<=TabInterméd!D47)"
'Application du filtre
Sheets("TabTot").Select
[V2:V10000].AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range("U2:U3")


End If


Avatar
Amiral
Merci Ellimac,

Effectivement, j'avais aussi essayé avec les filtres automatiques.
j'avais écrit çà :

Selection.AutoFilter Field:=3, Criteria1:=">=" &
Sheets("TabInterméd").Range("D48"), _
Operator:=xlAnd, Criteria2:="<=" & Sheets("TabInterméd").Range("D47")


J'obtiens alors l'erreur "La méthode autoFilter de la classe Range a échoué"
Tu vois d'où çà peut venir
Avatar
LSteph
Bonjour,
exemple en posant le filtre sur montant, Base b5:c13 , Critères F1G2
et on va chercher les valeurs a1 et b1 de la feuille TI:

Sub MacrofiltMontant()

[F1] = "Montant"
[G1] = "Montant"
[F2].Formula = "="">""&TI!a1"
[G2].Formula = "="">""&TI!b1"

Range("B5:c13").AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Range("F1:g2"), _
Unique:úlse
End Sub

'Cordialement.

'lSteph

Bonjour, après plusieurs heures de lecture, notamment sur MPFE, je n'ai pas
trouvé la solution à mon problème :

Je voudrais créer une macro qui puisse, à une certaine condition filtrer un
tableau. Jusque là pas trop de problème.
Mais le filtre doit avoir pour critère (compris entre la valeur de d48 et
celle de d47 de la feuille TI", et c'est là que je bloque complètement, je ne
trouve pas comment l'écrire.

Je ne suis plus tout à fait débutant en VBA, mais je ne suis pas encore tout
à fait un connaisseur des syntaxes, alors je suis prêt à écouter tous les
conseils.

Merci d'avance

PS voici ce que j'ai écrit jusque là, et qui, évidemment ne fonctionne pas !
If Range("C47") Then

'Définition du critère
Sheets("TabTot").Range("V3").Formula = "(>=TabInterméd!D48) *
(<=TabInterméd!D47)"
'Application du filtre
Sheets("TabTot").Select
[V2:V10000].AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range("U2:U3")


End If


Avatar
Amiral
Bonjour Papou, et merci du coup de pouce.

Effectivement, il vaut mieux regarder si le filtre mis manuellement
fonctionne : lorsque je mets comme critère :

=TabInterméd!D48


et que j'applique le filtre avancé, il enlève toutes les lignes, quelle que
soit la valeur de cette cellule.
Tu vois une solution ?

Avatar
Amiral
Emmanuel et Steph, merci pour votre contribution.
En fait j'ai essayé de faire fonctionner le filtre manuellement avec les
formules que vous me donnez, mais çà ne marche pas : soit le filtre efface
tout, soit il ne filtre rien du tout.
J'ai lu sur excelabo.com que les zones de critères faisant référence à des
autres cellules doivent êtres construits d'une manière différente, mais je
n'ai pas bien compris. Si quelqu'un y voit plus clair...

Je vais encore chercher un peu, et je post si je trouve, mais là çà fait
trois jours que je n'ai ^pas avancé d'un poil, donc je vais pas tarder à
essayer autre chose.

En tous cas, merci à tous
Avatar
Daniel
Bonjour.
Les critères calculés doivent porter un nom différent des champs. Pour la
syntaxe regarde :
http://cjoint.com/?gzmRZANkmF
Cordialement.
Daniel
"Amiral" a écrit dans le message de news:


Emmanuel et Steph, merci pour votre contribution.
En fait j'ai essayé de faire fonctionner le filtre manuellement avec les
formules que vous me donnez, mais çà ne marche pas : soit le filtre efface
tout, soit il ne filtre rien du tout.
J'ai lu sur excelabo.com que les zones de critères faisant référence à des
autres cellules doivent êtres construits d'une manière différente, mais je
n'ai pas bien compris. Si quelqu'un y voit plus clair...

Je vais encore chercher un peu, et je post si je trouve, mais là çà fait
trois jours que je n'ai ^pas avancé d'un poil, donc je vais pas tarder à
essayer autre chose.

En tous cas, merci à tous


Avatar
LSteph
Ce que je t'ai donné fonctionne par macro.

Cordialement

lSteph

Emmanuel et Steph, merci pour votre contribution.
En fait j'ai essayé de faire fonctionner le filtre manuellement avec les
formules que vous me donnez, mais çà ne marche pas : soit le filtre efface
tout, soit il ne filtre rien du tout.
J'ai lu sur excelabo.com que les zones de critères faisant référence à des
autres cellules doivent êtres construits d'une manière différente, mais je
n'ai pas bien compris. Si quelqu'un y voit plus clair...

Je vais encore chercher un peu, et je post si je trouve, mais là çà fait
trois jours que je n'ai ^pas avancé d'un poil, donc je vais pas tarder à
essayer autre chose.

En tous cas, merci à tous


Avatar
Amiral
eh ben finalement, y'a pas lieu d'aller chercher midi à quatorze heures !!


Ce que je t'ai donné fonctionne par macro.

Cordialement

lSteph

Emmanuel et Steph, merci pour votre contribution.
En fait j'ai essayé de faire fonctionner le filtre manuellement avec les
formules que vous me donnez, mais çà ne marche pas : soit le filtre efface
tout, soit il ne filtre rien du tout.
J'ai lu sur excelabo.com que les zones de critères faisant référence à des
autres cellules doivent êtres construits d'une manière différente, mais je
n'ai pas bien compris. Si quelqu'un y voit plus clair...

Je vais encore chercher un peu, et je post si je trouve, mais là çà fait
trois jours que je n'ai ^pas avancé d'un poil, donc je vais pas tarder à
essayer autre chose.

En tous cas, merci à tous