Macros VBA pour afficher les colonnes filtrées dans la barre d’état , Excel vba

Lorsque nous travaillons avec une grande table% dans laquelle de nombreuses colonnes ont été traitées à l’aide de la fonction Filtre automatique, il est parfois difficile de savoir quelles colonnes sont filtrées et lesquelles ne le sont pas. Bien sûr, vous pouvez les faire défiler en recherchant une icône caractéristique indiquant l’utilisation de la fonction AutoFilter, mais avec cela, vous pouvez vieillir.
La macro décrite ci-dessous est utile car elle affiche toutes les colonnes filtrées dans la barre d’état. Il s’agit de la barre visible en
Comment ca marche?
La macro exécute une boucle pour tous les champs de l’ensemble de données AutoFilter. Lorsque la boucle est en cours d’exécution, il est vérifié que chaque champ suivant est filtré. Si c’est le cas, son nom est téléchargé sous forme de chaîne de texte. Lorsque la boucle se termine, la chaîne de texte est ajoutée à la propriété StatusBar.

Sub AfficherColonnFiltr ()
'Etape: Déclaration des variables
Dim AF As AutoFilter

Dim TargetField As String
Dim strOutput As String
Dim i As Integer
'Étape 2: vérification de l'utilisation du filtre automatique - sinon, arrêt
If ActiveSheet.AutoFilterMode = False Then
Application.StatusBar = False
Exit Sub
End If
'Étape 3: définir le filtre automatique et le début de la boucle
Set AF = ActiveSheet.AutoFilter
For i = 1 To AF.Filters.Count
'Étape 4: obtenir le nom du champ filtré
If AF.Filters(i).On Then
TargetField = AF.Range.Cells(1, i).Value
strOutput = strOutput & " | " & TargetField
End If
Next
'Étape 5: Affichage des zones filtrées - si elles existent
If strOutput = "" Then
Application.StatusBar = False
Else
Application.StatusBar = "LES DONNÉES SONT FILTRÉES DANS" & strOutput
End If
End Sub

 

1. Dans la première étape, vous avez désaffecté quatre variables. AF est une variable qui représente le filtre automatique et est utilisée pour faire fonctionner l’objet filtre automatique. TargetField est une variable qui stocke le nom de tous les poi actuellement filtrés sous forme de chaîne. strOutput est une variable de type chaîne. Nous allons l’utiliser pour créer du texte qui sera placé dans la barre d’état. La variable de contrôle, d’autre part, est un indicateur simple qui permet des itérations pour les poi qui utilisent l’autofiitration.
2. À l’étape deux, nous vérifions la propriété AutoFilterMode pour nous assurer
la feuille de calcul utilise la fonction AutoFilter. Non, la propriété StatusBar est définie sur False. L’effet est de supprimer le contenu de la barre d’état. Ensuite, toute la procédure se termine.
3. À l’étape trois, la variable AF est définie sur la fonction Filtre automatique dans la feuille active. Ensuite, l’indicateur est défini, ce qui commence le compte à rebours à partir de 1, et sa valeur maximale est le nombre de tous les koolianów dans le cadre de l’opération de filtrage automatique. L’objet Filtre automatique surveille les colonnes avec des numéros d’index. La première colonne a l’index 1, la deuxième colonne a l’index 2, etc. Le point est d’utiliser une variable de contrôle et des numéros d’index pour démarrer la boucle pour chaque colonne
avec filtre automatique.
4. À l’étape quatre, l’état de l’objet AF.Filters est vérifié pour chaque variable i qui a la valeur du numéro d’index de la colonne traitée suivante. Si les colonnes de l’objet Filtre automatique sont filtrées, leur état est Activé.
Dans ce cas, le nom du champ est transmis à la variable TargetField.
Le nom du champ est récupéré par référence à la plage stockée par la variable AF pour l’objet Filtre automatique. Dans ce cas, vous pouvez utiliser la propriété Cells pour indiquer le nom du champ. Cells (1,1) obtient les valeurs de la cellule de la première ligne et de la première colonne. Les cellules (1, 2) obtiendront les valeurs de la cellule dans la première ligne et la deuxième colonne, etc.
Comme vous pouvez le voir, dans la quatrième étape, la ligne (1) a été déterminée exactement, tandis que la variable de contrôle i a été utilisée pour déterminer la colonne, qui indiquera le numéro d’index de la colonne. Cela signifie que lors des itérations suivantes, la macro transmettra toujours la valeur de la première ligne comme valeur pour la variable TargetField (le nom doit être dans la première ligne).
Une fois le nom du champ téléchargé, il peut être transmis sous forme de chaîne (dans notre cas à la variable strOutput). La variable strOutput stocke le nom du champ, que nous associons à une autre chaîne.
5. À l’étape cinq, nous vérifions d’abord si la variable strOutput contient réellement une chaîne. Si la variable est vide, cela signifie que la macro n’a trouvé aucune colonne à filtrer. Dans ce cas, la valeur StatusBar est définie sur False et le contrôle est transféré vers Excel.
Si la variable strOutput stocke une chaîne, à l’étape cinq, la valeur StatusBar est définie sur le texte sélectionné, puis connectée à la chaîne strOutput.
Comment appliquer une macro?
Il serait préférable que la macro soit exécutée chaque fois qu’un filtre a été appliqué. Malheureusement, Excel n’a pas un tel événement sur sa liste. Le plus proche de ce j

