Si il est écrit CP alors je veux écrire le nom de l'employé

Résolu

Bonjour,

Pour un planning, sur celui-ci il y a un tableau des congés et autres absences. Lorsqu'il est écrit CP devant le nom d'un employé, je voudrais que son nom s'affiche dans une cellule en en tete du planning. Et ainsi de suite pour l'ensemble des employés et dans la même cellule. 

J'ai utilisé la formule =SI(OU(NB(...);"*CP*";concatener; etc... 

La formule fonctionne sauf que tous les noms s'affiche alors qu'il y a un seul employé ou il est écrit CP devant son nom.

Si quelqu'un a une solution, je suis preneur.

Merci


Android / Chrome 130.0.0.0

6 réponses

Résumé de la discussion

Le problème consiste à afficher en tête du planning uniquement les noms d’employés précédés de CP, lorsque cette étiquette apparaît dans le tableau des absences. Plusieurs approches existent pour ne concaténer que ces noms, afin d’éviter d’imprimer tous les noms. Une solution répandue combine JOINDRE.TEXTE avec une détection de CP et SUBSTITUE pour retirer CP des occurrences, par exemple =JOINDRE.TEXTE(","; VRAI; SI(NON(ESTERREUR(CHERCHE("CP"; A2:A100))); SUBSTITUE(A2:A100; "CP"; ""); "")). Alternativement, une méthode plus directe emploie FILTRE avec JOINDRE.TEXTE, par exemple =JOINDRE.TEXTE(", "; VRAI; FILTRE(B21:B37;(G21:G37="CP")*(ESTTEXTE(B21:B37)); "")), et sur Excel 365 une version simplifiée =JOINDRE.TEXTE(", "; ; FILTRE(A:A; G:G="cp")).

Bobot (l’IA à votre service)
  1. Bonsoir

    Je me suis amusé avec Excel, il est bien possible de faire ce traitement.

    =JOINDRE.TEXTE(", "; VRAI; SI(NON(ESTERREUR(CHERCHE("CP"; A2:A100))); SUBSTITUE(A2:A100; "CP"; ""); ""))
    • JOINDRE.TEXTE() se charge de la concaténation
    • CHERCHE() recherche la position de "CP" dans la cellule. Si il n'y a rien, au lieu de renvoyer une valeur (la position) elle renvoie une erreur
    • ESTERREUR() transforme l'erreur renvoyée par CHERCHE() dans le cas où elle ne renvoie rien par un VRAI
    • NON() inverse la logique. Ainsi, NON(ESTERREUR(CHERCHE())) renvoie VRAI si c'est présent sans avoir levé d'erreur et FAUX si une valeur n'a pas été trouvée en levant une erreur
    • SUBSTITUE() retire le CP de la chaîne pour simplifier l'affichage

    Vérifiez bien qu'il ne faille pas étendre la recherche au-delà de A100 voire changer de colonne. Attention, il y a 4 références de cellules dans cette formule avec SUBSTITUE().


    1
    1. Bonjour,

      merci de votre retour. je vais essayer votre formule même si j'ai peur ne pas s'avoir l'appliquer.

      Bonne journée.

      0
    2. @Sorry_IP

      Elle ne marche pas dans votre cas, vous aviez mal énoncé le problème !

      J'ai ici traité dans le cas où "CP" a été rajouté devant le nom dans la même cellule.

      Je regarde ça plus tard pour faire une version adaptée, certainement simplifiée puisqu'il n'y aura plus à utiliser SUBSTITUE()

      1
    3. @luckydu43

      Désolé, il est vrai que ce n'est pas forcément simple à expliquer quand on est novice intermédiaire.

      0
  2. Bonjour,

    En prenant en compte le fichier déposé au message 4, voici une formule qui traite bien le cas demandé en se limitant à la plage des données du fichier et en prenant en compte les cas d'erreur :

    =JOINDRE.TEXTE(", ";VRAI;FILTRE(B21:B37;(G21:G37="CP")*(ESTTEXTE(B21:B37));""))

    Comme prévu, la logique est un peu plus simple que celle de mon message précédent :

    • JOINDRE.TEXTE, comportement inchangé
    • FILTRE permet de faire le traitement de "si G contient CP"
    • ESTTEXTE est un blindage, des fois que certaines données de B dans la plage sélectionnée soient incohérentes

    1
    1. Bonjour,

      Pour y voir plus clair et donner une réponse adaptée il serait préférable de nous joindre un fichier exemple anonymisé.

      Voir cette fiche

      Cordialement

      0
      1. ainsi que la version d'excel que tu utilises


        Crdlmt

        0
      2. @DjiDji59430

        les gens ne savent pas lire !!!

        0
    2. Bonjour,

      je vous joint une capture écran du tableau anonymisé et de la formule écrite

      qui pourra peut être facilité la compréhension de ma demande.

      A ce jour si j'écris CP dans une seule case, tous les noms s'écrive dans la cellule alors que je ne veux que la personne concernée.

      0
      1. Bonjour à tous,

        Avec cette disposition :

        Avec Excel 2016 ou postérieure :

        =GAUCHE(CONCAT(SI(G6:G24="cp";A6:A24&", ";""));NBCAR(CONCAT(SI(G6:G24="cp";A6:A24&", ";"")))-2)

        Daniel

        0
        1. Sinon, avec Excel 365 :

          =JOINDRE.TEXTE(", ";;FILTRE(A:A;G:G="cp"))

          Daniel


          0