Microsoft 365 Afficher filtres appliqués par macro dans la cellule B3 directement et non par F5 puis Réinitialiser

VirginieG

XLDnaute Nouveau
Bonjour,

Je me trouve dans une situation embarrassante où je ne trouve pas d'issue malgré mes nombreux essais et recherches.

Précision : ça fait 15 ans que je n'ai pas touché à la prog donc je tâtonne. ;) Pardonnez mon ignorance.

Voici ce que j'ai :
Un fichier avec une liste d'huiles essentielles pour l'acné dans mon exemple en colonne A, l'huile concernée en colonne B et les contre-indications en colonne C.

Par une macro nommée "Sauf", en cliquant sur le bouton j'obtiens mon formulaire pour filtrer automatiquement sur 2 critères qui marche nickel.

Et J'ai un autre bouton où se trouve la macro "réinitialiser".

Mon but : quand je clique sur le bouton Contre-indications (macro "Sauf"), j'obtienne l'affichage en dessous les filtres appliqués pour informations.
Mais pour que ça s'affiche, il me faut aller dans la macro "ShowAutoFilterCriteria" et faire F5 pour qu'on me demande la cellule que je veux, je rentrer. Je n'arrive pas à lui imposer directement la cellule où ça doit s'afficher.
J'ai tenté
set outrng = Range("B3")
avec ou sans dollar ça change rien, j'ai même tenté cells("b3") etc rien à faire.
Y'a un détail qui m'échappe.

Pour réinitialiser, ça marche nickel mais j'aimerais qu'il vide le contenu de B3 quand il réinitialise et il vide avec ce que j'ai testé mais du coup ça ne marche pas car il me faut refaire F5 dans la macro "ShowAutoFilterCriteria".

Voici le fichier de mon exemple pour que vous voyez par vous-mêmes.

Je vous mets aussi les codes ici :
macro "sauf" (contre-indications)
VB:
Sub Sauf()
' Touche de raccourci du clavier: Ctrl+q

'variables
    Dim plage As Range
    Dim filtre As String

'filtre sur plage sur feuille 1, tableau de la A1 à C5
    Set plage = Sheets(1).Cells(4, 3).CurrentRegion
'saisie
    filtre1 = InputBox("Texte à filtrer 1 :", "Filtre1")
    filtre2 = InputBox("Texte à filtrer 2 :", "Filtre2")

'réinitialisation des filtres
    plage.AutoFilter
'application de la macro
    plage.AutoFilter Field:=3, Criteria1:="<>" & "*" & filtre1 & "*", Operator:=xlAnd, Criteria2:="<>" & "*" & filtre2 & "*"
       
End Sub

Le code d'affichage en B3 m'affiche
"<>*epi* And <>*ulc*" par exempe pour les filtres ne contenant pas "epi" ET "ulc" :
VB:
Sub ShowAutoFilterCriteria()

Dim xFilter As AutoFilter
Dim TargetFilter As Filter
Dim TargetField As String
Dim xOut As String
Dim OutRng As Range
If ActiveSheet.AutoFilterMode = False Then
    Application.StatusBar = False
    Exit Sub
End If
xTitleId = "KutoolsforExcel"

'J'aimerais déclarer la cellule où afficher directement sans avoir à taper F5 dans la macro pour l'activer ! mais impossible,
'Set OutRng = Range("C3") ne fonctionne pas et je n'ai rien trouvé comme solution...
Set OutRng = Range("b3")
'Set OutRng = Application.Selection
'Set OutRng = Application.InputBox("Cell", xTitleId, OutRng.Address, Type:=8)
Set xFilter = ActiveSheet.AutoFilter
For i = 1 To xFilter.Filters.Count
   TargetField = xFilter.Range.Cells(1, i).Value
   Set TargetFilter = xFilter.Filters(i)
   If TargetFilter.On Then

        On Error GoTo OutNext
        xOut = xOut & TargetField & TargetFilter.Criteria1
'est-ce nécessaire vu que je n'ai que xlAnd ?
        Select Case TargetFilter.Operator
            Case xlAnd
            xOut = xOut & " And " & TargetField & TargetFilter.Criteria2
        End Select
    End If
Next
OutRng.Value = xOut
OutNext:
xOut = xOut & TargetField & "= Multiple Filters"
ErrorHandler:
'Problème : le résultat s'affiche que si je fais F5 dans la macro...
Resume Next
End Sub


