Je n'arrive pas à faire fonctionner se tri

Résolu/Fermé
alexandre13 200 Messages postés 22 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 29 mai 2009 - 13 mai 2009 à 12:03
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 13 mai 2009 à 14:02
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 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
13 mai 2009 à 12:16
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 Date d'inscription mardi 12 mai 2009 Statut Membre Dernière intervention 29 mai 2009
13 mai 2009 à 13:35
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 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
13 mai 2009 à 13:47
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
13 mai 2009 à 14:02
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