Changer cellule selon filtre et inversément (VBA)

Bonjour à tous,

Je suis actuellement sur un petit truc pour Excel, mais je n'arrive à avoir ce que je souhaite. Et je préfère déjà trouver la solution avant d'aller plus loin.

Le problème est simple....

J'ai deux onglets:

1) Data ==> Dans lequel j'ai mon filtre. Ici il s'agit d'un simple truc puisque je n'ai que sweet ou Whey dans ma colonne. Le filtre est donc whey, sweet ou tout sélectionner.

2) Indicateur ==> ou je n'ai qu'une cellule qui me permet de choisir le filtre voulu dans la feuille "Data"

Mon problème est que si je filtre via la cellule à part exemple Whey, le filtre en Data se met bien. Par contre, si je reviens sur la feuille "Data" et que je change mon filtre pour Sweet. Alors mon colonne est filtré sur Sweet mais le bouton dans le deuxième onglet lui est resté à Whey.

Il y'a donc un "conflit"..... les gens pourrait croire selon le deuxième onglet qu'on est filtré à une valeur mais qu'en réalité c'est une autre valeur.

C'est surtout problématique, parce qu'après je devrai faire des calcules sur le filtre (SOUS.TOTAL), mais je dois être sur d'avoir le bon filtre.

(Je joins bien sur un fichier pour que ça soit quand même plus clair )

EDIT : Je perd la boule.... Le filtre ne se fait pas encore tout seul mais il faut lancer la macro!!!! je pensais avoir déjà résolu ça, mais non en fait => Work still in progress

Alors j'ai pensé à deux solutions envisageable:

1) faire en sorte qui si je change le filtre la valeur de la cellule change. (dans l'autre sens, c'est déjà ok). Comme ça impossible d'avoir confusion ou erreur.

Mais je ne trouve pas comment faire :/

2) Deuxième possibilité, qui est moins bien selon moi, mais si la 1) est impossible alors je ferai la 2).

C'est juste empêcher l'utilisateur de pouvoir filtrer la colonne directement sur le titre de la colonne. L'utilisateur ne pourrait changer le filtre que sur la page 2) ou ma cellule a été créer.

Ici j'avoue ne pas avoir encore regarder. mais ça sera compliquer du faite que dans mon fichier mère, j'ai bien sur plein de colonne avec plein de titre. et je ne devrais bloquer qu'un filtre sur tous.

J'attends vos retours. (Je n'attend pas forcément une réponse noir sur blanc, mais des conseils, indices, orientation)

Merci d'avance pour votre aide.

Maxime

98test-filtre.xlsm (17.21 Ko)

Bonjour,

Pas de fichier joint.

Cdlt.

Bonjour,

Ton fichier s'est perdu en route...

Ne pas afficher les flèches permettant de filtrer (les DropDowns), pourrait répondre (c'est ta solution 2)

Ou bien voir si on peut répercuter une action sur ces objets...

Cordialement.

Re,

Voir fichier.

Cdlt.

93test-filtre.xlsm (21.76 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lo As ListObject
    If Target.Address = "$A$2" Then
        Set lo = Worksheets(1).ListObjects(1)
        Select Case [A2]
            Case "All"
                lo.Range.AutoFilter Field:=1
            Case Else
                lo.Range.AutoFilter Field:=1, Criteria1:=[A2]
        End Select
        Set lo = Nothing
    End If
End Sub

j'avais effectivement oublié, le fichier, je l'ai vu mais pas tout de suite et le temps de rééditer

Sinon Merci déjà pour le bout de code Jean-Eric, ça fonctionne nickel.

Mais par contre reste mon problème de si, je filtre sur Whey, vais dans le tableau et filtre sur Sweet. J'aurais le filtre sur Sweet dans le tableau mais Whey toujours affiché dans l'onglet 2.

.... C'est pour ça que je voulais que si un coté change l'autre aussi et vice-versa. Pour ne jamais avoir d'erreur....

Et alors l'autre option, enlever la flèche des filtres est une option. Mais je ne dois supprimer la flèche du filtre uniquement sur cette colonne (dans mon fichier mère, j'en ai une dizaine)

Est-ce que c'est possible?

(D'ailleurs, faudra d'ailleurs que je réinitialise les filtres à chaque ouverture/ou fermeture de fichier pour éviter les erreurs de calcules quand j'utiliserai SOUS.TOTAL. mais bon ça c''est le point suivant, une chose à la fois!!)

Re,

Un nouvel essai, pour la question 1.

Cdlt.

111test-filtre-v2.xlsm (24.52 Ko)

Bonjour,

Il me semble que c'est une option plus qu'acceptable. (Je suppose que la première option est plus compliqué, non?) Mais je prend cette option là. Au final, ça marche bien, ça fonctionne et j'évite les erreurs quoiqu'il arrive.

Par contre, deux questions sur le code et la façon de procéder.

EDIT : Autant pour moi, je viens de trouver le code.... Je ne savais pas qu'on pouvait en écrire là..... (on voit le débutant du coups ^^) Mais pour quelles raisons? Ça change quoi? c'est par rapport à la target.address, peut-être?

La question 1) et 2) n'ont plus vraiment de sens du coups

Mais je veux quand même bien les explications

1) Je ne trouve nul part ce code, coller au fichier Excel. Il ne devrait pas se trouver dans Alt-F11 (je ne sais plus comment la fenêtre s'appelle mais le gestionnaire Macro)

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lo As ListObject
        If Target.Address = "$A$2" Then
            Set lo = Worksheets(1).ListObjects(1)
            Select Case [A2]
                Case "All"
                    lo.Range.AutoFilter Field:=1
                Case Else
                    lo.Range.AutoFilter Field:=1, Criteria1:=[A2]
            End Select
            Set lo = Nothing
        End If
    End Sub

D'ailleurs si vous avez quelques explications sur le code pour comprendre, je suis preneur. C'est surtout la variable "lo" qui me pose problème....

2) Pour enlever le filtre sur la colonne, c'est un VBA invisible aussi? Ou une manip dans Excel tout simplement? J'ai rien vu de différent par rapport aux autres colonnes....

Mais en tout cas, merci.

Ça m'avance énormément. Je sais pas combien de temps j'aurai mis en tâtonnant.

Bonjour,

j'ai commenté la procédure évènementielle pour le dernier fichier joint.

Est ce suffisant ?

Cdlt.

Option Explicit
' Procédure événementielle qui s'exécute au changement d'une cellule, d'une plage de cellules
' dans la feuille concernée.
Private Sub Worksheet_Change(ByVal Target As Range)
' Déclaration des variables
Dim ws As Worksheet
Dim lo As ListObject
''Dim I As Long

    ' On detecte un changement de valeur de la cellule A2
    If Target.Address = "$A$2" Then
        ' Initialisation des variables
        Set ws = Worksheets("Data")
        Set lo = ws.ListObjects(1)  ' Tableau1 (voir gestionnaire de noms)
        ' Suivant le choix effectué dans la liste déroulante (Données validation)
        Select Case [A2]
            Case "All"
                ' On efface le filtre et on masque la flèche déroulante du filtre automatique
                ' voir aide Excel (double clic sur le terme Autofilter puis F1)
                lo.Range.AutoFilter Field:=3, VisibleDropDown:=False
            Case Else
                ' on filtre suivant le choix dans la liste déroulante (Données validation)
                ' et on masque la flèche déroulante du filtre automatique
                lo.Range.AutoFilter Field:=3, Criteria1:=[A2], VisibleDropDown:=False
        End Select
        '' Autre possibilité - On masque toutes les flèches déroulantes du filtre automatique
        ''For Each c In lo.HeaderRowRange
        ''I = I + 1
        ''lo.Range.AutoFilter Field:=I, VisibleDropDown:=False
        ''Next
        Set lo = Nothing: Set ws = Nothing
    End If

End Sub

Non parfait!!

Je comprend tout!! Je note résolu!!!

Merci Beaucoup!!!

j'ai déjà su l'adapter à mon fichier mère donc c'est parfait pour moi!

Rechercher des sujets similaires à "changer filtre inversement vba"