Classement critères tableau double entrée

Bonjour à tous

Je serai à la recherche d'une fonction excel qui me permettrait de classer par quantité des critères dans un tableau à double entrée.

Comme ce n'est pas évident à expliquer, voici en PJ mon excel et ce que je souhaite avoir de façon automatique dans le tableau jaune (par colonne, premier défaut, deuxième défaut, troisième défaut)

Merci par avance pour votre aide !

Rodolphe

45rodolphe.xlsx (12.73 Ko)

Bonsoir Rodolphe, bonsoir le forum,

Je ne comprends pas, d'après ton exemple, ce qui permet de définir l'ordre des défauts !...

Le code ci-dessous les place en fonction de la valeur non nulle rencontrée en parcourant la colonne de haut en bas.

À tester :

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)

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 K) 'redimensionne le tableau des lignes TL
            TL(K) = TV(I, 1) 'récupère dans la ligne K de TL la donnée ligne I colonne 1 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
        '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), 1) = Application.Transpose(TL)
        Erase TL 'vide le tableau TL
    End If 'fin de la condition
Next J 'prochaine colonne de la boucle 1
End Sub

Bonjour ThauThème,

Merci tout d'abord pour ton retour ! Pour répondre à ta question, c'est les valeurs du tableau, par colonne, qui me permettent de classer mes critères

Je viens de tester ton code, et il fonctionne c'est ce que je recherche ! Mais à un détail près... il me faudrait les critères classés dans le tableau final (défaut 1, le critère avec la plus grande quantité, défaut 2 la deuxième plus grande quantité, etc...). Dans le cas ou il y a plusieurs mêmes quantités (par exemples 3 défauts avec 10, les prendre dans l'ordre du tableau).

Je ne sais pas si je me suis bien fait comprendre... sinon n'hésites pas à revenir vers moi !

En te remerciant

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

C'est super ! Comme je te l'avais indiqué, quand les valeurs sont identiques l'ordre du tableau n'est pas important. Donc pour moi c'est OK c'est ce que je cherchais

Par contre, je cherche à avoir seulement les 3 premiers défauts, mais dans ta macro je ne sais pas qu'est-ce que je dois modifier pour qu'au final je n'ai que 3 valeurs... Pourrais tu m'aider ? Merci !

bonjour

bonjour thau theme

en attendant une contribution sans vba pour les "empechés"

11rodolphe.xlsx (13.71 Ko)

cordialement

Bonjour

Merci pour ta contribution ! Cela fonctionne quand les quantités ne sont pas identiques, mais dans le cas de 3 défauts avec 1 quantité, dans le tableau j'ai 3 fois le même défaut qui apparaît.

Je sens qu'on est pas loin !

re

et comme cela

6rodolphe2.xlsx (14.90 Ko)

cordialement

Re,

Désolé d'insister mais ce n'est pas encore ça... sur la première colonne du 12/06, tu as mis comme valeurs 20/20/18/18 pour respectivement A/B/C/D. Ici, je souhaite donc avoir dans le tableau de synthèse le défaut n°1 : A, défaut n°2 : B, défaut n°3 : C.

Dans le cas des plus grandes valeurs qui sont plusieurs, il ne faut pas les sauter après avoir pris la première. Par exemple dans le cas de ces valeurs : 20/20/20/18, dans mon tableau de synthèse je souhaite le défaut 1 à 20, le défaut 2 à 20, et le défaut 3 à 20.

Ai-je été suffisamment clair dans ces explications ? Sinon n'hésites pas à revenir vers moi merci en tout cas de ton aide !

re

donc: peu importe la valeur du defaut ; ce qui compte c'est sa position ; n'est ce pas ?

cordialement

Oui tout a fait, le defaut peut avoir 100, 1000, etc... c'est bien la position qui m'intéresse. Et quand les nombres sont identiques, on peut par exemple les prendre en suivant dans le tableau.

re

re test

11rodolphe3.xlsx (14.17 Ko)

cordialement

Bonsoir,

Salut ThauThème, Tulipe,

Une proposition à tester !

Bonjour à vous !

tulipe_4 ta nouvelle version ne fait pas ce que je recherche. En effet, pour exemple, si par exemple j'ai une quantité à 1 pour A et 5 pour B, le tableau de synthèse m'affiche Défaut 1 / A, défaut 2 / B alors que ça devrait être l'inverse vu que le B à une valeur plus grande.

Par contre le tableau de JFL semble fonctionner très bien ! Je pars sur celui là, merci beaucoup !

Merci à vous tous pour votre contribution, j'apprécie énormément

A bientôt !

Rechercher des sujets similaires à "classement criteres tableau double entree"