Renvoyer le titre de plusieurs colonnes

Fermé
amandinedo Messages postés 3 Date d'inscription samedi 15 septembre 2018 Statut Membre Dernière intervention 16 septembre 2018 - 15 sept. 2018 à 21:53
amandinedo Messages postés 3 Date d'inscription samedi 15 septembre 2018 Statut Membre Dernière intervention 16 septembre 2018 - 16 sept. 2018 à 22:33
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.
A voir également:

4 réponses

via55 Messages postés 14471 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 29 août 2024 2 727
16 sept. 2018 à 01:11
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
via55 Messages postés 14471 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 29 août 2024 2 727
16 sept. 2018 à 22:00
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
amandinedo Messages postés 3 Date d'inscription samedi 15 septembre 2018 Statut Membre Dernière intervention 16 septembre 2018
16 sept. 2018 à 10:13
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
amandinedo Messages postés 3 Date d'inscription samedi 15 septembre 2018 Statut Membre Dernière intervention 16 septembre 2018
16 sept. 2018 à 22:33
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