Je n'arrive pas à faire fonctionner se tri

Résolu
alexandre13 200 Messages postés 22 Date d'inscription   Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
je suis mauvais en programmation et je voudrai savoir pourquoi se code pourtant simple ne marche pas pou trier dans l'ordre croissant

Sub tri_croissant(t() As Integer)

Dim n As Integer
Dim i As Integer
Dim j As Integer
Dim temp As Integer
Dim nb_element As Integer
Dim colone As Integer
Dim ligne As Integer

ligne = 4
colone = 1
nb_element = 12

For i = 1 To nb_element

merci d'avance à ceux qu'il vele me répondre

t(i) = Cells(ligne + i - 1, colone).Value

Next i

For j = 1 To n - i
For i = 1 To n - j

If t(i) > t(i + 1) Then
temp = t(i)
t(i) = t(i + 1)
t(i + 1) = temp
End If
Next i
Next j

ligne = 4
colone = 2
nb_element = 12

For i = 1 To nb_element
Cells(ligne + i - 1, colone) = t(i)
Next i
End Sub

4 réponses

  1. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Bonjour,
    tu peux faire un tri plus facilement, en enregistrant directement la macro. Tu sélectionnes toutes les colonnes, puis tu vas dans les options du tri pour savoir par quelle colonne trier, et indiquer que tu veux trier dans l'ordre croissant.

    0
  2. alexandre13 200 Messages postés 22 Date d'inscription   Statut Membre
     
    oui je suis bien d'accord que l'on peut avec un fonction excel mais je cherche à le faire avec VBA
    0
  3. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Je comprends bien ton souhait de faire ton tri en passant par une macro VBA, mais ce que je te dis, c'est qu'en utilisant l'enregisteur de macro, ça se fait assez facilement. Même si pour enregistrer ta macro tu dois être sous Excel, tu pourras obtenir un tri plus rigoureux que si tu le fais en codant tout du début jusqu'à la fin.

    Sinon, pour en revenir à ton code, tu essaies de faire :

    For j = 1 To n - i 
    For i = 1 To n - j 
    


    Ton n est bien déclaré, mais il n'est pas initialisé donc comment veux tu que cela fonctionne ?
    Commence déjà par régler ce petit problème, je pense qu'ensuite ton programme devrait fonctionner.
    0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    Pas trop lr temps de tester ton code

    voici un extrait qui fonctionne
    le tableau s'appelle "alpha" et la variable "nbre"ont été préalablement affectés
    ton test m'a paru bizarre < au lieu de <= ?

    Tri croissant
      For i = 1 To nbre
            j = i
            For k = j + 1 To nbre
                '
                'si la cellule en dessous est inférieure alors elle devient j (j= la plus faible)
                If alpha(k) <= alpha(j) Then j = k
                 '  on descend d'une cellule jusqu' au bas de la zone à trier
            Next k
        ' si il y a plus faible que la cellule "i" étudiée
        If i <> j Then
            'variable temporaire
            tmp = alpha(j)
            'on remplace dans le tableau "alpha" la valeur de j par i
            alpha(j) = alpha(i)
            'on remplace dans le tableau "alpha" la valeur de i par j
            ' la valeur la + faible se retrouve donc à la place de la cellule "i" étudiée
            alpha(i) = tmp
        End If
      Next i
    
    
    ' Ecrit la zone triée et épurée (ici dans des cellules mais peut-etre adapté à des list et compobox)
    Range("A:A").ClearContents
    cptr = 1
    While cptr <= nbre
        Cells(cptr, 1) = alpha(cptr)
        cptr = cptr + 1
    Wend


    Edit 14:06h
    Source: F.Sigonneau sur
    http://frederic.sigonneau.free.fr/
    0