Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Bonsoir chaelie2015,

Formule matricielle en BC2 :
VB:
=SIERREUR(INDEX($B$1:$K$1;EQUIV(GRANDE.VALEUR(SI($B2:$K2;$B2:$K2-COLONNE($B2:$K2)/1000000);COLONNES($BC2:BC2));$B2:$K2-COLONNE($B2:$K2)/1000000;0));"")
à valider par Ctrl+Maj+Entrée et tirer à droite et vers le bas.

A+
 

Pièces jointes

  • CHARLIE Classemnt d'écart et affichage de l'entete V1.xlsm
    36.7 KB · Affichages: 5

chaelie2015

XLDnaute Accro
Bonsoir
Merci énormément, JOB. C'est exactement ce qu'il me fallait, et cela s'avère plus simple qu'un code VBA.
A+
 

chaelie2015

XLDnaute Accro
Re job75
Je reviens et je joins le fichier source. Je ne comprends pas pourquoi cela ne fonctionne pas dans mon fichier.
Merci
 

Pièces jointes

  • CHARLIE Classement d'ecart et affichage de l'entete V2.xlsm
    124.6 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour chaelie2015, le forum,

Dans les formules du 1er tableau, en B2, remplacez les textes vides "" par 0 :
Code:
=SIERREUR(SI('BdD CEO'!$MM7>0;RECHERCHEV($A2;Zone_Lot_01;3;FAUX);0);0)
Et masquez les valeurs zéro par les options avancées (menu Fichier-Options).

A+
 

Pièces jointes

  • CHARLIE Classement d'ecart et affichage de l'entete V2.xlsm
    117.6 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Chaelie, Job,
En PJ un essai en VBA dans la lignée des fils précédent.
J'en ai profité pour masquer lignes et colonnes inutiles.
La macro est automatique quand on sélectionne la feuille "Matrice d'écart."
 

Pièces jointes

  • CHARLIE Classement d'ecart et affichage de l'entete V4.xlsm
    146.9 KB · Affichages: 3

job75

XLDnaute Barbatruc
Pour n'avoir que la formule en B2 à tirer utilisez INDIRECT :
Code:
=SIERREUR(SI('BdD CEO'!$MM7>0;RECHERCHEV($A2;INDIRECT("Zone_"&B$1);3;FAUX);0);0)
Salut sylvanu.
 

Pièces jointes

  • CHARLIE Classement d'ecart et affichage de l'entete V2.xlsm
    119.7 KB · Affichages: 5

job75

XLDnaute Barbatruc
Sur le fichier précédent, la fonction INDIRECT étant volatile, toutes les formules (3000) des 2 tableaux sont recalculées chaque fois qu'une cellule quelconque du fichier est modifiée ou validée.

Mais cela ne prend que 4 millièmes de seconde, il n'y a aucun problème et le VBA n'est pas nécessaire.
 

job75

XLDnaute Barbatruc
Dans la matrice de droite il y a 500 formules matricielles (colonnes BC à BL).

Mais pour déterminer les durées de recalcul sur des tableaux pleins je procède autrement.

1) Pour le 1er tableau j'ai conservé uniquement la formule en B4, elle se recalcule en 0,25 milliseconde, donc pour les 2500 cellules du tableau le recalcul se fera en 0,6 seconde.

2) Pour le 2ème tableau j'ai entré la formule matricielle uniquement dans les 10 cellules BC2:BL2.

La formule étant rendue volatile en ajoutant T(ALEA())&.

Puis j'ai entré 1000 dans les 50 cellules B2:AY2.

Le recalcul se fait en 0,3 milliseconde donc pour 500 cellules le recalcul se fait en 15 millisecondes.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Je me référais au fichier initial de Chaelie ( Lien ) sur lequel s'appliquera ces modifs.
La matrice de gauche est B2:AY51, celle de droite BC2:CZ51, soit 2 fois 2500 cellules;
C'est juste pour cela que je faisait la remarque. J'ai pensé que vous faisiez le calcul sur l'ensemble.
 

chaelie2015

XLDnaute Accro
Bonjour Job75, sylvanu, le forum
Je me permets de vous adresser à nouveau, car je fais face à une problématique récurrente. Lorsque j'actionne le bouton 'Rafraîchir', un message d'erreur signalant une 'Incompatibilité de type' apparaît, et des informations incorrectes sont affichées dans la feuille 'Matrice d'écart'.
J'ai associé un fichier préalablement rempli pour effectuer des tests.
Merci

 

Pièces jointes

  • BdD CEO V5 JOB CONSULTATION 2.1.xlsm
    123 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour chaelie2015, le forum,

Dans la macro Tri le bug se produit sur :
VB:
If T(i + 1, 1) <> "" Then T(i, 3) = T(i + 1, 2) - T(i, 2)
parce que T(i, 2) = "" et n'est donc pas numérique.

Pour le rendre numérique, 4 lignes plus haut remplacez T(i, 2) = "" par T(i, 2) = Empty

A+
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…