VBA - tri d'un tableau

Le
michel ou sam
Bonjour,
j'ai défini un tableau (4,3) sous VBA
comment trier le tableau ,
croissant pour la première colonne et décroissant pour la 2eme colonne ?

Exemple
2,2,1
1,1,2
2,3,3
1,3,4

deviendrait

1,3,4
1,1,2
2,3,3
2,2,1

et pendant qu'on y est
- comment trouver la valeur max de la première colonne - y a t'il une
formule toute faite ?
- comment trouver le nombre d'éléments non vides de la 2eme colonne- y a
t'il une formule toute faite ?
ou faut il analyser chaque élément via une boucle ?

Merci d'avance.
Michel
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #22848061
bonjour Michel,

il y a un exemple ici :
http://silkyroad.developpez.com/vba/tableaux/
macro : TriCroissantMulticolonnes

et beaucoup d'autre informations.

isabelle


Le 2010-11-26 10:11, michel ou sam a écrit :
Bonjour,
j'ai défini un tableau (4,3) sous VBA
comment trier le tableau ,
croissant pour la première colonne et décroissant pour la 2eme colonne ?

Exemple
2,2,1
1,1,2
2,3,3
1,3,4

deviendrait

1,3,4
1,1,2
2,3,3
2,2,1

et pendant qu'on y est
- comment trouver la valeur max de la première colonne - y a t'il une
formule toute faite ?
- comment trouver le nombre d'éléments non vides de la 2eme colonne- y a
t'il une formule toute faite ?
ou faut il analyser chaque élément via une boucle ?

Merci d'avance.
Michel


Tatanka
Le #22848761
Salut Michel,

Sans boucler sur le tableau VBA, j'ai une solution tordue.
J'aimerais bien savoir si c'est possible sans boucler et sans
utiliser ce subterfuge de désespéré :-)))

Sub Exemple()
Application.DisplayAlerts = False
'Voici un tableau 4x3 contenant
'un vide dans la deuxième colonne
Dim T
NL = 4
NC = 3
ReDim T(1 To NL, 1 To NC)
For i = 1 To NL
For j = 1 To NC
T(i, j) = Int(Rnd() * 100)
Next j
Next i
T(3, 2) = ""

Sheets.Add
Set ici = Range(Cells(1, 1), Cells(NL, NC))
ici.Value = T
maxc1 = Application.Max(ici.Columns(1))
nonvidec2 = Application.CountA(ici.Columns(2))
ActiveSheet.Delete
MsgBox maxc1 & vbNewLine & nonvidec2
End Sub

Serge

et pendant qu'on y est
- comment trouver la valeur max de la première colonne - y a t'il une formule toute faite ?
- comment trouver le nombre d'éléments non vides de la 2eme colonne- y a t'il une formule toute faite ?
ou faut il analyser chaque élément via une boucle ?

Merci d'avance.
Michel
michel ou sam
Le #22855901
Bonjour,
merci à tous les deux pour vos idées.
Michel

"michel ou sam" 4cefce23$0$5389$

Bonjour,
j'ai défini un tableau (4,3) sous VBA
comment trier le tableau ,
croissant pour la première colonne et décroissant pour la 2eme colonne ?

Exemple
2,2,1
1,1,2
2,3,3
1,3,4

deviendrait

1,3,4
1,1,2
2,3,3
2,2,1

et pendant qu'on y est
- comment trouver la valeur max de la première colonne - y a t'il une
formule toute faite ?
- comment trouver le nombre d'éléments non vides de la 2eme colonne- y a
t'il une formule toute faite ?
ou faut il analyser chaque élément via une boucle ?

Merci d'avance.
Michel

michdenis
Le #22856521
Bonjour,

Pourquoi ne pas utiliser une feuille pour effectuer ton tri de ton tableau

Tu remplaces le tableau TBLO par le nom de ta variable Tableau dans ta procédure.

'-------------------------------------------
Sub test()

Dim Tblo As Variant
Dim Sh As Worksheet

'Pour charger des valeurs dans la variable Tblo
'Ceci ce n'était que pour effectuer MES manipulations
With Worksheets("Feuil1")
Tblo = .Range("A1:C" & .Range("A65536").End(xlUp).Row).Value
End With

Application.ScreenUpdating = False
'Ajout d'une feuille
Set Sh = Worksheets.Add
'Copie du tableau dans la feuille ajoutée
With Sh.Range("A1").Resize(UBound(Tblo, 1), UBound(Tblo, 2))
'recopie les valeurs du tableau dans la feuille
.Value = Tblo
'Application du tri désiré.
'Dans mon exemple la plage ne contient pas d'en-tête(à modifier)
.Sort key1:=.Item(1, 1), order1:=xlAscending, _
Key2:=.Item(1, 2), order2:=xlDescending, Header:=xlNo
'copie du tableau trié dans la variable
Tblo = .Value
End With
'Suppression du message d'alerte quant à la suppresion de la feuille
Application.DisplayAlerts = False
'suppression de la feuille ajoutée.
Sh.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub
'-------------------------------------------

MichD
--------------------------------------------



"michel ou sam" a écrit dans le message de groupe de discussion : 4cf222e7$0$32463$

Bonjour,
merci à tous les deux pour vos idées.
Michel

"michel ou sam" 4cefce23$0$5389$

Bonjour,
j'ai défini un tableau (4,3) sous VBA
comment trier le tableau ,
croissant pour la première colonne et décroissant pour la 2eme colonne ?

Exemple
2,2,1
1,1,2
2,3,3
1,3,4

deviendrait

1,3,4
1,1,2
2,3,3
2,2,1

et pendant qu'on y est
- comment trouver la valeur max de la première colonne - y a t'il une
formule toute faite ?
- comment trouver le nombre d'éléments non vides de la 2eme colonne- y a
t'il une formule toute faite ?
ou faut il analyser chaque élément via une boucle ?

Merci d'avance.
Michel

Publicité
Poster une réponse
Anonyme