Trier avec une liste perso
Bonjour à tous,
J'ai fais quelques recherches sur le sujet du tri avec une liste perso en code VBA. Le soucis c'est que toutes les réponses que j'ai vues sont les mêmes : en gros faire une macro avec l'éditeur et copier coller du code un peu barbare...
Je souhaite trier l'ensemble de cellules C7:D9 selon la colonne D en gardant bien sur les valeurs liées par rapport aux lignes. Ce tri s'effectue dans l'ordre suivant : A faire, fait, en attente.
Exemple de tableau à trier :
att En Attente
fa Fait
afa A Faire
donne une fois trié :
afa A Faire
fa Fait
att En Attente
Ici le code de base donné par les macro excel :
Range("C7:D9").Select
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("D7:D9"), _
SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"A Faire,Fait,En Attente", DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Feuil1").Sort
.SetRange Range("C7:D9")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Ce code fonctionne, mais il me semble qu'il peut être dégraissé...
J'ai donc essayé de réduire petit à petit et j'arrive à cela qui fonctionne également :
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("D7:D9"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="A Faire,Fait,En Attente", DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Feuil1").Sort
.SetRange Range("C7:D9")
.Apply
End With
Mais mon souci actuel c'est que j'ai fais cela en tâtonnant sans comprendre la logique du code...
Question 1 : dans ce que j'ai enlevé y a t il des données importantes?
Question 2 : qui peut m'expliquer pas à pas comment fonctionne ce code? Plus explicitement pourquoi je dois toujours faire appel à la feuille en cours et donner tous ces "détails" à excel.
Merci d'avance pour vos réponses et bonne soirée.
Petit up, si quelqu'un a une réponse?