Re,
Désolé mais je n'ai pas la solution. Le nouveau code fait presque ce que tu demandes. Si les valeur sont égales il les renvoie dans l'ordre du tableau. Si une d'entre elles est différente elle sont triées par ordre de taille mais...
Imaginons que l'on ait trois valeurs (voir 16/06/2017) : deux identiques et une différente. BI (la plus grande va être en premier) mais les deux autres, identiques, ne sont plus gérer dans l'ordre du tableau et n'apparaissent pas forcément comme dans ton exemple.
Désolé mais je n'ai rien de mieux :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim TEST As Boolean 'déclare la variable TEST
Dim TMP As Variant 'déclare la variabel TMP
Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For J = 2 To UBound(TV, 2) 'boucle 1 : sur toutes les colonnes J du tableau des valeurs TV (en partant de la seconde)
K = 1 'initialise la variable K
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, J) <> 0 Then 'condition : si la donnée ligne I colonne J de TV n'est pas nulle
ReDim Preserve TL(1 To 2, 1 To K) 'redimensionne le tableau des lignes TL
TL(1, K) = TV(I, 1) 'récupère dans la ligne 1 colonne K de TL la donnée ligne I colonne 1 de TV
TL(2, K) = TV(I, J) 'récupère dans la ligne 2 colonne K de TL la donnée ligne I colonne J de TV
K = K + 1 'incrémente K
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
If K > 1 Then 'condition : si K est supérieure à 1
For I = 1 To UBound(TL, 2)
For K = 1 To UBound(TL, 2)
If TL(2, I) <> TL(2, K) And I <> K Then TEST = True
Next K
Next I
If TEST = False Then
'renvoie dans la cellule ligne 2 colonne J + 17 de l'onglet O, le tableau TL transposé
O.Cells(2, J + 17).Resize(UBound(TL, 2), 1) = Application.Transpose(TL)
Erase TL 'vide le tableau TL
GoTo suite
Else
For I = 1 To UBound(TL, 2)
For K = 1 To UBound(TL, 2)
If TL(2, I) > TL(2, K) And I <> K Then
TMP1 = TL(1, K): TL(1, K) = TL(1, I): TL(1, I) = TMP1
TMP2 = TL(2, K): TL(2, K) = TL(2, I): TL(2, I) = TMP2
End If
Next K
Next I
End If
'renvoie dans la cellule ligne 2 colonne J + 17 de l'onglet O, le tableau TL transposé
O.Cells(2, J + 17).Resize(UBound(TL, 2), 1) = Application.Transpose(TL)
Erase TL 'vide le tableau TL
End If 'fin de la condition
suite:
Next J 'prochaine colonne de la boucle 1
End Sub