VB:
Sub Réinitialiser()

With Sheets("Feuil1")
   If .AutoFilterMode And .FilterMode Then .ShowAllData
End With
   
'End Sub
'Sub Réinitialiser_Filtres()
'
' j'ai tenté de vider la cellule lors de la réinitialisation mais ça vidait tout et la macro ne fonctionne plus :
' Réinitialiser_Filtres Macro
    'Cells(3, 3).Clear
    'Selection.AutoFilter
End Sub

Un grand merci par avance de votre aide.

Bonne soirée. ;)
 

Pièces jointes

  • Exemple-HE.xlsm
    25.8 KB · Affichages: 3
Dernière édition:
Solution
Est-ce que ceci convient ?

VB:
Sub Sauf()
' Touche de raccourci du clavier: Ctrl+q

'variables
    Dim plage As Range
    Dim filtre As String

'filtre sur plage sur feuille 1, tableau de la A1 à C5
    Set plage = Sheets(1).Cells(4, 3).CurrentRegion

'saisie
    filtre1 = InputBox("Texte à filtrer 1 :", "Filtre1")
    If filtre1 <> "" Then filtre1 = "*" & filtre1 & "*"

    filtre2 = InputBox("Texte à filtrer 2 :", "Filtre2")
    If filtre2 <> "" Then filtre2 = "*" & filtre2 & "*"

'réinitialisation des filtres
    plage.AutoFilter
'application de la macro
    plage.AutoFilter Field:=3, Criteria1:="<>" & filtre1, Operator:=xlAnd, Criteria2:="<>" & filtre2

'afficher en B3 le fitre 1 qu'on nomme F1 et le filtre 2 F2
    Range("B3") =...

VirginieG

XLDnaute Nouveau
Yes !!!!! merciiii ;)
déjà tu m'as résolu un problème.

Du coup, ma macro ShowAutoFilterCriteria servait à rien. lol

C'est parfait, grâce à toi je viens de résoudre l'autre problème.

Merci beaucoup.

ça donne ça du coup si ça intéresse quelqu'un.
 

Pièces jointes

  • Exemple-HE.xlsm
    24.7 KB · Affichages: 4

VirginieG

XLDnaute Nouveau
oui tu as raison, j'ai modifié comme ceci :
VB:
'afficher en B3 le fitre 1 et le filtre 2 
    Range("B3") = "Contre-Indications : " & filtre1 & " - " & filtre2

Par exemple, si je tape "ulc" et "hép" ça me donne :
Contre-Indications : ulc - hép ;)

Et dans "réinitialiser" j'ai mis :
VB:
'on vide la cellule B3 où sont affichés les filtres appliqués
Range("B3") = "Contre-Indications : " & ""

Merci encore. :)
 

VirginieG

XLDnaute Nouveau
bah si j'écris rien dans un des critère, il estime que j'ai appliqué aucun filtre...
donc tableau vide...

Screen-SiChampVide-HE-VirginieG.png
 

TooFatBoy

XLDnaute Barbatruc
Est-ce que ceci convient ?

VB:
Sub Sauf()
' Touche de raccourci du clavier: Ctrl+q

'variables
    Dim plage As Range
    Dim filtre As String

'filtre sur plage sur feuille 1, tableau de la A1 à C5
    Set plage = Sheets(1).Cells(4, 3).CurrentRegion

'saisie
    filtre1 = InputBox("Texte à filtrer 1 :", "Filtre1")
    If filtre1 <> "" Then filtre1 = "*" & filtre1 & "*"

    filtre2 = InputBox("Texte à filtrer 2 :", "Filtre2")
    If filtre2 <> "" Then filtre2 = "*" & filtre2 & "*"

'réinitialisation des filtres
    plage.AutoFilter
'application de la macro
    plage.AutoFilter Field:=3, Criteria1:="<>" & filtre1, Operator:=xlAnd, Criteria2:="<>" & filtre2

'afficher en B3 le fitre 1 qu'on nomme F1 et le filtre 2 F2
    Range("B3") = "F1 <> " & filtre1 & "   -   F2 <> " & filtre2
       
End Sub
 
Dernière édition:

Statistiques des forums

Discussions
311 721
Messages
2 081 927
Membres
101 842
dernier inscrit
seb0390