Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA - tri d'un tableau

4 réponses
Avatar
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

4 réponses

Avatar
isabelle
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


Avatar
Tatanka
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
Avatar
michel ou sam
Bonjour,
merci à tous les deux pour vos idées.
Michel

"michel ou sam" a écrit dans le message de news:
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

Avatar
michdenis
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" a écrit dans le message de news:
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