Erreur 1004 Apply

apark -  
 apark -
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. Paf
     
    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+
    0
    1. apark
       
      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
      0
  2. Paf
     
    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 !!
    0
    1. apark
       
      Salut Paf,

      ca march nickel,

      merci beuacoup
      :)
      0