OVH Cloud OVH Cloud

VBA Filtre élaboré

8 réponses
Avatar
Jean-Paul V
Bonjour

J’ai une macro qui lance des filtres élaborés avec l’instruction :

Selection.AutoFilter Field:=1, Criteria1:="=MA", Operator:=xlOr, _
Criteria2:="=MB"

Y-a-t-il une instruction si j’ai plus de 2 possibilités par exemple ou MC ;
ou MD ou ME et sans passer par un champ de critère nommé sur une feuille .


Jean-Paul V

8 réponses

Avatar
Daniel
Bonjour.
Tu utilises un filtre personnalisé.
Pour le filtre élaboré, utilises AdvancedFilter qui te permets toutes sortes
de manières de filtrer.
Cordialement.
Daniel
"Jean-Paul V" a écrit dans le message
de news:
Bonjour

J'ai une macro qui lance des filtres élaborés avec l'instruction :

Selection.AutoFilter Field:=1, Criteria1:="=MA", Operator:=xlOr, _
Criteria2:="=MB"

Y-a-t-il une instruction si j'ai plus de 2 possibilités par exemple ou MC
;
ou MD ou ME et sans passer par un champ de critère nommé sur une feuille
.


Jean-Paul V



Avatar
Jean-Paul V
Bonjour Daniel
Merci pour la piste à explorer
Dans VBA j'ai fais F1 sur AdvancedFilter on m'indique la syntaxe suivante :

Range("Database").AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Range("Criteria")

Je vois que l'on passe par un champ nommé Critéria , peut-on échaper à un
champ de critère défini sur une feuille , ne peut-on pas mettre entièrement
dans la macros la définition des critères mon exemple est sur la premiére
zone (1 ère colonne ) avec comme possibilités MA; MB; MC; MD

@+



Bonjour.
Tu utilises un filtre personnalisé.
Pour le filtre élaboré, utilises AdvancedFilter qui te permets toutes sortes
de manières de filtrer.
Cordialement.
Daniel
"Jean-Paul V" a écrit dans le message
de news:
Bonjour

J'ai une macro qui lance des filtres élaborés avec l'instruction :

Selection.AutoFilter Field:=1, Criteria1:="=MA", Operator:=xlOr, _
Criteria2:="=MB"

Y-a-t-il une instruction si j'ai plus de 2 possibilités par exemple ou MC
;
ou MD ou ME et sans passer par un champ de critère nommé sur une feuille
.


Jean-Paul V








Avatar
anonymousA
Bonjour,

Je ne vois ce qui te gêne tant que ca d'utiliser une plage de cellules.
Ca m'étonnerait que toutes tes cellules de ta feuille soient remplies,
et quand bien même elles le seraient, il est possible de prendre une
plage sur une autre feuille.
Dans l'exemple qui suit, on fait un filtre élaboré à partir des données
de la feuille 1 du fichier toto4.xls ( au passage , la syntaxe ici
présente impose qu'il y ait au moins une fois dans la vie du classeur un
filtre automatique en feuille 1 à cause de Feuil1!_Filterdatabase ) en
prenant comme critère une plage de cellules du même fichier sur la
feuille 3 et on envoie les valeurs résultantes sur la feuille 2 à la
cellule A1.LA seule contrainte reste de déclarer ce que l'on met comme
critère ( ici dans la plage IU1:IV2).

Et en prime c'est écrit à la façon AV. Pour une fois que ces crochets
nous permettent d'y voir un peu plus clair.

[[toto4.xls]Feuil1!_Filterdatabase].AdvancedFilter 2,
[[toto4.xls]Feuil3!IU1:IV2], [[toto4.xls]Feuil2!A1]


A+

Bonjour Daniel
Merci pour la piste à explorer
Dans VBA j'ai fais F1 sur AdvancedFilter on m'indique la syntaxe suivante :

Range("Database").AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Range("Criteria")

Je vois que l'on passe par un champ nommé Critéria , peut-on échaper à un
champ de critère défini sur une feuille , ne peut-on pas mettre entièrement
dans la macros la définition des critères mon exemple est sur la premiére
zone (1 ère colonne ) avec comme possibilités MA; MB; MC; MD

@+




Bonjour.
Tu utilises un filtre personnalisé.
Pour le filtre élaboré, utilises AdvancedFilter qui te permets toutes sortes
de manières de filtrer.
Cordialement.
Daniel
"Jean-Paul V" a écrit dans le message
de news:

Bonjour

J'ai une macro qui lance des filtres élaborés avec l'instruction :

Selection.AutoFilter Field:=1, Criteria1:="=MA", Operator:=xlOr, _
Criteria2:="=MB"

Y-a-t-il une instruction si j'ai plus de 2 possibilités par exemple ou MC
;
ou MD ou ME et sans passer par un champ de critère nommé sur une feuille
.


Jean-Paul V










Avatar
JB
Bonjour,

