Filtre automatique

Chombi

XLDnaute Occasionnel
Bonjour à tous

En utilisant un filtre auto il est possible de sélectionner tout ou rien via la case à cocher du haut.(j’apprends rien à personne)
Mais je cherche le moyen d'inverser la sélection, je m'explique:
par ex sur un filtre de 10 cases on sélectionne les 5 premières puis en un clic via un bouton par ex on désélectionnerait les 5 premières et on sélectionnerait les 5 dernières

Est ce que quelqu'un aurait une solution?

Merci
 

job75

XLDnaute Barbatruc
Re : Filtre automatique

Bonjour Chombi,

Voyez le fichier joint et cette macro :

Code:
Sub InverserFiltrage()
Dim col%, d As Object, i&, crit
col = 1 'colonne de filtrage, à adapter
Set d = CreateObject("Scripting.Dictionary")
With [A1].CurrentRegion 'à adapter
  For i = 2 To .Rows.Count
    If .Rows(i).Hidden Then d(.Cells(i, col).Value) = ""
  Next
  If d.Count Then crit = d.keys Else crit = "="
  .AutoFilter col, crit, xlFilterValues
End With
End Sub
Bravo pour le sujet, c'est la 1ère fois que je fais ça :)

A+
 

Pièces jointes

  • Inverser le filtrage(1).xlsm
    19 KB · Affichages: 30
Dernière édition:

job75

XLDnaute Barbatruc
Re : Filtre automatique

Re,

Avec la propriété .Value les nombres ne sont pas filtrés il faut utiliser .Text :

Code:
Sub InverserFiltrage()
Dim col%, d As Object, i&, crit
col = 1 'colonne de filtrage, à adapter
Set d = CreateObject("Scripting.Dictionary")
With [A1].CurrentRegion 'à adapter
  For i = 2 To .Rows.Count
    If .Rows(i).Hidden Then d(.Cells(i, col).Text) = ""
  Next
  If d.Count Then crit = d.keys Else crit = "="
  .AutoFilter col, crit, xlFilterValues
End With
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Inverser le filtrage(2).xlsm
    19 KB · Affichages: 27

Chombi

XLDnaute Occasionnel
Re : Filtre automatique

J'ai été un peu vite

fonctionne très bien sur la colonne 1 par contre sur la colonne 4 par ex (voir fichier) si on a filtré préalablement la colonne 1, l'inversion ne fonctionne pas
l'idée serait d'attribuer un bouton à chaque colonne, possédant un filtre, pour pouvoir inverser rapidement la sélection filtrée, sans avoir d'incidence sur les filtres fait préalablement sur les autres colonnes
j’espère avoir été clair

Merci
 

Pièces jointes

  • Inverser le filtrage(3)-1.xlsm
    17.7 KB · Affichages: 25

Chombi

XLDnaute Occasionnel
Re : Filtre automatique

Re

oui en effet, cependant avec des filtres sur plusieurs colonnes quand on attribue le bouton à la première colonne ça fonctionne très bien et je ne sais dire pourquoi

à bientôt
 

Pièces jointes

  • Inverser le filtrage(4)-1.xlsm
    17.7 KB · Affichages: 24

job75

XLDnaute Barbatruc
Re : Filtre automatique

Bonjour Chombi, le forum,

Une macro plus élaborée qui détermine l'unique colonne filtrée :

Code:
Sub InverserFiltrage()
Dim i&, col%, d As Object
If Not ActiveSheet.AutoFilterMode Then GoTo 1
With ActiveSheet.AutoFilter.Range
  For i = 1 To .Parent.AutoFilter.Filters.Count
    If .Parent.AutoFilter.Filters(i).On Then
      If col Then MsgBox "Filtrez une seule colonne !": Exit Sub
      col = i
    End If
  Next
