VBA - tri tableau 3x3
Cha69
Messages postés
36
Statut
Membre
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je débute depuis quelques jours sur VBA et à vrai dire, je me mélange les pinceaux !!
Comment trier un tableau à 3 colonnes et 3 lignes en fonction de la 3ème ligne et par ordre décroissant?
ex:
10 19 40
6 16 76
50 100 300
quand l'algo fait le tri, je voudrais qu'il déplace la colonne entièrement et non juste la valeur. pour obtenir ceci :
40 19 10
76 16 6
300 100 50
Merci beaucoup pour votre aide !!
Je débute depuis quelques jours sur VBA et à vrai dire, je me mélange les pinceaux !!
Comment trier un tableau à 3 colonnes et 3 lignes en fonction de la 3ème ligne et par ordre décroissant?
ex:
10 19 40
6 16 76
50 100 300
quand l'algo fait le tri, je voudrais qu'il déplace la colonne entièrement et non juste la valeur. pour obtenir ceci :
40 19 10
76 16 6
300 100 50
Merci beaucoup pour votre aide !!
A voir également:
- VBA - tri tableau 3x3
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Logiciel tri photo - Guide
- Imprimer un tableau excel - Guide
3 réponses
Bonjour,
Dans ces cas là c'est plus simple de le faire avec l'enregistreur de macro pour avoir les parametres.
Et tu obtiens :
Dans ces cas là c'est plus simple de le faire avec l'enregistreur de macro pour avoir les parametres.
Et tu obtiens :
Range("A1:C3").Sort Key1:=Range("A3"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
eric
Bonjour Eriiic!
Ta solution n'est pas réalisable, car le tableau construit n'est pas sur excel mais sur VBA.
Le tableau est fictif.
J'avais un code qui marchait pour un tableau à une colonne mais il ne marche pas pour trois colonnes!
Il ne trie que la troisième ligne sans modifier les autres.
exemple code ne fonctionnant pas:
Dim tableau3(1 To 3, 1 To 20)
For l = 1 To nb
m = l
For k = m + 1 To nb + 1
If tableau3(3, k) > tableau3(3, m) Then
m = k
End If
Next k
If l <> m Then
tmp = tableau3(3, m)
tableau3(3, m) = tableau3(3, l)
tableau3(3, l) = tmp
End If
Next l
Ta solution n'est pas réalisable, car le tableau construit n'est pas sur excel mais sur VBA.
Le tableau est fictif.
J'avais un code qui marchait pour un tableau à une colonne mais il ne marche pas pour trois colonnes!
Il ne trie que la troisième ligne sans modifier les autres.
exemple code ne fonctionnant pas:
Dim tableau3(1 To 3, 1 To 20)
For l = 1 To nb
m = l
For k = m + 1 To nb + 1
If tableau3(3, k) > tableau3(3, m) Then
m = k
End If
Next k
If l <> m Then
tmp = tableau3(3, m)
tableau3(3, m) = tableau3(3, l)
tableau3(3, l) = tmp
End If
Next l
Sans analyser ton code s'il ne trie que la 3ème ligne c'est que tu ne permutes pas les éléments des autres lignes en même temps...
Ceci dit rien ne t'empeche d'utiliser une feuille pour y déposer ton tableau et utiliser le .sort qui sera toujours plus performant que 2 ou 3 boucles imbriquées contenant des tests.
Ex:
A moins que ce ne soit pour te perfectionner en vba...
eric
Ceci dit rien ne t'empeche d'utiliser une feuille pour y déposer ton tableau et utiliser le .sort qui sera toujours plus performant que 2 ou 3 boucles imbriquées contenant des tests.
Ex:
Sub test()
Dim tableau3
ReDim tableau3(1 To 3, 1 To 20)
' remplir tableau3 avec ses valeurs
'
' on dépose le tableau
[Feuil2!A1:C20] = tableau3
' on trie décroissant sur la ligne 3
[Feuil2!A1:C20].Sort Key1:=Range("A3"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
' et on récupère le résultat
tableau3 = [Feuil2!A1:C20].Value
End Sub
A moins que ce ne soit pour te perfectionner en vba...
eric