est l’événement Worksheet_ Calculate. Il faut dire, cependant, que la fonction AutoFilter ne calcule rien, vous devez donc entrer une telle fonction “aéroport” dans la feuille de calcul qui utilisera les données filtrées. Il forcera la conversion des données si une modification est apportée à la feuille de calcul.
Dans un fichier simple avec un exemple attaché au livre, la fonction NOW = () a été utilisée. La fonction MAINTENANT renvoie des informations de date et d’heure. Après l’avoir placé dans la feuille de calcul, nous pouvons être sûrs que les données seront recalculées chaque fois qu’il y aura un changement dans les données traitées par l’AutoFilter.
La fonction peut être placée n’importe où dans la feuille de calcul, entrez simplement = MAINTENANT () dans la cellule sélectionnée. Copiez ensuite la macro et collez son code dans la fenêtre Code, en l’ajoutant à la méthode de gestion des événements Worksheet_Calcul ate. À cette fin:
Jat
1. Utilisez la combinaison de touches Alt + F11 pour activer Visual Basic Editor.
2. Dans la fenêtre Projet, recherchez le projet ou classeur approprié et cliquez sur le + à côté de lui. Toutes les feuilles seront alors affichées.
3. Sélectionnez la feuille dans laquelle le code doit être exécuté.
4. Sélectionnez l’option Calculer dans la liste déroulante Événement.
5. Saisissez ou collez le code.
Afin d’optimiser le code, il convient d’envisager d’y placer les deux fragments suivants (sous l’événement de recalcul):

Private Sub Worksheet_Deactivate()
Application.StatusBar = False
End Sub
Private Sub Worksheet_Activate()
Call Worksheet_Calculate
End Sub
Vous pouvez également vouloir ajouter le code suivant à l'événement BeforeClose:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.StatusBar = False
End Sub

 


L’événement Worksheet_Deactivate effacera la barre d’état lors du déplacement vers la feuille de calcul ou le classeur suivant. C’est un moyen d’éviter les erreurs lorsque vous travaillez avec plusieurs feuilles.
L’événement Worksheet_Activate exécutera une macro pour Worksheet_Calculate. Lorsque vous passez à la feuille filtrée, les indicateurs de la barre d’état seront restaurés.
L’événement Workbook_BeforeClose efface la barre d’état lors de la fermeture du classeur. C’est un moyen d’éviter les erreurs lors de l’utilisation de plusieurs classeurs.

S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x
()
x