2 votes

Trier plusieurs clés en VBA; Erreur d'exécution 450: Nombre incorrect d'arguments ou affectation de propriété non valide

J'ai écrit ce code VBA pour m'aider à trier une base de données d'informations que j'ai (Nom, Numéro de facture, Adresse, etc). J'ai récemment appris comment trier en VBA sans sélectionner la plage réelle dans la feuille de calcul et avec ça j'ai essayé de trier avec plusieurs clés (clé1, clé2, clé3), mais sans succès. Je reçois toujours une erreur d'exécution 450 : Mauvais nombre d'arguments ou assignation de propriété invalide lors de l'exécution de ce code. Je veux pouvoir trier une plage de données plusieurs fois, par exemple trier une plage (A:K) par colonne F, puis par E, puis par B, etc.

Voici le code que j'utilise pour le tri de mes colonnes :

ActiveSheet.Range("A:K").Sort _
Key1:=ActiveSheet.Range("F2"), Order1:=xlAscending, HEADER:=xlYes, Ordercustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
Key2:=ActiveSheet.Range("E2"), Order2:=xlAscending, HEADER:=xlYes, Ordercustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption2:=xlSortNormal, _
Key3:=ActiveSheet.Range("D2"), Order3:=xlAscending, HEADER:=xlYes, Ordercustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption3:=xlSortNormal

C'est étrange, car au début j'ai essayé d'exécuter les 2 premières clés (clé1, clé2) et ça a très bien fonctionné, puis j'ai copié et collé pour créer la clé suivante (clé3) et l'erreur est survenue. Quand j'essaie de déboguer, tout le code ci-dessus est mis en surbrillance.

La seule autre façon à laquelle je peux penser est d'exécuter le code où la plage (A:K) est sélectionnée dans la feuille de calcul, mais je ne veux pas faire ça.

1voto

Jeeped Points 96233

Il semble que vous essayez de retravailler du code de macro enregistré. Le code enregistré pour une méthode Range.Find enregistrée est très verbeux. Voici tout ce dont vous devriez avoir besoin.

With Sheets("Sheet1")
    With Intersect(.Range("A1").CurrentRegion, .Range("A:K"))
        .Cells.Sort Key1:=.Columns(6), Order1:=xlAscending, _
                    Key2:=.Columns(5), Order2:=xlAscending, _
                    Key3:=.Columns(4), Order3:=xlAscending, _
                Orientation:=xlTopToBottom, Header:=xlYes
    End With
End With

Franchement, je ne sais pas si vous pouvez simplement ajouter Ordercustom:=1 à chaque ligne de cela. Si je me souviens bien, les tris personnalisés ne peuvent pas être effectués sur plus d'un champ à la fois. Dans ce cas, effectuez trois tris, chacun avec un Ordercustom:=1 mais n'oubliez pas de le faire dans l'ordre inverse ; par ex. colonne D d'abord, puis E et enfin le tri primaire sur la colonne F.

Veuillez noter qu'il y a un maximum de trois colonnes pour définir le tri principal et les tris secondaires avec cette méthode. Si vous en avez besoin de plus, triez d'abord sur ceux-là et exécutez un tri ultérieur sur les trois colonnes prédominantes restantes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X