XL 2016 Rechercher le nom d'une colonne à un croisement ligne colonne

Ninon2019

XLDnaute Nouveau
Bonjour,
je souhaiterais récupérer le nom d'une colonne en fonction de l'intitulé de la ligne recherché et de la première valeur trouvée non vide sur cette ligne.
Je souhaiterais aussi récupérer le % correspondant à la valeur cherchée

Exemple :

Tableau 1 :
---------------- Machine A------- Machine B---------Machine C
Machine A --------------------------------------------------------
Machine B -----10%---------------------------------------------
Machine C---------------------------------------------------------
Machine D ------------------------------------------- ---40%-----

Tableau 2 :

---------------------Machine A-------Machine B------Machine C------Machine D
Valeur attendue-------Vide----------Machine A------- vide----------- Machine C
% attendu ---------------------------10%-------------------------------40%

Pour la Machine B (tableau2) je cherche la ligne Machine B (tableau1). Je tombe sur la première valeur non nulle (10%) qui correspond à l'intitulé de la colonne machine A

J'espère que j'ai été assez claire. Un grand merci par avance pour votre aide (fichier en PJ)
 

Pièces jointes

  • Fichier exemple.xlsx
    9.5 KB · Affichages: 13
Dernière édition:
Solution
Bonjour Ninon,

Finalement, ton exercice est trop difficile à faire par des formules ;
aussi je l'ai fait avec une macro VBA ; voici ton fichier modifié.

Tu peux voir que la plage C8:F15 est vide (il n'y a aucune formule).
Fais Ctrl e : ça exécute la macro Dispatch() ➯ travail effectué

Alt F11 pour voir le code VBA, puis revenir sur Excel

Pour les 2 tableaux, si tu ajoutes des lignes et des colonnes, ça marchera
aussi (adaptation automatique, si tu respectes la même structure !).

À te lire pour avoir ton avis, et si tout est OK, merci de cliquer
en bas de ce post sur « Marquer comme solution ».

Si tu as besoin d'une adaptation, n'hésite pas à...

Ninon2019

XLDnaute Nouveau
Merci Beaucoup Soan! Petite question, par exemple dans ta formule =SIERREUR(DECALER(A1;0;EQUIV(VRAI;INDEX(B3:E3>0;0);0));"") si tu souhaites rechercher la valeur Machine B dans la colonne A du tableau 1 et donc ne pas mettre A1 (pour automatiser la recherche au maximum) quelle formule je dois rajouter stp ?
 

soan

XLDnaute Barbatruc
Inactif
Oh la la ; non, il ne faut pas le voir comme ça ! dans la formule, ce n'est pas
le texte "Machine B" qui est cherché : on cherche la 1ère valeur non vide de
la ligne ; voici des explications supplémentaires :

A) d'abord, le EQUIV(..;INDEX(..);..) recherche la 1ère valeur non vide en B3:E3 ;
* si B3:E3 était vide, erreur : #N/A ; message qui est évité grâce à SIERREUR()
* ça rencontre le 10% de B3 ➯ retour : 1, car c'est la 1ère colonne de B3:E3

B)
c'est seulement à ce moment là que DECALER() est utilisé et retourne
la valeur correcte attendue, et c'est une fonction simple qui ne prends
pas de temps d'exécution significatif : c'est très rapide, et c'est inutile
de l'optimiser ; pour faire ce DECALER(), A1 est obligatoire !

--------------------------------------------------------------------------------------

Sinon, cette formule recherche "Machine B" en colonne A :

=SIERREUR(EQUIV("Machine B";A:A;0);"") ➯ retour : 3, car "Machine B"
est en ligne 3 ; si non trouvé : #N/A, message évité par SIERREUR()

soan
 
Dernière édition:

Ninon2019

XLDnaute Nouveau
Merci Soan.
J'ai essayé de trouver plusieurs solutions hier soir et la nuit portant conseil je me retrouve avec 2 problématiques :
- la première c'est que finalement la formule ne marche pas dans tous les cas car je peux avoir pour une même ligne avec 2 cellules de % non vides donc partir sur une formule où on s'arrête dès qu'on trouve une valeur non nulle ne marche pas. Il serait mieux de dire si je tomber sur une valeur non vide alors je récupère l'intitulé de la colonne correspondante puis je passe aux autres lignes.
- la deuxième c'est que dans la formule =SIERREUR(DECALER(A1;0;EQUIV(VRAI;INDEX(B3:E3>0;0);0));"") on part du principe que l'on connait la ligne puisqu'on écrit B3:C3 or on ne la connait pas. En fait, on vient chercher la cellule Machine A du tableau 2 et ensuite on va chercher la valeur dans la col A du tableau 1 pour trouver la ligne puis l'intitulé de la colonne. Puis on viendrait étendre la formule sur la ligne pour les valeurs Machine B, Machine C etc donc c'est vraiment un automatisme qu'on souhaite mettre en place.

Je pensais donc créer une ligne supplémentaire niveau 2 dans le tableau 2 pour rapatrier l'intitulé de la colonne 2 dans le cas où j'ai un deuxième % sur la même ligne et rapatrier le % du niveau 2. Idem avec un niveau 3. Mais du coup cela serait aussi une autre formule...
J'espère que cela est clair. Je te remercie beaucoup pour ton aide :)
 

Pièces jointes

  • Fichier exemple avec niveaux.xlsx
    10.3 KB · Affichages: 4
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour Ninon,

Finalement, ton exercice est trop difficile à faire par des formules ;
aussi je l'ai fait avec une macro VBA ; voici ton fichier modifié.

Tu peux voir que la plage C8:F15 est vide (il n'y a aucune formule).
Fais Ctrl e : ça exécute la macro Dispatch() ➯ travail effectué

Alt F11 pour voir le code VBA, puis revenir sur Excel

Pour les 2 tableaux, si tu ajoutes des lignes et des colonnes, ça marchera
aussi (adaptation automatique, si tu respectes la même structure !).

À te lire pour avoir ton avis, et si tout est OK, merci de cliquer
en bas de ce post sur « Marquer comme solution ».

Si tu as besoin d'une adaptation, n'hésite pas à demander.

soan
 

Pièces jointes

  • Fichier exemple avec niveaux.xlsm
    17.2 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth