Formulaire multi filtres
Bonjour,
J'ai un code pour faire des tri sur un formulaire ( je l'ai trouvé sur un exemple et l'ai adapté sur mon formulaire et ça fonctionne ), mais avec ce code, on peut trier uniquement selon un seul critère. C'est à dire pour vous donner un exemple, si on sélectionne trier selon le fournisseur "tonton", et après on veut trier pour ce fournisseur "tonton", les produit de 50kg, ben ça ne fonctionne pas.
Je peux trier soit l'un ou l'autre, mais pas les 2.
Je vous écris le code que j'ai, qui marche bien pour trier selon un seul critère, mais comme c'est un code que j'ai repris et adapté, je le comprend pas bien, j'ai donc du mal à le modifier pour pouvoir sélectionner plusieurs filtres en même temps :
Dim LesCats As Object, DerCol As Byte
Dim Cel As Range
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$B$6" Then
Cells.EntireColumn.Hidden = False
DerCol = [KZ6].End(xlToLeft).Column
If Target.Value = "FOURNISSEUR" Then
Cells.EntireColumn.Hidden = False
Else
For Each Cel In Range(Cells(6, 3), Cells(6, DerCol))
Cel.EntireColumn.Hidden = IIf(Cel.Value = Target, False, True)
Next Cel
End If
Application.EnableEvents = False
Target.Value = "FOURNISSEUR"
Application.EnableEvents = True
End If
'[...] ici il y a le même code pour tous les critères pour lesquels je veux faire un tri, en adaptant la cellule, et le libelé
end sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$6" Then
Set LesCats = CreateObject("Scripting.Dictionary")
DerCol = [KZ6].End(xlToLeft).Column
For Each Cel In Range(Cells(6, 3), Cells(6, DerCol))
If Not LesCats.Exists(Cel.Value) And Cel.Value <> "" Then LesCats.Add Cel.Value, Cel.Value
Next Cel
For Each it In LesCats.items
laliste = laliste & "," & it
Next it
laliste = Right(laliste, Len(laliste) - 1)
With Range("b6").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=laliste
End With
End If
'[...] pareil ici, il y a le même code pour tous les critères
end subMerci de m'aider
Bonjour,
Difficile de t'aider avec seulement un code, mais il est clair que tout se joue ici:
For Each Cel In Range(Cells(6, 3), Cells(6, DerCol))
Cel.EntireColumn.Hidden = IIf(Cel.Value = Target, False, True)
Next CelDe ce que j'ai compris c'est ici que tu filtres en décidant de masquer ou non une colonne, tu peux d'ailleurs écrire ça:
For Each Cel In Range(Cells(6, 3), Cells(6, DerCol))
Cel.EntireColumn.Hidden = Cel <> Target
Next CelVisiblement tu répètes le code en fonction du critère que tu as renseigné, je pense que tu te trompes en faisant ça, tu devrais permettre à une cellule de rester affichée selon ces conditions cellule est égale au critère OU critère non précisé.
Tu relies tous tes tests avec des AND pour dire : je veux que mon fournisseur soit "tonton" ou que le fournisseur ne soit pas précisé, ET que le poids soit 50kg OU que le poids ne soit pas précisé etc etc...
Bonjour,
Difficile de t'aider avec seulement un code, mais il est clair que tout se joue ici:
For Each Cel In Range(Cells(6, 3), Cells(6, DerCol)) Cel.EntireColumn.Hidden = IIf(Cel.Value = Target, False, True) Next CelDe ce que j'ai compris c'est ici que tu filtres en décidant de masquer ou non une colonne, tu peux d'ailleurs écrire ça:
For Each Cel In Range(Cells(6, 3), Cells(6, DerCol)) Cel.EntireColumn.Hidden = Cel <> Target Next CelVisiblement tu répètes le code en fonction du critère que tu as renseigné, je pense que tu te trompes en faisant ça, tu devrais permettre à une cellule de rester affichée selon ces conditions cellule est égale au critère OU critère non précisé.
Tu relies tous tes tests avec des AND pour dire : je veux que mon fournisseur soit "tonton" ou que le fournisseur ne soit pas précisé, ET que le poids soit 50kg OU que le poids ne soit pas précisé etc etc...
En realité je ne comprend pas ce code, je l'ai juste repris et adapté à mon cas, et ça fonctionne, mais ce n'est pas un code pour du multifiltre
Voici l'exemple avec lequel j'ai repris le code :
Bonjour,
Il est bizarre le fichier que tu m'as transmis, je ne vois pas où se trouvent tes critères pour le filtre, et surtout... pourquoi les données sont à l'envers? Si ton problème c'est que tes données sont étallées sur des colonnes, la solution c'est de les copier et d'effectuer le collage spécial "Transposer" qui permet d'intervertir les lignes et les colonnes, une fois que tout sera à nouveau dans le bon sens, tu pourras filtrer ton fichier comme tu le souhaites
Oui, voila, les données sont repartis sur les colonnes, et j'aimerais donc filtrer en utilisant plusieurs critères en gardant les données repartit sur les colonnes, car le code marche pour un seul critère.
Ceci n'est pas mon fichier, mais un fichier sur internet qui permet de filtrer avec des données repartis sur les colonnes, j'ai recopier ce code et adapté à mon fichier, ça marche, mais j'ai 2 point noirs :
1) Je ne comprend pas complètement le code
2)Et donc je ne sais pas comment le modifier pour filtrer sur plusieurs critères en même temps
Re,
En fait ce que je veux dire c'est que tu ne devrais pas t'embêter à coder un filtre sur colonne, Excel filtre déjà très bien sur les lignes, il faut juste que tu intervertisses ton fichier pour passer au dessus du codage VBA, en un copier coller
Re,
En fait ce que je veux dire c'est que tu ne devrais pas t'embêter à coder un filtre sur colonne, Excel filtre déjà très bien sur les lignes, il faut juste que tu intervertisses ton fichier pour passer au dessus du codage VBA, en un copier coller
Re oui, j'ai bien compris,
Mais mon dans mon cas, je dois vraiment filtrer sur colonnes
Re,
Ah c'est bien dommage
Dans ce cas... le fichier que tu m'avais transmis, où est ce que tu mets tes critères de filtre? parce que je n'ai pas compris où les trouver...
C'est dans "nom de salarié" et "categorie de salarié" pour le moment, je peux trier soit avec l'un soit avec l'autre, mais pas les deux en même temps,
Je te recopie ici le code VBA qu'il y a dans ce fichier :
Dim LesCats As Object, DerCol As Byte
Dim Cel As Range
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$A$3" Then
Cells.EntireColumn.Hidden = False
DerCol = [IV4].End(xlToLeft).Column
If Target.Value = "CATEGORIES DE SALARIÉS :" Then
Cells.EntireColumn.Hidden = False
Else
For Each Cel In Range(Cells(3, 2), Cells(3, DerCol))
Cel.EntireColumn.Hidden = IIf(Cel.Value = Target, False, True)
Next Cel
End If
Application.EnableEvents = False
Target.Value = "CATEGORIES DE SALARIÉS :"
Application.EnableEvents = True
End If
If Target.Address = "$A$2" Then
Cells.EntireColumn.Hidden = False
DerCol = [IV4].End(xlToLeft).Column
If Target.Value = "NOM DES SALARIÉS :" Then
Cells.EntireColumn.Hidden = False
Else
For Each Cel In Range(Cells(2, 2), Cells(2, DerCol))
Cel.EntireColumn.Hidden = IIf(Cel.Value = Target, False, True)
Next Cel
End If
Application.EnableEvents = False
Target.Value = "NOM DES SALARIÉS :"
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$3:$B$3" Then
Set LesCats = CreateObject("Scripting.Dictionary")
DerCol = [IV4].End(xlToLeft).Column
For Each Cel In Range(Cells(3, 1), Cells(3, DerCol))
If Not LesCats.Exists(Cel.Value) And Cel.Value <> "" Then LesCats.Add Cel.Value, Cel.Value
Next Cel
For Each it In LesCats.items
laliste = laliste & "," & it
Next it
laliste = Right(laliste, Len(laliste) - 1)
With Range("A3").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=laliste
End With
End If
If Target.Address = "$A$2:$B$2" Then
Set LesCats = CreateObject("Scripting.Dictionary")
DerCol = [IV4].End(xlToLeft).Column
For Each Cel In Range(Cells(2, 1), Cells(2, DerCol))
If Not LesCats.Exists(Cel.Value) And Cel.Value <> "" Then LesCats.Add Cel.Value, Cel.Value
Next Cel
For Each it In LesCats.items
laliste = laliste & "," & it
Next it
laliste = Right(laliste, Len(laliste) - 1)
With Range("A2").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=laliste
End With
End If
End SubJ'ai du mal à comprendre ce code également...
Re,
J'ai fait un nouveau code, si tu veux ajouter plus de critères, il faudra juste changer la ligne Set plageCriteres en mettant la cellule de début et la cellule de fin.
Voici le fichier en retour que tu peux tester:
Salut,
Le filtre ne fonctionne pas, lorsqu'on selectionne un nom ( de categorie ou de nom ), ça ne filtre pas ce qui se trouve sur les colonnes a coté.
Sinon en ouvrant le fichier, j'ai vu que tu changer la partie "*worksheet_change", mais tu n'a pas touché à la partie *selectionchange, que faire de cette dernière ?
Je suis vraiment débutant en VBA, c'est complexe ces codes ...
Bonjour,
C'est bizarre ce que tu me dis, je viens d'ouvrir le fichier, j'ai tapé "MR XX", validé avec entrée, et ça m'a bien affiché uniquement les colonnes où le nom était "MR XX", idem pour la catégorie si je met "WEB" par exemple, est-ce que tu mets bien les critères sur la colonne B en validant ensuite?
Pour être honnête, je ne sais pas à quoi sert le selection change, je le supprimerais si j'étais toi
ça ne fonctionne pas, j'ai excel 2010
Sinon je ne vois pas comment mettre en multi filtre, tu dis remplacer par la première et la dernière ? je ne vois pas comment l'ecrire
Re,
J'ai Excel 2010 aussi (d'ailleurs tu dis avoir 2016 sur ton profil), et ça marche chez moi sans aucun souci...
Tu essayes peut-être de copier le code sur ton vrai classeur en espérant que ça marche et ça plante... Si c'est ça je vais devoir apporter une toute petite modification à mon code, je te passe une version légèrement modifiée, j'en ai profité pour enlever le Worksheet_Selection_Change :
Re,
je suis sous un autre ordinateur avec excel 2010, non je n'ai pas recopier, je teste bien ce fichier, mais ça ne fait rien du tout, je selectionne Mr xx par exemple, rien ne se passe en faite
Pourtant j'ai activé le contenu, car c'est un fichier telécharger + j'ai activé les macro ( remarque le fichier est sous format 97-2003, xls )
Re,
Ah attention, "MR xx" ce n'est pas pareil que "MR XX", le filtre que je t'ai fait respecte la casse, c'est à dire que les majuscules et les minuscules sont bien différenciées, tu ne souhaites pas que ce soit le cas?
Re,
Ah attention, "MR xx" ce n'est pas pareil que "MR XX", le filtre que je t'ai fait respecte la casse, c'est à dire que les majuscules et les minuscules sont bien différenciées, tu ne souhaites pas que ce soit le cas?
ce n'est pas moi qui écrit, je sélectionne directement avec la bande deroulante avec tout les nom sous le nom, donc bien en majuscule ("MR XX")
Re,
Ah attention, "MR xx" ce n'est pas pareil que "MR XX", le filtre que je t'ai fait respecte la casse, c'est à dire que les majuscules et les minuscules sont bien différenciées, tu ne souhaites pas que ce soit le cas?
ce n'est pas moi qui écrit, je sélectionne directement avec la bande deroulante avec tout les nom sous le nom, donc bien en majuscule ("MR XX")
Ah!
Je viens de voir le souci, toi tu mets tes critères en colonne A, moi il faut que ce soit en colonne B, essaye d'écrire "MR XX" en B2 par exemple, tu verras que ça filtrera, je pensais que tes critères seraient dans la colonne B, comme tes "en-têtes" de ligne étaient en colonne A, je ne pensais pas que tu allais mélanger en-têtes et données sur la même colonne...