Tri tableau bidimensionnel par VBA

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 !

laurent45

XLDnaute Occasionnel
Bonjour le Forum,

J'ai trouvé un petit script vba dans les archives, et j'ai essayé de l'adapter à mon problème.
Je voulais trier mon tableau bidimensionnel dans une combobox à 2 colonne avant de le recopier sur ma feuille.

Code:
Sub tri_Tableau()
Dim Valeur As Byte
Dim i As Integer
Dim Cible As Variant
Do 'tri
    Valeur = 0
    For i = 0 To UBound(CRTTab2) - 1
        If CRTTab2(i, 0) < CRTTab2(i + 1, 0) Then
            Cible = CRTTab2(i, 0)
            CRTTab2(i, 0) = CRTTab2(i + 1, 0)
            CRTTab2(i + 1, 0) = Cible
            Valeur = 1
        End If
    Next i
Loop While Valeur = 1
End Sub
Le problème, c'est que le tri ne se fait que sur une colonne (tout est mélangé), et en plus le tri n'est pas cohérent :
col1 col2 avant le tri
2.58 2
3.56 5
5.00 4
5.25 7

col1 col2 après le tri
5.25 2
5.00 5
2.58 4
3.56 7

Le problème, c'est que je ne comprends pas le script. 😱

Le copier/coller n'a pas que du bon.

Merci
 
Bonjour laurent45

Ton souci doi venir que tu ne traites pas ta deuxième colonne lorsque tu interverti tes données, essaye comme ceci :

Sub tri_Tableau()
Dim Valeur As Byte
Dim i As Integer
Dim Cible As Variant
Dim k As Byte

Do 'tri
&nbsp; &nbsp; Valeur = 0
&nbsp; &nbsp;
For i = 0 To UBound(CRTTab2) - 1
&nbsp; &nbsp; &nbsp; &nbsp;
If CRTTab2(i, 0) < CRTTab2(i + 1, 0) Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
For k = 0 To UBound(CRTTab2, 2)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cible = CRTTab2(i, k)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CRTTab2(i, k) = CRTTab2(i + 1, k)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CRTTab2(i + 1, k) = Cible
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Valeur = 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
Next k
&nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
Next i
Loop While Valeur = 1
End Sub

sans garanti car non testé :whistle:

salut
 
Re le Forum,

Autant pour moi ! :whistle:

Après une analyse de ma question, j'ai redirigé ma recherche et j'ai trouvé ça :

Lien supprimé
Merci à Erci C

Edit : J'ai testé, Hervé. Ca fonctionne pour le déplacement des 2 argumenents de ligne. Mais reste le problème de l'ordre de tri.
Je vais travailler sur la fonction de Eric C
Encore Merci.

@+

Message édité par: laurent45, à: 04/10/2005 15:05
 
Bonsoir Hervé, le Forum,

J'ai réussi à adapter la fonction de tri d'une ComboBox pour 2 colonnes :

Public Function TriCombo(liSte)
Dim First As Integer, Last As Integer, i As Integer, j As Integer, Temp, Temp2

First = LBound(liSte)
Last = UBound(liSte)
For i = First To Last - 1
For j = i + 1 To Last
If CDbl(liSte(i, 0)) > CDbl(liSte(j, 0)) Then
Temp = liSte(j, 0)
Temp2 = liSte(j, 1)
liSte(j, 0) = liSte(i, 0)
liSte(j, 1) = liSte(i, 1)
liSte(i, 0) = Temp
liSte(i, 1) = Temp2
End If
Next j
Next i
TriCombo = liSte
End Function
Et là, j'ai bien compris de quoi il retournait.
J'ai rajouté CDbl(), parce que le tri ne tenait pas compte des nombre à 1 ou 2 chiffre (ex: 1 ou 11).

Pour ta Sub de Tri_tableau, j'ai fait de même :
Sub tri_Tableau()
Dim Valeur As Byte
Dim i As Integer
Dim Cible As Variant
Dim k As Byte

Do 'tri
Valeur = 0
For i = 0 To UBound(CRTTab2) - 1
If CDbl(CRTTab2(i, 0)) < CDbl(CRTTab2(i + 1, 0)) Then
For k = 0 To UBound(CRTTab2, 2)
Cible = CRTTab2(i, k)
CRTTab2(i, k) = CRTTab2(i + 1, k)
CRTTab2(i + 1, k) = Cible
Valeur = 1
Next k
End If
Next i
Loop While Valeur = 1

Bonne soirée

@+

Message édité par: laurent45, à: 05/10/2005 21:55
 
- 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

Discussions similaires

Réponses
5
Affichages
909
Réponses
15
Affichages
782
Réponses
5
Affichages
573
Réponses
4
Affichages
732
Retour