Classer des valeurs selon leurs contenu..

Guido

XLDnaute Accro
Bonjour le Forum

Je cherche a classer des chiffres selon leurs Valeurs..

Voir le pti fichier..

D'avance Merci

Guido
 

Pièces jointes

  • GUIDO_LES_POURCENTAGES_2018.xlsm
    589.3 KB · Affichages: 30

job75

XLDnaute Barbatruc
Bonjour Guido,

Tu pourrais avoir la décence de présenter un fichier sans bug à l'ouverture !!!

Ton fichier en retour avec les 6 formules matricielles dans la plage AC2:AH5.

Bonne journée.
 

Pièces jointes

  • GUIDO_LES_POURCENTAGES.xlsm
    132.2 KB · Affichages: 31

Guido

XLDnaute Accro
Bonjour Guido,

Tu pourrais avoir la décence de présenter un fichier sans bug à l'ouverture !!!

Ton fichier en retour avec les 6 formules matricielles dans la plage AC2:AH5.

Bonne journée.

Re

Une macro qui n'avait pas été suprimée ..

Je m'excuse

Voici le fichier sans bug.

J'ai compléter avec les formules Matricielles. Mais celles des colonnes AE...AF pas de résultats???

Les formules s'affichent mais aucun chiffres ???

Merci d'avance

A plus

Guido
 

Pièces jointes

  • GUIDO_LES_POURCENTAGES_PROTO.xlsm
    634.7 KB · Affichages: 28

job75

XLDnaute Barbatruc
Re,

Bien sûr, ce n'est plus le même fichier, il y a maintenant des valeurs d'erreur en colonne AJ.

Par sécurité j'ai donc ajouté le test SI(ESTNUM(xxx); dans les 3 formules en AC2 AE2 AG2.

Ton fichier en retour.

PS : Je te prépare aussi une solution par fonction VBA.

A+
 

Pièces jointes

  • GUIDO_LES_POURCENTAGES_PROTO.xlsm
    596.1 KB · Affichages: 80

job75

XLDnaute Barbatruc
Re,

Voici la fonction VBA :
Code:
Function Classement(R As Range, CHX As Range, critere$, sens$)
'sens = "c" => croissant, sens = "d" => décroissant
Dim i%, x$, n%, a(), b(), c()
For i = 1 To R.Count
    x = Replace(R(i).Text, ",", ".")
    If Val(x) > 0 Then
        If Evaluate(x & critere) Then
            n = n + 1
            ReDim Preserve a(1 To n): a(n) = Val(x) + IIf(sens = "c", i, -i) / "1E9"
            ReDim Preserve b(1 To n): b(n) = CHX(i)
        End If
    End If
Next
If n = 0 Then Exit Function
If sens = "c" Then Call tri_croissant(a, b, 1, n) Else Call tri_decroissant(a, b, 1, n)
ReDim c(1 To 4, 1 To 2) '4 lignes à alimenter
For i = 1 To UBound(c)
    If i <= n Then c(i, 1) = a(i): c(i, 2) = b(i)
Next
Classement = c 'matrice
End Function
Elle utilise la macro bien connue Quick sort sous 2 formes différentes.

Dans la feuille de calcul sélectionner la plage AC2:AD5, entrer la formule dans la barre de formule et valider en bloc matriciellement par Ctrl+Maj+Entrée.

Faire la même chose avec les plages AE2:AF5 et AG2:AH5.

Nota : le nombre décimal du critère doit être écrit avec un point.

Fichier joint.

A+
 

Pièces jointes

  • GUIDO_LES_POURCENTAGES_VBA.xlsm
    615.3 KB · Affichages: 83
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Guido,

J'ai testé les durées du recalcul des formules d'une plage AC2:AH5 avec les 2 solutions :

- formules matricielles du post #4 => 0,5 millième de seconde

- fonction VBA du post #6 => 41 millièmes de seconde

chez moi sur Win 10 - Excel 2013.

Y a pas photo, ce sont les formules matricielles du post #4 qu'il faut utiliser.

A+
 

Statistiques des forums

Discussions
312 198
Messages
2 086 146
Membres
103 130
dernier inscrit
FRCRUNGR