• Initiateur de la discussion Initiateur de la discussion Chombi
  • Date de début Date de début

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 !

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
 
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

Dernière édition:
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

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

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

Dernière édition:
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

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
 
- 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
6
Affichages
823
A
Réponses
1
Affichages
2 K
Compte Supprimé 979
C
Retour