Les données sont triées sur plusieurs champs, y compris un couple qui sont des ordres de tri personnalisés. Un des types personnalisés est par tailles, qui comprend 57 catégories. Si je déclare la variable de tri commeDéfinir l'ordre de tri personnalisé
Const SizeSort As String = "XXS,2XS,XS,S,M,L,XL,1X,2XL,2X,XXL,2X/3X,... (out to 57 items)
Et:
.SortFields.Add Key:=Columns("H"), CustomOrder:=SizeSort
tout fonctionne bien. Cependant, j'aimerais que quelqu'un puisse changer l'ordre de tri sans avoir à entrer dans le code lui-même. Je jouais avec l'idée d'enregistrer un classeur qui contenait l'ordre de tri courant dans une colonne, puis en utilisant:
unicorns = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To unicorns
SizeSort = SizeSort & "," & Range("A" & i)
Next i
SizeSort = Right(SizeSort, Len(SizeSort) - 1)
Malheureusement, cela ne fonctionne pas - je reçois erreur d'exécution 13 Incohérence de type. J'imagine que cela a quelque chose à voir avec la déclaration Const, mais je ne peux pas comprendre pourquoi - les deux chaînes ressemblent identiques lorsqu'elles sont affichées dans la fenêtre Exécution.
Ce fil peut aider https://stackoverflow.com/questions/22366188/vba-type-mismatch-on-corderorder – SJR
@SJR En creusant ce fil, la réponse est d'utiliser une fonction séparée pour construire votre chaîne de tri, puis appelez-le directement à partir de l'instruction .Sort, CustomOrder: =. Bizarre, mais ça marche! Je vous remercie. – CAW