Simulation du Filtre Auto avec Filtre élaboré:

http://cjoint.com/?bChSorFzJy

Le choix des critères de sélection se fait dans des menus
déroulants. Les menus sont alimentés par une fonction matricielle:

SansDoublonsTrié(champ As Range)SansDoublonsTrié(champ As Range)

Function SansDoublonsTrié(champ As Range)
Dim temp(1000, 1)
j = 0
For i = 1 To champ.Count
témoin = False
For k = 0 To j
If temp(k, 0) = champ(i) Then témoin = True
Next k
If Not témoin Then temp(j, 0) = champ(i): j = j + 1
Next i
Call tri(temp, 0, j - 1)
SansDoublonsTrié = temp
End Function
Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2, 0)
g = gauc: d = droi
Do
Do While a(g, 0) < ref: g = g + 1: Loop
Do While ref < a(d, 0): d = d - 1: Loop
If g <= d Then
temp = a(g, 0): a(g, 0) = a(d, 0): a(d, 0) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

La construction du critère se fait avec:

Services choisis
DG
Ou GESTION
Ou MARKETING
Ou PRODUCTION


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("services_choisis")) Is Nothing And
Target.Count = 1 Then
temp = "=OR("
ligne = 1
Do While Range("services_choisis")(ligne, 1) <> ""
temp = temp & "F9=""" & Range("services_choisis")(ligne, 1) &
""","
ligne = ligne + 1
Loop
temp = Left(temp, Len(temp) - 1) & ")"
If ligne > 1 Then
Range("j2").Formula = temp
Range("A8:G10000").AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range("J1:J2")
Else
Range("j2").Formula = "Tous"
On Error Resume Next
ActiveSheet.ShowAllData
End If
End If
End Sub

Cordialement JB
Avatar
Jean-Paul V
Bonjour

En fait je souhaitais ne pas poluer mes feulles par des champs de critères.
Et je ne voulais pas gonfler le fichier en insérant une feuille de critères.

Mais je vai essayer votre syntaxe claire avec crochets

Merci @+


Bonjour

J’ai une macro qui lance des filtres élaborés avec l’instruction :

Selection.AutoFilter Field:=1, Criteria1:="=MA", Operator:=xlOr, _
Criteria2:="=MB"

Y-a-t-il une instruction si j’ai plus de 2 possibilités par exemple ou MC ;
ou MD ou ME et sans passer par un champ de critère nommé sur une feuille .


Jean-Paul V



Avatar
Jean-Paul V
Bonjour JB

J'ai chargé le fichier cela m'a semblé intéressant je vais l'étudier .
Merci encore

Bien Cordialement JPV


Bonjour,

Simulation du Filtre Auto avec Filtre élaboré:

http://cjoint.com/?bChSorFzJy

Le choix des critères de sélection se fait dans des menus
déroulants. Les menus sont alimentés par une fonction matricielle:

SansDoublonsTrié(champ As Range)SansDoublonsTrié(champ As Range)

Function SansDoublonsTrié(champ As Range)
Dim temp(1000, 1)
j = 0
For i = 1 To champ.Count
témoin = False
For k = 0 To j
If temp(k, 0) = champ(i) Then témoin = True
Next k
If Not témoin Then temp(j, 0) = champ(i): j = j + 1
Next i
Call tri(temp, 0, j - 1)
SansDoublonsTrié = temp
End Function
Sub tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2, 0)
g = gauc: d = droi
Do
Do While a(g, 0) < ref: g = g + 1: Loop
Do While ref < a(d, 0): d = d - 1: Loop
If g <= d Then
temp = a(g, 0): a(g, 0) = a(d, 0): a(d, 0) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

La construction du critère se fait avec:

Services choisis
DG
Ou GESTION
Ou MARKETING
Ou PRODUCTION


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("services_choisis")) Is Nothing And
Target.Count = 1 Then
temp = "=OR("
ligne = 1
Do While Range("services_choisis")(ligne, 1) <> ""
temp = temp & "F9=""" & Range("services_choisis")(ligne, 1) &
""","
ligne = ligne + 1
Loop
temp = Left(temp, Len(temp) - 1) & ")"
If ligne > 1 Then
Range("j2").Formula = temp
Range("A8:G10000").AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range("J1:J2")
Else
Range("j2").Formula = "Tous"
On Error Resume Next
ActiveSheet.ShowAllData
End If
End If
End Sub

Cordialement JB




Avatar
AV
| En fait je souhaitais ne pas poluer mes feulles par des champs de critères.
| Et je ne voulais pas gonfler le fichier en insérant une feuille de critères.

Une zone de critère peut toujours se résumer à une seule cellule qui contenant
une formule...
La mettre dans une feuille (éventuellement cachée), ne va surement pas alourdir
ton fichier !

AV
Avatar
JB
Le critère ne contient q'une formule OU(cond1;Cond2;...) créée par
programme

JB