IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tester si l'utilisateur a modifié le filtre automatique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Par défaut Tester si l'utilisateur a modifié le filtre automatique
    Bonjour,

    J'ai une feuille avec beaucoup de colonne et je voudrais avertir l'utilisateur qu'au moins un filtre est actif

    Voilà comment je compte m'y prendre :
    J'ai crée un bouton "Effacer les filtres" pour lequel je forcerais un background vert si le filtre d'au moins une colonne a été activé.
    L'opérateur pourra au passage effacer les filtres en cliquant dessus

    Mon problème :
    Comment détecter l’événement "filtre automatique modifié" (pour que je puisse changer le background de mon bouton sur cet évènement)

    Merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour et bienvenu sur le Forum,

    La propriété booléenne devrait répondre à ton besoin.

    Donc pour afficher la totalité des données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With Feuil1
     
      If .Filtermode = True Then
     
        Msgbox Prompt:="Le filtre est actif"
        .ShowAlldata
     
      End If
     
    End With

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Par défaut
    Merci pour la réponse cependant je pense qu'il ne correspond pas à mon besoin (je me suis peut être mal exprimé désolé)...je veux détecter l'action de modification du filtre automatique.

    Il me faut un déclencheur ...Si l'utilisateur modifie le filtre alors changer le background du bouton

    Si je donne un exemple avec une cellule cela donnerait cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Si l'utilisateur selectionne une cellule
    Selection.Interior.Color = RGB(174, 240, 194) 'Alors changer la couleur de fond
    End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Cet évènement n'existant à ma connaissance pas, une telle détection nécessiterait l'utilisation quasi permanente (à l'aide d'un timer ou de son équivalent Application.Ontime) d'un contrôle de 'l "état des lieux" (= processus très coûteux en ressources).

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Lorsqu'un filtre est actif, les numéros des lignes visibles dans le périmètre d'action du filtres sont indiquées en bleu. C'est pour moi la meilleure manière pour l'utilisateur de savoir qu'un filtre est actif. Les boutons de filtres actifs sont renseignés pas un entonnoir, de sorte qu'il est facile de savoir quelles sont les colonnes sur lesquelles un filtre est posé.

    Le bouton Effacer de l'onglet Données/Trier et filtrer sert à relâcher tous les filtres dans le périmètre actif (la table de données si on est dans une table de données, la feuille dans les autres cas). Pourquoi réinventer la roue?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour à tous,

    bien qu'entièrement d'accord avec ce qui a été dit, il faut reconnaitre qu'un filtre activé ne saute pas toujours aux yeux.
    Après réflexion et tâtonnement j'ai trouvé une méthode simple et peu gourmande.
    Certaines actions peuvent déclencher l'événement Calculate, dont le masquage d'une ligne.
    Pour l'obtenir il faut avoir une fonction volatile sur la feuille, qu'il se dise qu'il y a peut-être qq chose à recalculer suite à cette action.

    Donc dans une cellule :
    Module de la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Calculate()
        [K1].Interior.Color = IIf(ActiveSheet.FilterMode, vbRed, vbGreen)
    End Sub
    Et bingo, la cellule réagit bien.
    eric

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonsoir,

    Exemple pour détecter un changement de filtre.

    En B2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOUS.TOTAL(3;A11:A1000)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Calculate()
      For Each n In ActiveWorkbook.Names
        If n.Name = "mémoNB" Then trouvé = True
      Next n
      If Not trouvé Then ActiveWorkbook.Names.Add Name:="mémoNB", RefersTo:="=" & [B2].Value
      If [B2] <> [mémoNB] Then
        MsgBox "modif"
        ActiveWorkbook.Names.Add Name:="mémoNB", RefersTo:="=" & [B2].Value
      End If
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  8. #8
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par eriiic Voir le message
    Et bingo, la cellule réagit bien.
    Belle découverte c'est parfait et en ce qui me concerne (versions 2007 à 2016) =Alea() n'est pas nécessaire.

    geo909 qui a créé un bouton peut même le masquer s'il est inutile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Calculate()
        ActiveSheet.Bouton_filtres.Visible = ActiveSheet.FilterMode
    End Sub

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Rebonjour à tous
    Question à cent sous : pourquoi s'obstiner à repérer un évènement (quel qu'il soit) ?
    Alors qu'il suffirait de verrouiller, protéger et ne permettre une modification que via une interface et des instructions. Aucune modification de filtre ne risquerait ainsi de passer ainsi "inaperçue".
    J'espère que cela ne paraîtra pas être du "chinois" ... (Dans le cas contraire, désolé, mais ce sera alors sans moi)

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    en ce qui me concerne (versions 2007 à 2016) =Alea() n'est pas nécessaire
    Il me semblait bien que sur 2010 on avait Calculate sur un simple masquage de ligne aussi.
    Sur 2019, j'ai été obligé de trouver cet artifice, une formule basique style =A4+2 ne suffisait pas. Bizarre que ce soit différent de 2016 et 2013.
    Tu as essayé même sur une feuille vierge de toute formule ?
    eric

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par anasecu Voir le message
    [...]
    Citation Envoyé par unparia Voir le message
    [...]
    Alors qu'il suffirait de verrouiller, protéger et ne permettre une modification que via une interface et des instructions. Aucune modification de filtre ne risquerait ainsi de passer ainsi "inaperçue".[...]
    Pour cela va falloir être très fort car si tu me ponds un classeur verrouillé je ne vais pas le supporter longtemps et tes verrous auront intérêt à être costauds : tu vas y passer ta vie ! ;-)
    En effet, s'il "suffisait de"... pondre l'usine à gaz?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    J'invite à une relecture plus attentive

    Il me faut un déclencheur ...Si l'utilisateur modifie le filtre alors changer le background du bouton
    corroboré par l'analogie avec l'évènement change faite en message 3

    Je ne pense pas que geo909 (dont je vais attendre le retour) veuille se contenter de savoir si un filtre est ou non actif, ni même de savoir, le cas échéant, quelles colonnes il concerne.
    Sa demande, telle que formulée, me paraît (non ?) suffisamment claire : déceler si l'utilisateur a modifié un filtre.

    Alors oui : je ne vois personnellement rien d'autre que "l'usine à gaz" suggérée.
    Attendons, donc ....

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    pourtant ma lecture plus attentive donne ça :
    J'ai une feuille avec beaucoup de colonne et je voudrais avertir l'utilisateur qu'au moins un filtre est actif
    ;-)
    Pour moi toute les colonnes ne sont pas visibles et il ne veut pas jouer avec l'ascenseur pour avoir la réponse tout simplement.
    Il n'en reste pas moins que les n° de lignes en bleu signalé par Pierre donne l'info.
    eric

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/02/2007, 11h07
  2. Réponses: 8
    Dernier message: 31/08/2006, 16h34
  3. modifier un filtre de sous-formulaire
    Par Miss Ti dans le forum Access
    Réponses: 12
    Dernier message: 22/08/2006, 20h41
  4. Réponses: 4
    Dernier message: 25/05/2006, 21h05
  5. [AS] Tester si l'utilisateur a cliqué sur une fonction
    Par PrinceMaster77 dans le forum Flash
    Réponses: 2
    Dernier message: 11/01/2006, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo