Je n'arrive pas à faire fonctionner se tri

Résolu
alexandre13 200 Messages postés 22 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

chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
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
alexandre13 200 Messages postés 22 Statut Membre
 
oui je suis bien d'accord que l'on peut avec un fonction excel mais je cherche à le faire avec VBA
0
chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
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
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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