Erreur sur tri bulle..

  • Initiateur de la discussion Initiateur de la discussion SylvainPG
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

SylvainPG

Guest
ub Bouton6_QuandClic() 'effectue un tri bulle
Salut le forum!!

Bon je vous explique, j'essaye depuis ce matin de faire mon tri bulle. Il fonctionne mais à moitié, j'aimerais savoir si l'un d'entre vous à une idée à ce sujet. Sachant que Tablo est définit de 2 à Ubound(Tablo). Le tri fonctionne mais il ne commence pas à la valeur la plus basse et au bout d'un moment il ne tri plus le tableau (cependant, il permute toujours certaines valeurs...)

J'ai évidemment cherché sur internet, sur le forum, dans les bouquin. Mais je ne vois pas d'explication.

Bonne journée mesdames, mesdemoiselles, messieurs




For h = LBound(tablo) To UBound(tablo)
For k = 2 To h - 1
If tablo(k) > tablo(k + 1) Then
tmp = tablo(k)
tablo(k) = tablo(k + 1)
tablo(k + 1) = tmp
End If
Next k
Next h



For i = 2 To UBound(tablo)
Sheets("repartition_masses").Cells(20, i) = tablo(i)
Next i
End Sub
 
Re : Erreur sur tri bulle..

Bonjour,

pour trier un tableau à 1 dimension, je te propose ce code:

Code:
For i = LBound(tableau) To UBound(tableau)
    For j = i + 1 To UBound(tableau)
'        If tableau(i) > tableau(j) Then 'tri croissant
        If tableau(i) < tableau(j) Then 'tri décroissant
            Temp = tableau(j)
            tableau(j) = tableau(i)
            tableau(i) = Temp
        End If
    Next j
Next i
Adapte le à ton cas.
Tu mets en commentaire le tri non souhaité, ici croissant.
 
Re : Erreur sur tri bulle..

Re salut le forum!!

Bon j'ai trouver, comme un grand 🙂
Voila la solution que j'ai trouvé: la boucle i se place à la fin du tableau (tri bulle classique), mais visiblement si on dit à vba de faire par exemple une boucle For i= 10 to 2, et bien il faut lui préciser le Step -1 pour qu'il parcoure les valeurs 10, 9,8,7,.....,2. Est-ce vrai???? (je fais mes conclusions tout seul...)

Lorsque j'ai posté mon problème je n'avais pas écris mon code de cette façon là, il me semble que le vrai tribulle se construit comme cela avec un curseur qui se place à la fin, un autre qui commence au début (boucle j). La boucle J intervertit les valeur si un chiffre est supérieur à son suivant jusque la position du curseur i...

Si vous voulez le code en entier pour voir le contexte, demandez sur ce post 😉

@+




For i = UBound(tablo) To LBound(tablo) Step -1

For j = LBound(tablo) To i - 1
If tablo(j) > tablo(j + 1) Then
tmp = tablo(j)
tablo(j) = tablo(j + 1)
tablo(j + 1) = tmp
End If
Next j
Next i




For i = 2 To UBound(tablo)
Sheets("repartition_masses").Cells(20, i) = tablo(i)
Next i
End Sub
 
Re : Erreur sur tri bulle..

bonsoir

Ceci est un tri rapide
pratiquement aussi rapide que le Tri QuickSort mais sans récursivité

Code:
Sub TriRapide(Liste())
DebListe = LBound(Liste())
FinListe = UBound(Liste())
X = FinListe / 2
Do While X
 For A = DebListe To FinListe - X
  If Liste(A) > Liste(A + X) Then
     VarTemp = Liste(A): Liste(A) = Liste(A + X): Liste(A + X) = VarTemp
     For B = A - X To DebListe Step -X
      If Liste(B + X) >= Liste(B) Then Exit For
      VarTemp = Liste(B): Liste(B) = Liste(B + X): Liste(B + X) = VarTemp
     Next
  End If
 Next: X = X / 2
Loop
End Sub

Roland
 
Dernière édition:
Re : Erreur sur tri bulle..

Bonjour,

Tri Quick-sort : 0,05 s pour 10.000 éléments

Code:
Sub essai()
  Dim temp(10000) As Double
  For i = 1 To 10000
     temp(i) = Rnd
  Next i
  t = Timer
  Call tri(temp, 1, 10000)
  MsgBox Timer - t
End Sub

Sub tri(a() As Double, gauc, droi) ' Quick sort
   ref = a((gauc + droi) \ 2)
   g = gauc: d = droi
   Do
      Do While a(g) < ref: g = g + 1: Loop
      Do While ref < a(d): d = d - 1: Loop
        If g <= d Then
           temp = a(g): a(g) = a(d): a(d) = temp
           g = g + 1: d = d - 1
        End If
    Loop While g <= d
    If g < droi Then Call tri(a, g, droi)
    If gauc < d Then Call tri(a, gauc, d)
End Sub

JB
Formation Excel VBA JB
 
Re : Erreur sur tri bulle..

bonjour

Merci à toi BOISGONTIER d'avoir apporté un peu d'eau à mon moulin 😉

et pour ce qui est du numérique ou de l'alphanumérique,
c'est évident que cela fonctionne ! il suffit de déclarer ses tableaux()

Cordialement. Roland
 
Re : Erreur sur tri bulle..

bonjour
c'est évident que cela fonctionne ! il suffit de déclarer ses tableaux()

Cordialement. Roland

Re,

tout dépend de la procédure car dans mon livre il y a un exemple de tri "QuickSort" pour lequel est spécifié que cette procédure marche uniquement pour les nombres. Il est vrai qu'elle est différente de celle de JB. Voilà pour l'anecdote.

Edit: En tout cas merci à toi JB, ma macro s'executera plus vite 🙂

Bonne après-midi.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
734
Réponses
15
Affichages
786
Réponses
3
Affichages
923
Réponses
33
Affichages
3 K
Réponses
9
Affichages
884
Retour