1 If col = 0 Then MsgBox "Aucun filtrage...": Exit Sub
  Set d = CreateObject("Scripting.Dictionary")
  For i = 2 To .Rows.Count
    If .Rows(i).Hidden Then d(.Cells(i, col).Text) = ""
  Next
  .AutoFilter col, d.keys, xlFilterValues
End With
End Sub
Edit : c'est plus cohérent avec .AutoFilter.Range...

Fichier (4).

A+
 

Pièces jointes

  • Inverser le filtrage(4).xlsm
    20.8 KB · Affichages: 20
Dernière édition:

Chombi

XLDnaute Occasionnel
Re : Filtre automatique

Bonjour job75

une idée: ne pourrait on pas sur les colonnes B,C,D (1) - enregistrer le filtre en cour (2) - défiltrer les colonnes B,C,D (3) - inverser le filtrage en A puis en (4) - filtrer B,C,D avec l'enregistrement du début

test sur D ci joint (par contre je ne sais pas comment enregistrer le filtre en cour)

A bientôt
 

Pièces jointes

  • Inverser le filtrage(5).xlsm
    19.4 KB · Affichages: 15

Chombi

XLDnaute Occasionnel
Re : Filtre automatique

Re,

il y a quelque temps (bientôt 10 ans) j'avais récupéré un code de J boisgontier (ci dessous) qui affiche dans la cellule au dessus du filtre les valeurs filtrés ex:formule en B1: =filtreactuel(B2), en C1:=filtreactuel(C2) etc

Code:
Fonctions personnalisées
Ces fonctions affiche les critères de filtres choisis

Function FiltreActuel(c, Optional typeCol As String)
 col = c.Column - Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column + 1
 feuille = Application.Caller.Parent.Name
 Application.Volatile
 If Sheets(feuille).FilterMode Then
    If Sheets(feuille).AutoFilter.Filters.Item(col).On Then
      temp = ActiveSheet.AutoFilter.Filters.Item(col).Criteria1
      If Left(temp, 2) = ">=" Or Left(temp, 2) = "<=" Then
         o = Left(temp, 2): n = Mid(temp, 3)
      Else
         If Left(temp, 1) = "=" Or Left(temp, 1) = ">" Or Left(temp, 1) = "<" Then
           o = Left(temp, 1): n = Mid(temp, 2)
         Else
           n = temp
         End If
      End If
      If typeCol = "D" Then n = Format(n, "dd/mm/yy")
      temp = o & n
      '---
      If Sheets(feuille).AutoFilter.Filters.Item(col).Operator Then
          oper = IIf(Sheets(feuille).AutoFilter.Filters.Item(col).Operator = 1, " ET ", " OU ")
          On Error Resume Next
          Err = 0
          temp2 = Sheets(feuille).AutoFilter.Filters.Item(col).Criteria2
          If Err = 0 Then
              If Left(temp2, 2) = ">=" Or Left(temp2, 2) = "<=" Then
                 o = Left(temp2, 2): n = Mid(temp2, 3)
              Else
                If Left(temp2, 1) = "=" Or Left(temp2, 1) = ">" Or Left(temp2, 1) = "<" _
                 Then o = Left(temp2, 1): n = Mid(temp2, 2)
              End If
              If typeCol = "D" Then n = Format(n, "dd/mm/yy")
              temp2 = o & n
           Else
              oper = ""
           End If
       End If
       FiltreActuel = temp & oper & temp2
    Else
      FiltreActuel = ""
    End If
  Else
      FiltreActuel = ""
  End If
End Function

Code que j'ai d’ailleurs des difficultés à comprendre
est ce que vous pensez que c'est utilisable?
on pourrait copier les valeurs dans une autre cellule pour s'en servir ensuite

A bientôt
 

Discussions similaires

Réponses
6
Affichages
307
Réponses
14
Affichages
435
Réponses
15
Affichages
727
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 107
Messages
2 085 360
Membres
102 874
dernier inscrit
Petro2611