XL 2013 Déclencher une macro à partir de l'utilisation d'un filtre

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

BenHarber

XLDnaute Occasionnel
Bonjour le Forum,
J'ai une question à laquelle je n'ai pas trouvé de réponse satisfaisante sur le net : peut-être pourrez-vous m'éclairer ?
Je souhaiterais savoir s'il est possible de déclencher une macro à partir de l'utilisation d'un filtre dans un tableau ?
cf. PJ. : par exemple, j'aimerais avoir en retour, un message qui m'indique la lettre de la colonne du filtre utilisé : est-ce possible ?

Merci d'avance pour vos lumières souvent salvatrices !
BH
 

Pièces jointes

Voyez le fichier joint et la macro :
Code:
Private Sub Worksheet_Calculate()
Dim i%
If Not Me.AutoFilter Is Nothing Then MsgBox "Un filtre a été créé sur la feuille"
MsgBox IIf(Me.FilterMode, "Il y a ", "Il n'y a pas ") & " des données filtrées"
MsgBox "Il y a " & Me.AutoFilter.Filters.Count & " colonnes sur lesquelles il y a un filtre"
For i = 1 To Me.AutoFilter.Filters.Count
    If Me.AutoFilter.Filters(i).On Then MsgBox "Le filtre est situé en position " & i
Next i
End Sub
 

Pièces jointes

Re, bonjour JB,

Ben Harber demande la lettre de la colonne filtrée donc :
Code:
Private Sub Worksheet_Calculate()
Dim i%
If AutoFilter Is Nothing Then MsgBox "Aucun filtre n'a été créé sur la feuille": Exit Sub
MsgBox IIf(FilterMode, "Il y a ", "Il n'y a pas ") & " des données filtrées"
MsgBox "Il y a " & AutoFilter.Filters.Count & " colonnes sur lesquelles il y a un filtre"
For i = 1 To Me.AutoFilter.Filters.Count
    If AutoFilter.Filters(i).On Then _
        MsgBox "La colonne " & Split(AutoFilter.Range.Columns(i).EntireColumn.Address(0, 0), ":")(1) & " est filtrée"
Next i
End Sub
Fichier (2).

A+
 

Pièces jointes

Bonjour à tous,
Je reprends ce post car j'ai une question complémentaire sur le sujet :
Maintenant que je sais comment détecter la (les) colonne(s) filtrée(s) de mon tableau, connaissez-vous le code pour récupérer dans une variable (variable tableau je suppose) les critères sélectionnés ?
Par exemple, en reprenant le tableau de Job75, si je filtre sur la colonne "B" les valeurs b2 et b4, puis-je récupérer b2 et b4 dans une variable ?

Merci d'avance pour vos suggestions qui sont toujours les bienvenues 🙂.

BH
 
Bonjour,

Cf PJ

http://boisgontierjacques.free.fr/fichiers/Filtre/FiltreImprime.xls
http://boisgontierjacques.free.fr/fichiers/Filtre/FiltreAutoFonctionPerso.xls

Code:
Function FiltreCol(Champ As Range, TitreChamp As Range)
  Application.Volatile
  If Not ChampActif(TitreChamp) Then FiltreCol = "": Exit Function
  Set d = CreateObject("scripting.dictionary")
  d.CompareMode = vbTextCompare
  For Each c In Champ
     If Not c.EntireRow.Hidden And c.Value <> "" Then d(c.Value) = c.Value
  Next c
  a = d.items
  If IsDate(Champ(1)) Then
    If d.Count = 1 Then
       FiltreCol = TitreChamp & ":" & Format(a(0), "dd/mm/yyyy")
    Else
       mini = a(0): maxi = a(0)
       For i = LBound(a) To UBound(a)
         If a(i) < mini Then mini = a(i)
         If a(i) > maxi Then maxi = a(i)
       Next i
       FiltreCol = TitreChamp & ":" & "> " & mini & " et < " & maxi
    End If
   Else
     FiltreCol = TitreChamp & ":" & Join(a, ",")
   End If
End Function



Boisgontier
 

Pièces jointes

Dernière édition:
Bonjour BenHarber, JB, le forum,

Tout ce que je sais faire c'est lister les valeurs uniques des colonnes filtrées :
Code:
Private Sub Worksheet_Calculate()
Dim i%, d As Object, P As Range, j&, x$
If AutoFilter Is Nothing Then MsgBox "Aucun filtre n'a été créé sur la feuille": Exit Sub
MsgBox IIf(FilterMode, "Il y a des", "Il n'y a pas de") & " données filtrées"
MsgBox "Il y a " & AutoFilter.Filters.Count & " colonnes sur lesquelles il y a un filtre"
For i = 1 To Me.AutoFilter.Filters.Count
    If AutoFilter.Filters(i).On Then
        Set d = CreateObject("Scripting.Dictionary")
        d.CompareMode = vbTextCompare 'la casse est ignorée
        Set P = AutoFilter.Range.Columns(i).Cells
        For j = 2 To P.Rows.Count
            If Not P(j).EntireRow.Hidden Then 'si la ligne n'est pas masquée
                x = P(j)
                If x = "" Then x = "<vide>"
                d(x) = ""
            End If
        Next
        MsgBox "La colonne " & Split(AutoFilter.Range.Columns(i).EntireColumn.Address(0, 0), ":")(1) & _
            " est filtrée" & IIf(d.Count, " sur " & Join(d.keys, ", "), "")
    End If
Next i
End Sub
Fichier (3).

Bonne journée.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
1 K
Compte Supprimé 979
C
Retour