Comment actualiser automatiquement un filtre automatique Excel lorsque les données sont modifiées?
Cas d'utilisation: je change la valeur d'une cellule en une valeur qui a été filtrée. Je veux voir la ligne actuelle disparaître sans avoir à faire autre chose.
microsoft-excel
Sorin
la source
la source
Réponses:
L'échange de code avec cela semble également faire l'affaire (au moins dans Excel 2010):
la source
J'ai trouvé que lorsque je travaillais avec des tables, cela ne fonctionnait pas. Le filtre n'était pas sur la feuille mais sur la table. ce code a fait l'affaire
J'ai trouvé les informations ici: http://www.jkp-ads.com/articles/Excel2007TablesVBA.asp
la source
Faites un clic droit sur le nom de votre feuille, choisissez "Afficher le code" et collez le code ci-dessous. Après avoir collé, cliquez sur l'icône Excel sous "Fichier" en haut à gauche, ou tapez Alt-F11, pour revenir à la feuille de calcul.
Cela permettra l'actualisation automatique. N'oubliez pas d'enregistrer le fichier dans un format avec prise en charge des macros
.xlsm
.la source
J'utilise également un VBA / Macro basé sur l'
Worksheet_Change
événement, mais mon approche est légèrement différente ... D'accord, d'abord le code puis les explications:(Utilisez la combinaison de touches Alt+ F11pour faire apparaître le panneau de développement et collez le code dans la feuille de calcul contenant le filtre que vous souhaitez actualiser automatiquement.)
Dans mon exemple, je suppose avoir un simple filtre sur une seule colonne (L dans mon cas) et que ma plage de données est sur des lignes de 1 (même si elle peut contenir un en-tête) à 126 (choisissez un nombre suffisamment grand pour être sûr). L'opération est simple: à mesure que quelque chose change sur ma feuille, le filtre sur la plage spécifiée est à nouveau supprimé / réappliqué pour le rafraîchir. Ce qui nécessite un peu d'explication ici, ce sont les champs et les critères .
Le champ est un décalage entier de plage. Dans mon cas, je n'ai qu'un seul filtre de colonne et la plage est faite par une seule colonne (L) qui est la première de la plage (donc j'utilise 1 comme valeur).
Les critères sont une chaîne qui décrit le filtre à appliquer à la plage de données. Dans mon exemple, je veux afficher uniquement les lignes où la colonne L diffère de 0 (j'ai donc utilisé "<> 0").
C'est tout. Pour plus de référence sur la méthode Range.AutoFilter, voir: https://msdn.microsoft.com/en-us/library/office/ff193884.aspx
la source
Juste pour consolider la ou les réponses:
Sorin dit:
Faites un clic droit sur le nom de votre feuille, choisissez "Afficher le code" et collez le code ci-dessous. Après avoir collé, cliquez sur l'icône Excel sous "Fichier" en haut à gauche, ou tapez Alt-F11, pour revenir à la feuille de calcul.
Cela permettra l'actualisation automatique. N'oubliez pas d'enregistrer le fichier dans un format avec prise en charge des macros lie .xlsm.
Et Chris a utilisé ce code (que je viens de faire en 2010):
Si vous ne développez pas le message, vous ne voyez que la longue réponse! ;)
la source
Désolé, représentant insuffisant pour commenter. (Administrateurs, n'hésitez pas à couper ceci dans un commentaire ci-dessus.) Réponse de l'utilisateur "danicotra" commençant par "J'utilise également un événement VBA / Macro basé sur Worksheet_Change, mais mon approche ..." avec
'first remove filter
' puis l'applique
est à nouveau la bonne solution lors de l'utilisation d'Excel 2007+. Cependant .AutoFilter.ApplyFilter n'est pas valide dans XL03 et plus tôt, donc je montre le chemin ci-dessous.
Je supplie les vrais experts et gourous de lire le code parce que je suis assez confiant qu'il s'agit d'un matériau de première qualité. Peut-être que le décompte inexplicable de cette réponse peut être inversé lorsque les gens voient ce qui est bien fait ci-dessous.
danicotra a utilisé un exemple simplifié. En fait, vous pouvez le faire plus généralement. Supposons avec ActiveSheet pour les éléments suivants (ou un autre objet de feuille):
Enregistrez la plage du filtre automatique. Il contient des colonnes .AutoFilter.Filters.Count et (.AutoFilter.Range.Count / .AutoFilter.Filters.Count), enregistrées dans rngAutofilter
Collectez dans un tableau myAutofilters chacune des 4 propriétés de chacun des éléments de filtre automatique .AutoFilter.Filters.Count, en veillant à éviter les "erreurs définies par l'application" lorsque .On ou .Operator est faux. (myAutofilters serait redimensionné au nombre de lignes et de colonnes à l'étape 1)
Désactivez le filtre mais conservez les listes déroulantes avec .ShowAllData
Pour chaque élément de filtre qui était .Selon votre tableau enregistré, réinitialisez 3 des 4 propriétés de chacun des éléments de filtre automatique .AutoFilter.Filters.Count. Veillez à nouveau à éviter les «erreurs définies par l'application» lorsque .Operator est faux, donc pour chaque élément «i»,
rngAutofilter.AutoFilter Field: = i, Criteria1: = myAutofilters (i, 2)
ou
rngAutofilter.AutoFilter Field: = i, Critères1: = myAutofilters (i, 2), Opérateur: = myAutofilters (i, 3), Criteria2: = myAutofilters (i, 4)
Maintenant, le filtre automatique sera réinstauré, sur la même plage qu'avant le début de votre code, mais avec le filtre automatique mis à jour pour les changements de données.
la source
la source