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

Filtre automatique et son code d'arrière plan

6 réponses
Avatar
Ma Dalton
Bonjour,

quand on sélectionne les constituantes d'un filtre automatique (dans une ou
plusieurs colonnes), il doit bien y avoir une sorte de code caché en arrière
plan. En comparaison Access permettrait :

Me.Filter = "ville='xyx' and arrondissement = 'abcd'"
Me.FilterOn = True

Ma question est: peut-on récupérer ce code afin de l'afficher sous forme de
texte dans une cellule précise.

Ainsi j'obtiendrais par exemple dans la cellule Feuil2!C2, le texte suivant:
«ville="xyx" et arrondissement = "abcd"» ou quelques chose de ce genre

merci

6 réponses

Avatar
isabelle
bonjour Ma Dalton,

voici un exemple avec un filtre sur la colonne A et le résultat en
cellule B1

Sub ListeCritère()
Set w = Worksheets("Feuil1")
With w.AutoFilter
currentFiltRange = .Range.Address
With .Filters
For f = 1 To .Count
With .Item(f)
If .On Then
Range("B1") = Range("B1") & .Criteria1 & " "
If .Operator Then
If .Operator = 1 Then
Oper = "et"
Else
Oper = "ou"
End If
Range("B1") = Range("B1") & .Oper & " "
Range("B1") = Range("B1") & .Criteria2
End If
End If
End With
Next
End With
End With
End Sub


isabelle


Bonjour,

quand on sélectionne les constituantes d'un filtre automatique (dans une ou
plusieurs colonnes), il doit bien y avoir une sorte de code caché en arrière
plan. En comparaison Access permettrait :

Me.Filter = "ville='xyx' and arrondissement = 'abcd'"
Me.FilterOn = True

Ma question est: peut-on récupérer ce code afin de l'afficher sous forme de
texte dans une cellule précise.

Ainsi j'obtiendrais par exemple dans la cellule Feuil2!C2, le texte suivant:
«ville="xyx" et arrondissement = "abcd"» ou quelques chose de ce genre

merci


Avatar
Denis Michon
Bonjour Daniel,

Un bout de code récupéré de l'aide et un peu transformé.

Tu dois adapter le nom de la feuille où se produit le filtre.

Tu récupères dans une boîte de message, les critères utilisés pour ton filtre sur la plage de données.

Ce n'est qu'un exemple pour te donner des idées !

;-)

'-----------------------------------
Sub ChangeFilters()

Dim w As Worksheet, A As Integer, B As Integer
Dim filterArray(), X As Integer, Message As String
Dim currentFiltRange As String

Set w = Worksheets("Feuil1") ' à déterminer

If w.FilterMode = False Then Exit Sub
With w.AutoFilter
currentFiltRange = .Parent.Name & "!" & .Range.Address(0, 0)
With .Filters
ReDim filterArray(1 To .Count, 1 To 3)
For f = 1 To .Count
With .Item(f)
If .On Then
filterArray(f, 1) = .Criteria1
If .Operator Then
If .Operator = xlOr Then
filterArray(f, 2) = "OU"
End If
If .Operator = xlAnd Then
filterArray(f, 2) = "ET"
End If
filterArray(f, 3) = .Criteria2
End If
End If
End With
Next
End With

End With

For A = LBound(filterArray) To UBound(filterArray, 1)
For B = LBound(filterArray) To UBound(filterArray, 2)
If filterArray(A, B) = "OU" Then
Message = Message & "opérateur : OU " & vbCrLf
ElseIf filterArray(A, B) = "ET" Then
Message = Message & "opérateur : Et " & vbCrLf
ElseIf filterArray(A, B) <> "" Then
X = X + 1
Message = Message & "Colonne : " & A & _
" criteria" & X & ":" & filterArray(A, B) & " " & vbCrLf
End If
Next
Next
Message = "La plage filtrée est : " & currentFiltRange _
& vbCrLf & vbCrLf & Left(Message, Len(Message) - 1)
MsgBox Message

End Sub
'-------


Salutations!





"Ma Dalton" a écrit dans le message de news:
Bonjour,

quand on sélectionne les constituantes d'un filtre automatique (dans une ou
plusieurs colonnes), il doit bien y avoir une sorte de code caché en arrière
plan. En comparaison Access permettrait :

Me.Filter = "ville='xyx' and arrondissement = 'abcd'"
Me.FilterOn = True

Ma question est: peut-on récupérer ce code afin de l'afficher sous forme de
texte dans une cellule précise.

Ainsi j'obtiendrais par exemple dans la cellule Feuil2!C2, le texte suivant:
«ville="xyx" et arrondissement = "abcd"» ou quelques chose de ce genre

merci
Avatar
Ma Dalton
Merci pour cet exemple. Au premier coup d'oeil, je suis pas certain de tout
suivre correctement mais je vais tester à tête reposée. Cela dit, du code
dans Excell n'est vraiment pas mon domaine, ça a même l'air fou mais le code
je le met où? et à partir de quel évènement il s'exécute?

"isabelle" a écrit dans le message news:

bonjour Ma Dalton,

voici un exemple avec un filtre sur la colonne A et le résultat en
cellule B1

Sub ListeCritère()
Set w = Worksheets("Feuil1")
With w.AutoFilter
currentFiltRange = .Range.Address
With .Filters
For f = 1 To .Count
With .Item(f)
If .On Then
Range("B1") = Range("B1") & .Criteria1 & " "
If .Operator Then
If .Operator = 1 Then
Oper = "et"
Else
Oper = "ou"
End If
Range("B1") = Range("B1") & .Oper & " "
Range("B1") = Range("B1") & .Criteria2
End If
End If
End With
Next
End With
End With
End Sub


isabelle


Bonjour,

quand on sélectionne les constituantes d'un filtre automatique (dans une
ou


plusieurs colonnes), il doit bien y avoir une sorte de code caché en
arrière


plan. En comparaison Access permettrait :

Me.Filter = "ville='xyx' and arrondissement = 'abcd'"
Me.FilterOn = True

Ma question est: peut-on récupérer ce code afin de l'afficher sous forme
de


texte dans une cellule précise.

Ainsi j'obtiendrais par exemple dans la cellule Feuil2!C2, le texte
suivant:


«ville="xyx" et arrondissement = "abcd"» ou quelques chose de ce genre

merci




Avatar
Ma Dalton
Pour les idées, ça m'en donne vraiment !! ;-)
merci

mais je ne suis pas Daniel ...

"Denis Michon" a écrit dans le message news:
VUGjb.143$
Bonjour Daniel,

Un bout de code récupéré de l'aide et un peu transformé.

Tu dois adapter le nom de la feuille où se produit le filtre.

Tu récupères dans une boîte de message, les critères utilisés pour ton
filtre sur la plage de données.


Ce n'est qu'un exemple pour te donner des idées !

;-)

'-----------------------------------
Sub ChangeFilters()

Dim w As Worksheet, A As Integer, B As Integer
Dim filterArray(), X As Integer, Message As String
Dim currentFiltRange As String

Set w = Worksheets("Feuil1") ' à déterminer

If w.FilterMode = False Then Exit Sub
With w.AutoFilter
currentFiltRange = .Parent.Name & "!" & .Range.Address(0, 0)
With .Filters
ReDim filterArray(1 To .Count, 1 To 3)
For f = 1 To .Count
With .Item(f)
If .On Then
filterArray(f, 1) = .Criteria1
If .Operator Then
If .Operator = xlOr Then
filterArray(f, 2) = "OU"
End If
If .Operator = xlAnd Then
filterArray(f, 2) = "ET"
End If
filterArray(f, 3) = .Criteria2
End If
End If
End With
Next
End With

End With

For A = LBound(filterArray) To UBound(filterArray, 1)
For B = LBound(filterArray) To UBound(filterArray, 2)
If filterArray(A, B) = "OU" Then
Message = Message & "opérateur : OU " & vbCrLf
ElseIf filterArray(A, B) = "ET" Then
Message = Message & "opérateur : Et " & vbCrLf
ElseIf filterArray(A, B) <> "" Then
X = X + 1
Message = Message & "Colonne : " & A & _
" criteria" & X & ":" & filterArray(A, B) & " " & vbCrLf
End If
Next
Next
Message = "La plage filtrée est : " & currentFiltRange _
& vbCrLf & vbCrLf & Left(Message, Len(Message) - 1)
MsgBox Message

End Sub
'-------


Salutations!





"Ma Dalton" a écrit dans le message de
news:

Bonjour,

quand on sélectionne les constituantes d'un filtre automatique (dans une
ou

plusieurs colonnes), il doit bien y avoir une sorte de code caché en
arrière

plan. En comparaison Access permettrait :

Me.Filter = "ville='xyx' and arrondissement = 'abcd'"
Me.FilterOn = True

Ma question est: peut-on récupérer ce code afin de l'afficher sous forme
de

texte dans une cellule précise.

Ainsi j'obtiendrais par exemple dans la cellule Feuil2!C2, le texte
suivant:

«ville="xyx" et arrondissement = "abcd"» ou quelques chose de ce genre

merci







Avatar
Denis Michon
mais je ne suis pas Daniel ...


Toutes mes excuses Ma Dalton.


Salutations!
Avatar
Ma Dalton
WoW,
j'ai pris du temps pour mettre en place ce code. je l'ai même agrémenté d'un
peu de broderie et il fait exactement ce à quoi je m'attendais. Pour la
question à savoir sur quel évènement il doit s'exécuter, j'ai aussi trouvé
par moi même, par essai-erreur

merci encore


"isabelle" a écrit dans le message news:

bonjour Ma Dalton,

voici un exemple avec un filtre sur la colonne A et le résultat en
cellule B1

Sub ListeCritère()
Set w = Worksheets("Feuil1")
With w.AutoFilter
currentFiltRange = .Range.Address
With .Filters
For f = 1 To .Count
With .Item(f)
If .On Then
Range("B1") = Range("B1") & .Criteria1 & " "
If .Operator Then
If .Operator = 1 Then
Oper = "et"
Else
Oper = "ou"
End If
Range("B1") = Range("B1") & .Oper & " "
Range("B1") = Range("B1") & .Criteria2
End If
End If
End With
Next
End With
End With
End Sub


isabelle


Bonjour,

quand on sélectionne les constituantes d'un filtre automatique (dans une
ou


plusieurs colonnes), il doit bien y avoir une sorte de code caché en
arrière


plan. En comparaison Access permettrait :

Me.Filter = "ville='xyx' and arrondissement = 'abcd'"
Me.FilterOn = True

Ma question est: peut-on récupérer ce code afin de l'afficher sous forme
de


texte dans une cellule précise.

Ainsi j'obtiendrais par exemple dans la cellule Feuil2!C2, le texte
suivant:


«ville="xyx" et arrondissement = "abcd"» ou quelques chose de ce genre

merci