Renvoyer le titre de plusieurs colonnes

Bonjour à tous,

Grande fan de votre site pour trouver réponse à mes questions ... cette fois je n'ai pas trouvé de réponse donc ... je vous sollicite pour de l'aide.

J'ai un fichier de contrôle avec une trentaine de colonnes.
dans chaque ligne j'ai entre 0 et 30 points "ko".
Je souhaiterai avoir une 31ème colonne qui me synthétise toutes les entêtes de colonne "ko".
Exemple
ligne 2 avec la colonne B / D / G / K en ko ==> Je voudrais que la dernière colonne m'affiche les entêtes de ces 4 colonnes .

merci par avance de votre aide car je suis véritablement coincée !

Bonne soirée.

4 réponses

  1. Bonsoir,
    Au top du top !
    Ca fonctionne parfaitement.
    J'ai juste ajouté un retour à la ligne à la place du ";" car cela me convenait mieux en terme de lisibilité et pour ne pas avoir le #valeur! lorsque je n'ai pas de "ko" j'ai modifié la formule avec un sierreur.
    Je colle le tout ci dessous si d'autres veulent s'en servir un jour (j'avoue que je pratique souvent comme ça).
    Encore merci de ta précieuse aide.

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

    Function col_val(plage As Range, cible As String)
    For Each cell In plage ' boucle sur les cellules de la plage choisie
    If cell.Value = cible Then texte = texte & Cells(3, cell.Column).Value & vbCrLf 'si la valeur de la cellule correspond à la cible choisie on ajoute le titre se situant en ligne 1 et un ;
    Next
    affiche = Left(texte, Len(texte) - 1) ' supprime le dernier ;
    col_val = affiche ' retourne la concatenation des titres
    End Function

    =SIERREUR(col_val(J4:AU4;"ko");"")
    0
    1. Bonjour
      l'erreur ne vient pas de toi mais de moi ! désolé je suis allé trop vite en tapant mon exemple
      Il faut dans la formule commencer par le nom de la fonction :
      =col_val(J4:AU4;"ko")

      Cdlmnt
      Via
      1
      1. Bonjour,
        Merci de cet envoi qui me semblait très prometteur mais ... je n'arrive pas à obtenir un résultat :
        J'ai bien ouvert VBA, inséré un module, copier coller le code (modifié le 1 dans (cells(1, cell.column) par un 3 car la ligne des entêtes est en ligne 3 et refermé.
        Ensuite mes données étant de la colomne J à AU j'ai mis en cellule AV4
        =(J4:AU4;"ko")
        et ... j'ai un message qui m'indique que la formule que j'ai tapé contient une erreur ...
        pouvez vous me dire où j'ai faux ?
        Encore merci de votre aide (j'avoue que mes cours de VBA datent de fort longtemps ...) !
        0
        1. Bonsoir amandinedo

          Une ^possibilité avec une fonction peronnalisée à mettre dans un module de l'éditeur VBA :
          ALT+F11 pour ouvrir l'éditeur
          Insertion - Module
          Dans la page blanche copier-coller la macro suivante et fermer l'éditeur
          Function col_val(plage As Range, cible As String)
          For Each cell In plage ' boucle sur les cellules de la plage choisie
          If cell.Value = cible Then texte = texte & Cells(1, cell.Column).Value & ";" 'si la valeur de la cellule correspond à la cible choisie on ajoute le titre se situant en ligne 1 et un ;
          Next
          affiche = Left(texte, Len(texte) - 1) ' supprime le dernier ;
          col_val = affiche ' retourne la concatenation des titres
          End Function

          La fonction s'utilise alors comme une fonction Excel selon la syntaxe :
          =(plage à traiter;valeur cherchée)
          exemple en AA3 : =(A3:Z3;"ko")
          Si les titres sont sur une autre ligne que la ligne 1 changer la valeur 1 dans Cells(1, cell.Column).

          Cdlmnt
          Via
          1