[Résolu] Réinitialiser un filtre sans réinitialiser le tri !

djodjodjo

XLDnaute Occasionnel
Bonjour à tous,

Aujourd'hui un petit souci sur les filtres et le tri, j'ai le code suivant :

Code:
With Sheets("Mafeuille")
If .FilterMode = True Then .ShowAllData
End With
qui fonctionne très bien pour "remettre mes filtres à zéro". Le problème c'est que ça enlève aussi le tri de A à Z sur une de mes colonnes, alors que je dois impérativement garder ce tri.

J'ai pensé à créer une 2ème macro qui réactiverait le tri de A à Z sur la colonne après l'exécution de la 1ère macro:
Code:
ActiveWorkbook.Worksheets("Mafeuille").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Mafeuille").AutoFilter.Sort.SortFields.Add Key:= _
Range("F9:F684"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
        :=xlSortNormal
    With ActiveWorkbook.Worksheets("Mafeuille").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
MAIS cette colonne en question peut changer de place dons si ça arrive alors à cause du Range("F9:F684") ça va me trier la mauvaise colonne de A à Z...comment faire ?

Merci d'avance !
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Réinitialiser un filtre sans réinitialiser le tri !

Re

sous condition que le titre n'apparaisse qu'une seule fois dans la feuille
nb: remplacer "titre" par le titre de la colonne

Code:
ActiveWorkbook.Worksheets("Mafeuille").AutoFilter.Sort.SortFields.Clear
 
Set c = ActiveSheet.Cells.Find("titre", LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
  Set fin = c.Offset(65536 - c.Row).End(xlUp)
  Set plage = Range(c, fin)
End If
 
ActiveWorkbook.Worksheets("Mafeuille").AutoFilter.Sort.SortFields.Add Key:= _
plage , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
        :=xlSortNormal
    With ActiveWorkbook.Worksheets("Mafeuille").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 

djodjodjo

XLDnaute Occasionnel
Re : Réinitialiser un filtre sans réinitialiser le tri !

Merci pierrejean ça fonctionne très bien. Juste une question:

J'imagine que ActiveSheet.Cells.Find va s'arrêter de chercher dès qu'il aura trouvé "titre" pour la première fois. Comment cette fonction effectue-t-elle la recherche? Par ligne puis par colonne, par colonne puis par ligne ? Au cas où "titre" devrait être présent à deux endroits, que j'impose qu'il ne soit pas avant une telle ligne ou une telle colonne.

Merci d'avance
 

djodjodjo

XLDnaute Occasionnel
Re : Réinitialiser un filtre sans réinitialiser le tri !

Pierrejean,

J'ai juste modifié ton code en mettant cette partie dans la 2ème boucle If sinon il y a une erreur '13' si "titre" a changé dans la feuille
Code:
ActiveWorkbook.Worksheets("Projets").AutoFilter.Sort.SortFields.Add Key:= _
        plage, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Projets").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        End With
 

pierrejean

XLDnaute Barbatruc
Re : Réinitialiser un filtre sans réinitialiser le tri !

Re

J'avoue ne pas savoir comment find cherche dans le cas ou ou la recherche est effectuée sur Cells
Tu peux remplacer Cells par la plage ou tu es sur de trouver "titre" (ex: Range("A1:W10")
 

Discussions similaires

Réponses
11
Affichages
497
Réponses
3
Affichages
648

Statistiques des forums

Discussions
312 610
Messages
2 090 204
Membres
104 451
dernier inscrit
scp9990