XL 2013 (RESOLU) Affichage des en-têtes de tableau selon l'ordre

chaelie2015

XLDnaute Accro
Bonsoir Forum
Je désire afficher les en-têtes du tableau situé dans la plage B2:AY52 dans la feuille intitulée 'Matrice d'écart,' plus précisément dans la plage BC2:BL52.
Mon objectif est d'organiser ces en-têtes en fonction des valeurs présentes dans chaque ligne, du plus grand au plus petit. Une fois que j'ai trié ces valeurs, je souhaite afficher les en-têtes correspondants à chaque valeur trouvée.
De plus, si plusieurs valeurs identiques se trouvent dans une ligne, je veux qu'elles soient également affichées dans le tableau BC2:BL52.
Pour des informations plus détaillées, je vous invite à consulter le fichier de test.

Exemple :
Nous commençons par la première ligne du tableau B2:AY52. La valeur la plus élevée est 56, qui se trouve dans les colonnes Lot_06, Lot_08 et Lot_10. Ensuite, nous avons la valeur 36, située dans la colonne Lot_05, suivie de la valeur 23, présente dans les colonnes Lot_01 et Lot_03. Mon souhait est que ces lots, à savoir Lot_06, Lot_08, Lot_10, Lot_05, Lot_01 et Lot_03, soient affichés respectivement dans la première ligne du tableau BC2:BL52.

Ce processus se répète pour la deuxième ligne du tableau B2:AY52 et ainsi de suite.
J'espère que mes explications étaient compréhensibles.
Merci
 

Pièces jointes

  • CHARLIE Classemnt d'écart et affichage de l'entete V1.xlsm
    29 KB · Affichages: 9
Dernière édition:
Solution
La macro Worksheet_Change revue et corrigée :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [D2,D4]) Is Nothing Then Exit Sub
    Target.Select
    Tri
    '---D2---
    If Val([D2]) < 1 Then [D2] = 1
    Rows("7:60").Hidden = True
    Rows(7).Resize([D2]).Hidden = False
    Sheets("Matrice d'écart").Rows("2:51").Hidden = True
    Sheets("Matrice d'écart").Rows("2").Resize([D2]).Hidden = False
    '---D4---
    If Val([D4]) < 1 Then [D4] = 1
    Columns("D:BA").Hidden = True
    Columns("D").Resize(, [D4]).Hidden = False
    Columns("BD:MQ").Hidden = True
    Columns("BD").Resize(, 6 * [D4]).Hidden = False
End Sub
Bonne nuit.

job75

XLDnaute Barbatruc
Cela dit la macro Tri ne donne pas les bons résultats, voyez plutôt celle-ci :
VB:
Sub Tri()
    Dim nom, nlot%, coldest%, nlig%
    Application.ScreenUpdating = False
    Application.EnableEvents = False 'désactive les évènements
    Application.Calculation = xlCalculationManual 'calcul manuel
    nom = [B7].Resize(50)
    For nlot = 1 To 50
        coldest = 6 * nlot + 51
        Cells(7, coldest).Resize(50) = nom
        Cells(7, coldest + 1).Resize(50) = Cells(7, nlot + 3).Resize(50).Value
        Cells(7, coldest).Resize(50, 2).Sort Cells(7, coldest + 1), xlAscending, Header:=xlNo 'tri
        nlig = Application.Count(Cells(7, coldest + 1).Resize(50))
        If nlig < 50 Then Cells(7, coldest).Offset(nlig).Resize(50 - nlig) = "" 'efface les noms sans montant
        Cells(7, coldest + 2).Resize(50) = ""
        If nlig > 1 Then Cells(7, coldest + 2) = Cells(8, coldest + 1) - Cells(7, coldest + 1)
    Next
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True 'réactive les évènements
End Sub
 

Pièces jointes

  • BdD CEO V5 JOB CONSULTATION 2.1.xlsm
    122 KB · Affichages: 3

chaelie2015

XLDnaute Accro
Bonsoir Job
tu as résolu le problème précédent, mais un nouveau problème est survenu lors du classement, principalement avec les lots 03, 04 et 06. Le fichier ci-joint illustre le problème : il manque le classement dans chaque lot, ainsi que l'écart entre le classement 1 et 2.
Merci d'avance
 

Pièces jointes

  • BdD CEO V5 JOB CONSULTATION 2.1.xlsm
    123.5 KB · Affichages: 0

chaelie2015

XLDnaute Accro
Cela dit la macro Tri ne donne pas les bons résultats, voyez plutôt celle-ci :
VB:
Sub Tri()
    Dim nom, nlot%, coldest%, nlig%
    Application.ScreenUpdating = False
    Application.EnableEvents = False 'désactive les évènements
    Application.Calculation = xlCalculationManual 'calcul manuel
    nom = [B7].Resize(50)
    For nlot = 1 To 50
        coldest = 6 * nlot + 51
        Cells(7, coldest).Resize(50) = nom
        Cells(7, coldest + 1).Resize(50) = Cells(7, nlot + 3).Resize(50).Value
        Cells(7, coldest).Resize(50, 2).Sort Cells(7, coldest + 1), xlAscending, Header:=xlNo 'tri
        nlig = Application.Count(Cells(7, coldest + 1).Resize(50))
        If nlig < 50 Then Cells(7, coldest).Offset(nlig).Resize(50 - nlig) = "" 'efface les noms sans montant
        Cells(7, coldest + 2).Resize(50) = ""
        If nlig > 1 Then Cells(7, coldest + 2) = Cells(8, coldest + 1) - Cells(7, coldest + 1)
    Next
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True 'réactive les évènements
End Sub
Bonsoir
Pardon, Job75, tu as été si rapide que je n'ai pas remarqué ta réponse après avoir envoyé mon message. Merci, tu as fourni la réponse que je recherchais.

Aussi, si tu permet, je souhaite masquer simultanément les lignes dans la feuille 'Matrice d'écart' en fonction de la valeur saisie dans la cellule D2 de la feuille 'BdD CEO'.
Merci par avance
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
La macro Worksheet_Change revue et corrigée :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [D2,D4]) Is Nothing Then Exit Sub
    Target.Select
    Tri
    '---D2---
    If Val([D2]) < 1 Then [D2] = 1
    Rows("7:60").Hidden = True
    Rows(7).Resize([D2]).Hidden = False
    Sheets("Matrice d'écart").Rows("2:51").Hidden = True
    Sheets("Matrice d'écart").Rows("2").Resize([D2]).Hidden = False
    '---D4---
    If Val([D4]) < 1 Then [D4] = 1
    Columns("D:BA").Hidden = True
    Columns("D").Resize(, [D4]).Hidden = False
    Columns("BD:MQ").Hidden = True
    Columns("BD").Resize(, 6 * [D4]).Hidden = False
End Sub
Bonne nuit.
 

Pièces jointes

  • BdD CEO V5 JOB CONSULTATION 2.1.xlsm
    122.7 KB · Affichages: 4
Dernière édition:

Discussions similaires

Réponses
6
Affichages
114

Statistiques des forums

Discussions
312 209
Messages
2 086 259
Membres
103 167
dernier inscrit
miriame