VBA-Fonction pour classer des chiffres

  • Initiateur de la discussion Initiateur de la discussion job75
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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+
 
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+
 
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+
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour