VBA-Fonction pour classer des chiffres

job75

XLDnaute Barbatruc
Bonjour à tous,

J'ai 4 chiffres x1 x2 x3 x4 chacun pouvant prendre une valeur de 1 à 9.

Je cherche à obtenir un nombre constitué de ces 4 chiffres classés par ordre croissant.

J'ai écrit cette fonction en VBA en étudiant toutes les combinaisons possibles, mais c'est une solution bête et guère applicable s'il y a plus de 4 chiffres :

Code:
Function classe(x1, x2, x3, x4)
y1 = 1 * (x1 & x2 & x3 & x4)
y2 = 1 * (x1 & x2 & x4 & x3)
y3 = 1 * (x1 & x3 & x2 & x4)
y4 = 1 * (x1 & x3 & x4 & x2)
y5 = 1 * (x1 & x4 & x2 & x3)
y6 = 1 * (x1 & x4 & x3 & x2)
y7 = 1 * (x2 & x1 & x3 & x4)
y8 = 1 * (x2 & x1 & x4 & x3)
y9 = 1 * (x2 & x3 & x1 & x4)
y10 = 1 * (x2 & x3 & x4 & x1)
y11 = 1 * (x2 & x4 & x1 & x3)
y12 = 1 * (x2 & x4 & x3 & x1)
y13 = 1 * (x3 & x1 & x2 & x4)
y14 = 1 * (x3 & x1 & x4 & x2)
y15 = 1 * (x3 & x2 & x1 & x4)
y16 = 1 * (x3 & x2 & x4 & x1)
y17 = 1 * (x3 & x4 & x1 & x2)
y18 = 1 * (x3 & x4 & x2 & x1)
y19 = 1 * (x4 & x1 & x2 & x3)
y20 = 1 * (x4 & x1 & x3 & x2)
y21 = 1 * (x4 & x2 & x1 & x3)
y22 = 1 * (x4 & x2 & x3 & x1)
y23 = 1 * (x4 & x3 & x1 & x2)
y24 = 1 * (x4 & x3 & x2 & x1)
classe = Application.Min(y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24)
End Function

Quelqu'un a-t-il une idée pour une autre solution ?

Merci d'avance.

A+
 

job75

XLDnaute Barbatruc
Re : VBA-Fonction pour classer des chiffres

Bonjour Wilfried,

Merci pour ta solution, mais elle utilise la feuille de calcul, alors que je veux l'éviter.

La fonction n'est utilisée que dans des procédures VBA, j'aurais dû en effet le préciser.

A+
 

job75

XLDnaute Barbatruc
Re : VBA-Fonction pour classer des chiffres

Bonjour Pierrejean,

Merci pour ton travail, mais ce n'est pas ça.

Je me rends compte que j'ai manqué de clarté.

x1 x2 x3 x4 sont des variables VBA.

A l'instant t elles prennent par exemple les valeurs :
x1 = 6
x2 = 4
x3 = 5
x4 = 3

Il faut que la fonction classe(x1, x2, x3, x4) renvoie le nombre 3456 : elle réalise donc un classement des variables.

Bien entendu, la fonction peut servir dans une feuille de calcul, mais ce n'est pas le but, elle sert dans une procédure VBA.

A+
 

wilfried_42

XLDnaute Barbatruc
Re : VBA-Fonction pour classer des chiffres

re: Bonjour pierrejean :)

Apres une bonne sieste, j'ai planché un peu, voici une fonction sur un autre principe que celui de pierrjean

Code:
Function concat_tri(tablo As Variant) As String
    Dim i As Integer, v() As Variant, r() As Variant, c As Variant
    i = -1
    For Each c In tablo
        i = i + 1: ReDim Preserve v(i): v(i) = c
    Next
    ReDim Preserve r(UBound(v) + 1)
    For i = LBound(v) To UBound(v)
        r(Application.WorksheetFunction.Rank(v(i), tablo)) = v(i)
    Next i
    For i = UBound(r) To 1 Step -1
        concat_tri = concat_tri & r(i)
    Next
End Function

ps: simplement pour un exercice
 

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin