Poser votre question
0

RechercheV vers le haut - une solution ingénieuse

posée 2020-11-08 15:41:02 +0100

Image Gravatar de Pierre DeCambrai

updated 2020-11-08 18:03:43 +0100

Bonjour,

Il ne m'est pas habituel de quemander une solution toute faite, mais cela fait plusieurs jours (euphémisme) que je cherche sans résultat.
Le contexte (transposition simplifiée d'un autre fichier) ; 3 ateliers (A,B,C) des employés (aléatoires - j'ai recours à l'intérim), et un nombre de pièces produites par chaque employé dans différents ateliers.
Les contraintes : on ne trie ni les ateliers, ni les employés ; la résolution du problème n'utilisera ni macros, ni fonction personnelle, on n'ajoute pas de colonnes à gauche, mais extension sur la droite à volonté.
Le problème : La colonne C (nbre pièces produites) contient une formule qui, dès la saisie d'un atelier et d'un nom, me propose le nombre de pièces produites par cet employé la dernière fois qu'il a travaillé dans cet atelier.
Cette formule sera écrasée par une saisie si la proposition est différente de la dernière production.
Cela revient à faire une rechercheV "vers le haut" de la production de cet employé dans cet atelier.
Dans l'exemple joint, la proposition (en C34) serait 15 (la dernière fois que Paul à travaillé en atelier A, il a produit 15 pièces.

NB: pourquoi diantre, une fonction rechercheV (ou H) vers le haut (ou la gauche) n'a-t-elle jamais implémentée pas plus que la rechercheX d'Excel.

C:\fakepath\atelier-fictif.ods

éditer requalifier signaler fermer fusionner supprimer

1Réponse

2

répondue 2020-11-08 17:12:30 +0100

Image Gravatar de njhub

Bonjour Pierre DeCambrai,

N'ayant pas trouvé comment mettre le résultat en colonne C, sans provoquer des erreurs, il ne reste qu'à le transcrire depuis la colonne F

1) en colonne D, on détermine la première ligne vide dans la colonne C =SI(OU(SOMME(D$2:D2)>0;C3<>"");"";LIGNE())

2) en colonne E, on marque les lignes correspondantes au prénom et atelier =SI(ESTERREUR(PETITE.VALEUR(D:D;1));"";SI(OU(B3<>INDIRECT("B"&PETITE.VALEUR(D:D;1);1);ESTNUM(D3));"";SI(A3=INDIRECT("A"&PETITE.VALEUR(D:D;1);1);LIGNE();"")))

3) en colonne F, s’affiche la dernière production de cet ouvrier dans cet atelier =SI(ESTNUM(D3);INDIRECT("C"&MAX(E$2:E3);1);"")

4) transcrire cette valeur en colonne C

C:\fakepath\Pierre DeCambrai_atelier-fictif.ods

:)

éditer signaler supprimer permalien plus

Commentaires

  1. C'est efficace
    1. La réponse a été super rapide
    2. C'est bien documenté, mais je vais me donner la migraine car je veux décortiquer la solution (pour la transcrire dans mon job)
    3. Que dire d'autre que MERCI@njhub et à tous ceux qui ont cherché simultanément

Bien sur je positionne à résolu

Image Gravatar de Pierre DeCambraiPierre DeCambrai ( 2020-11-08 18:01:56 +0100 )éditer

Bonjour

Belle méthodologie.

Quel est l'avantage d'utiliser la fonction PETITE.VALEUR(x;1) à la place de MIN(x) ?

Belle journée, Michel

Image Gravatar de mglmgl ( 2020-11-09 10:29:24 +0100 )éditer

@mgl,

Quel est l'avantage d'utiliser la fonction PETITE.VALEUR(x;1) à la place de MIN(x) ?

En l'état PETITE.VALEUR() n'a pas d'avantage sur MIN(x) tant que la demande de l'intervenant reste stable

Imaginez vous,qu'en se rendant compte que le résultat ne correspond pas à ses attentes, qu'il demande la xème valeur minimale ou maximale, l'avantage saute aux yeux, très peu de paramètres à modifier, la structure de la formule reste identique à ou petite/grande et ou 1/2/y près.

L'avantage est donc la souplesse d'évolution de la formule

Image Gravatar de njhubnjhub ( 2020-11-09 11:46:32 +0100 )éditer
S'identifier/S'inscrire pour répondre

Outils de question

1 suiveurs

Stats

Posée: 2020-11-08 15:41:02 +0100

Consultée: 38 fois

Mise à jour: Nov 08 '20