Erreur 1004 Apply

Bonjour,

j'essaie de faire un code qui trie les colonnes 2 par 2.
colonne i : tickers
colonne i+1 : returns

la colonne i se répète mais l'avantage de le présenter comme cela est purement visuel

l'erreur que j'obtiens est une erreur d'exécution 1004 ,
référence de tri non valide. Vérifiez qu'elle se trouve bien parmi les données à trier et que la zone à trier n'est pas identique ou vide

voici mon code

Sub essaitri()

l = Selection.End(xlDown).Row
l = l

Dim k As Integer

For k = 1 To l Step 2

Range(Cells(k, 1), Cells(k + 1, 1)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("Feuil16").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil16").Sort.SortFields.Add Key:=Range( _
Cells(k + 1, 2), Cells(k + 1, 497)), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Feuil16").Sort
.SetRange Range(Cells(k, 1), Cells(k + 1, 497))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply

End With
Next k

le programme bloque au niveau de l'avant dernière ligne "Apply"

je vous remercie d'avance pour votre aide

cdt,

2 réponses

  1. bonsoir,

    pas tout compris le code par rapport au besoin! et en plus j'ai une erreur dès
    ActiveWorkbook.Worksheets("Feuil16").Sort.SortFields.Clear 

    Les colonnes ont elles toujours le même nombre de lignes ?
    Y a t il des entêtes de colonnes ?
    le tri doit s'effectuer sur la colonne i ou i+1 ?
    le tri doit être croissant ou décroissant ?
    Quelle version excel ?

    A+
    1. Salut,

      les colonnes ont toujours le même nombre de lignes
      entêtes: colonne i : ticker
      colonne i+1 : return

      le tri s'effectue sur la colonne i+1
      (on réordonne du plus grand au plus petit, il faut que les tickers en face se mettent dans le bon ordre pour correspondre au bon return)

      excel 2007

      merci
  2. re bonsoir

    solution proposée:
    dercol = Cells(1, 1).End(xlToRight).Column  
    Dim k As Integer  
    For k = 1 To dercol Step 2  
         derlig = Cells(1, k).End(xlDown).Row  
         Range(Cells(1, k), Cells(derlig, k + 1)).Sort Key1:=Cells(1, k + 1), _  
            Order1:=xlDescending, Header:=xlGuess, _  
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _  
            DataOption1:=xlSortNormal  
    Next k  
    


    quel que soit le nombre de lignes ou de colonnes, à partir de la première colonne (1) , on prends les deux colonnes (1 et 2) on fait un tri décroissant basé sur la colonne 2 puis on passe aux deux suivantes .... jusqu'aux dernières colonnes.

    A vérifier sur des données sauvegardées, on ne sait jamais !!

    A +

    edit: réalisé sur 2003.
    re edit : penser à déclarer les variables derlig et der col

    et re edit : j'ai oublier de préciser le feuille . donc à adapter si pas lancer depuis la feuille à trier !!
    1. Salut Paf,

      ca march nickel,

      merci beuacoup
      :)