Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Second filtre avec sélection apparente

Sellig

XLDnaute Junior
Bonjour,

Pourriez-vous m’aider à résoudre ce problème s’il vous plait.

J’ai un fichier joint nommé ‘’Logiciels’’ dans lequel j’ai installé une liste déroulante (Contrôle ActiveX) en colonne C. Ainsi qu’une macro qui permet de sélectionner et laisser apparent que ma sélection. Prenons pour exemple ‘’Convertisseur’’.

Jusque-là tout fonctionne.

Mon objectif serait de :

Trier cette liste ‘’Convertisseur’’ sur la colonne F ‘’En service’’ afin de laisser apparent que les ‘’Convertisseurs en service’’ (Soit avec une macro soit avec une seconde liste déroulante).


Je vous remercie par avance de votre aide.

Bien cordialement



PS : Pourriez-vous également faire en sorte que les filtres ne s’affichent pas à chaque ouverture du fichier.
 

Pièces jointes

  • Logiciels.xlsm
    55.9 KB · Affichages: 4

job75

XLDnaute Barbatruc
Bonjour Sellig, bienvenue sur XLD,
PS : Pourriez-vous également faire en sorte que les filtres ne s’affichent pas à chaque ouverture du fichier.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$1" Then
        If Range("C1") = "All" Then
            If FilterMode Then ShowAllData
        Else
            Range("C3").Resize(300).AutoFilter Field:=1, Criteria1:=Range("C1"), VisibleDropDown:=False
        End If
    End If
End Sub
A+
 

Pièces jointes

  • Logiciels.xlsm
    55.5 KB · Affichages: 3

job75

XLDnaute Barbatruc
Je ne vois pas pourquoi vous utilisez une macro Worksheet_Change alors que ceci va bien :
VB:
Private Sub ComboBox1_Change()
    If ComboBox1 = "All" Then
        If FilterMode Then ShowAllData
    Else
        Range("A2:J300").AutoFilter Field:=3, Criteria1:=ComboBox1
        Range("A2:J300").AutoFilter Field:=6, Criteria1:="En service"
    End If
End Sub
Les flèches des filtres restent visibles, ce n'est vraiment pas gênant.
 

Pièces jointes

  • Logiciels(1).xlsm
    55.4 KB · Affichages: 1

job75

XLDnaute Barbatruc
Bonjour Sellig, le forum,

Si l'on utilise un tableau structuré il est facile de masquer les boutons des filtres :
VB:
Private Sub ComboBox1_Change()
With [Tableau1] 'tableau structuré
    .AutoFilter
    If ComboBox1 = "All" Then
        .AutoFilter
    Else
        .AutoFilter Field:=3, Criteria1:=ComboBox1
        .AutoFilter Field:=6, Criteria1:="En service"
    End If
    .ListObject.ShowAutoFilterDropDown = False
End With
End Sub
Edit : le bouton "Afficher tout" n'est guère nécessaire mais si l'on y tient on lui affectera cette macro :
VB:
Sub Tout()
Sheets("Logiciels").[C1] = "All"
End Sub
A+
 

Pièces jointes

  • Logiciels(2).xlsm
    50.5 KB · Affichages: 2
Dernière édition:

Sellig

XLDnaute Junior
Bonjour et merci pour votre extrême rapidité .

Ce que vous me proposez est déjà génial.

Toutefois, je l’imaginais comme illustré sur la photo jointe :

En 1 je sélectionne tous les convertisseurs

Et au besoin

En 2 je sélectionne ceux qui sont en service (que ce soit par un bouton de macro ou une seconde liste déroulante.

Est-ce possible ?

Merci infiniment

Cordialement
 

Pièces jointes

  • Capture.JPG
    222.2 KB · Affichages: 13
  • Logiciels(3).xlsm
    53.6 KB · Affichages: 2

Sellig

XLDnaute Junior
Effectivement, vous avez raison, ‘’Afficher tout’’ ne sert plus à rien.


En revanche, vous n’avez pas répondu à ma question, je vous joins une autre photo qui est peut-être plus explicite.
 

Pièces jointes

  • Capture 2.JPG
    203.1 KB · Affichages: 10

job75

XLDnaute Barbatruc
J'ai essayé de mettre une 2ème ComboBox mais cela crée une erreur de compilation : ComboBox2 n'est pas reconnue, je ne comprends pas pourquoi.

Dans ce fichier (3) j'utilise donc une liste de validation en F1 avec ce code :
VB:
Private Sub ComboBox1_Change()
    Range("A2:J300").AutoFilter Field:=3, Criteria1:=IIf(ComboBox1 = "All", "*", ComboBox1)
    Range("A2:J300").AutoFilter Field:=6, Criteria1:=IIf([F1] = "All", "*", [F1])
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [F1]) Is Nothing Then ComboBox1_Change
End Sub
 

Pièces jointes

  • Logiciels(3).xlsm
    57 KB · Affichages: 2

Sellig

XLDnaute Junior
Désolé,

Dernière petite question, je l’espère.



Je dois reproduire ce que vous avez fait sur d’autres tableaux mais pour la partie 1 (avec la ComboBox) ça ne fonctionne pas. Dès que je clic, il ne m’affiche que les titres.

La partie 2, n’agit pas

Quelles sont les astuces s’il vous plait ?

Merci par avance

Je vous joins un exemple
 

Pièces jointes

  • Classeur1.xlsm
    23.3 KB · Affichages: 1

job75

XLDnaute Barbatruc
Un détail sur le dernier fichier : vous aurez remarqué que les lignes vides restent masquées.

Pour l'éviter utilisez :
VB:
Private Sub ComboBox1_Change()
    With Range("A2:F" & Application.Match([9^9], [A:A]))
        .AutoFilter Field:=3, Criteria1:=IIf(ComboBox1 = "All", "*", ComboBox1)
        .AutoFilter Field:=5, Criteria1:=IIf([E1] = "All", "*", [E1])
    End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [E1]) Is Nothing Then ComboBox1_Change
End Sub
 

Pièces jointes

  • Classeur1.xlsm
    25 KB · Affichages: 4

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…