Tri decroissant des données

dianbobo Messages postés 151 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 15 juin 2014 - 9 juin 2010 à 19:24
dianbobo Messages postés 151 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 15 juin 2014 - 10 juin 2010 à 12:32
bonjour tout le monde je voudrai faire un tri décroissant puis retourner l'avant derniere valeur plus petite du tableau dans une cellule.
les 100 dernieres valeurs c'est a dire compter les 100 valeurs a partir de la derniere valeur du tableau du coup j'ai lancer l'enregistreur de macro mais je n'arrive pas a simplifier la macro :
Sub Macro2()
'
' Macro2 Macro
'
' Touche de raccourci du clavier: Ctrl+b
'
    ActiveWorkbook.Worksheets("Feuil3").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil3").Sort.SortFields.Add Key:=Range("D3"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("D180:D220")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


merci de votre aide

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
10 juin 2010 à 01:01
Salut
Je ne vois pas trop ce que tu veux simplifier ...
Si tu classes les données dans le sens croissant (+ petit au + grand), l'avant dernière plus petite valeur sera donc en ligne 2

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
dianbobo Messages postés 151 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 15 juin 2014
10 juin 2010 à 12:32
bonjour tout le monde
voila j'ai bricoler un code
je vous explique ce que j'essai de faire en réalité
j'ai un tableau en colonne D de taille 100 (en fait je prend un tableau de taille 100 a partir de la derniere ligne non vide du tableau) la derniere ligne est :
Code: Tout sélectionner
l = Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
de la feuille ("feuil1") et je voudrai faire un tri decroissant de ce tableau dans ma macro ,puis ecrire à la cellule C40 de la feuille ("feuil2") l'avant dernier nombre plus petit du tableau trié:
voici un exemple supposons que dans ma feuille("feuil1") j'ai D=[0,4,-9,5,7]
je fait un tri decroissant la colonne D devient D=[7,5,4,0,-9] puis j'ecris en cellule C40 DE LA FEUILLE(feuil2) C40=0voici mon code:

Sub detemination_var()
    Dim t() As Double
    Dim k As Long
    Dim z As Double
    Dim e As Double
    Dim l As Long
    Dim j As Long
    Dim temp As Double
    Dim a As Long
    Dim position_mini As Long
    
    l = Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
    ReDim t(l - 100 To l)
    
    For k = l To LBound(t) + 2 Step -1
    'le point de départ se déclare a chaque tour,on considere provisoirement que t(k) est
   'le plus petit élément
       
        t(k) = Worksheets("Feuil1").Cells(k, 4).Value
        position_mini = k
        'on examine tous les éléments suivants:
       For j = k - 1 To LBound(t) + 1 Step -1
            t(j) = Worksheets("Feuil1").Cells(j, 4).Value
            If t(j) < t(position_mini) Then
                position_mini = j
            End If
           
            
        Next
        'à ce endroit on sait maintenant ou est le plus petit élément,il ne reste
       'plus qu'a effectuer la permutation.
        temp = t(position_mini)
         t(position_mini) = t(k)
         t(k) = temp
         'on a placé l'element numéro k,on passe à présent au suivant.
        
         
    Next
   'ecrire à la cellule C40 l'avant dernier nombre du tableau plus petit
   Worksheets("Feul2").Cells(40, 3).Value = Worksheets("Feuil1").Cells(l - 1, 4).Value
    
End Sub

j'ai deux questions ,
1)dans la forme le code que j'ai ecris est-il correcte?
2) lorsque jessai de le faire tourné j'ai l'erreur suivante: "l'indice n'appartient pas a la selection"
dans les lignes ci-dessous:

t(j) = Worksheets("Feuil1").Cells(j, 4).Value
t(k) = Worksheets("Feuil1").Cells(k, 4).Value
t(position_mini) 
merci de votre aide
Jeune membre
0
Rejoignez-nous