Création d'une liste dynamique des colonnes utilisées

Bonjour,

Il s'agit de créer, dans une cellule, une synthèse des colonnes marquées d'une croix, en utilisant les titres des colonnes.

https://forum.excel-pratique.com/download/file.php?mode=view&id=223853

https://forum.excel-pratique.com/download/file.php?mode=view&id=223856

Il est possible d'utiliser des SI() imbriqués mais comme le nombre de colonne peut varier, cette solution a été écartée.

Merci

screenshot003
17exemple.xlsx (9.85 Ko)

Bonjour,

Une possibilité en formule :

=SI(A2="X";A$1&";";"")&SI(B2="X";B$1&";";"")&SI(C2="X";C$1&";";"")

Peut-on connaitre l'intérêt de la manip' ?

Bonjour,

Un autre test en "nommant" les cellules contenant les titres.

Bonjour,

La fonction CONCATENER ne peut malheureusement pas gérer les cas de ce genre, c'est pour ça que j'avais codé une fonction dans le forum pour gérer ce genre de situation.

Voici le code de la fonction utilisée:

Function AssembleTexte(plage, Optional separateur As String) As String
Application.Volatile
Dim tableau As Variant
AssembleTexte = ""
On Error Resume Next
nb_lig = UBound(plage, 1)
nb_col = UBound(plage, 2)
On Error GoTo 0
ReDim tableau(1 To nb_lig, 1 To IIf(nb_col = "", 1, nb_col))
If nb_col = "" Then
    For i = LBound(tableau, 1) To UBound(tableau, 1)
        tableau(i, 1) = plage(i)
    Next i
Else
    For i = LBound(tableau, 1) To UBound(tableau, 1)
        For j = LBound(tableau, 2) To UBound(tableau, 2)
            tableau(i, j) = plage(i, j)
        Next j
    Next i
End If

Dim cel As Range
For i = LBound(tableau, 1) To UBound(tableau, 1)
    For j = LBound(tableau, 2) To UBound(tableau, 2)
        If tableau(i, j) <> "" Then
            AssembleTexte = AssembleTexte & IIf(AssembleTexte = "", "", separateur) & tableau(i, j)
        End If
    Next j
Next i
End Function

Et le fichier test qui va avec, valide les formules avec le raccourci Shift + Ctrl + entrée

Merci.

Je la garde sous le coude mais comme les gens qui manipule le fichier sont réticents au VBA, je ne vais pas l'employer aujourd'hui.

Bonjour,

La fonction CONCATENER ne peut malheureusement pas gérer les cas de ce genre, c'est pour ça que j'avais codé une fonction dans le forum pour gérer ce genre de situation.

Bonjour Ausecour, mon exemple en retour fonctionne avec concatener

Bonjour le fil, bonjour le forum,

J'ai bien lu que tu ne voulais pas de VBA mais puisque c'est fait et commenté... Ça pourrait servir à quelqu'un d'autre :

Sub Macro2()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim DC As Integer 'déclare la variable DC (Dernière Colonne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TS() As Variant 'déclare la variable TS (Tableau Synthèse)

Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
DL = UBound(TV, 1) 'définit la dernière ligne DL du tableau des valeurs TV
DC = UBound(TV, 2) 'définit la dernière colonne DC du tableau des valeurs TV
K = 1 'initialise la variable K
For I = 2 To DL 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    For J = 1 To DC - 1 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV (jusqu'à l'avant-dernière)
        If TV(I, J) <> "" Then 'condition : si la donnée ligne I colonne J de TV n'est pas vide
            ReDim Preserve TS(1 To K) 'redimensionne le tableau synthèse TS
            TS(K) = IIf(TS(K) = "", TV(1, J), TS(K) & ";" & TV(1, J)) 'définit la valeur de TS(K)
        End If 'fin de la condition
    Next J 'prochaine colonne de la boucle 2
    K = K + 1 'incrémente K
Next I 'prochaine ligne de la boucle 1
O.Cells(2, DC).Resize(UBound(TS), 1) = Application.Transpose(TS) 'renvoie dans la cellule ligne 2 colonne DC redimensionnée de l'onglet O, le tableau TL transposé
End Sub

Bonjour,

La fonction CONCATENER ne peut malheureusement pas gérer les cas de ce genre, c'est pour ça que j'avais codé une fonction dans le forum pour gérer ce genre de situation.

Bonjour Ausecour, mon exemple en retour fonctionne avec concatener

Ton exemple marche avec concatener mais ne respecte pas la demande

Il est possible d'utiliser des SI() imbriqués mais comme le nombre de colonne peut varier, cette solution a été écartée.

Bonjour,

La fonction CONCATENER ne peut malheureusement pas gérer les cas de ce genre, c'est pour ça que j'avais codé une fonction dans le forum pour gérer ce genre de situation.

Bonjour Ausecour, mon exemple en retour fonctionne avec concatener

Ton exemple marche avec concatener mais ne respecte pas la demande

Il est possible d'utiliser des SI() imbriqués mais comme le nombre de colonne peut varier, cette solution a été écartée.

lol j'ai encore lu trop vite j'ai pas fais attention à la variation du nombre de colonnes

Effectivement, les si avaient été écartés car je ne pensais qu'à des SI imbriqués MAIS la réponse avec des SI et des & me dépanne car elle est lisible.

Il me suffira de rajouter un SI dans la formule pour chaque colonne rajoutée.

Effectivement, les si avaient été écartés car je ne pensais qu'à des SI imbriqués MAIS la réponse avec des SI et des & me dépanne car elle est lisible.

Il me suffira de rajouter un SI dans la formule pour chaque colonne rajoutée.

D'accord

Dans ce cas on part sur un sujet résolu

Bonjour à tous

Sur 365 ou 2019 : en matricielle

=JOINDRE.TEXTE(";";;SI(A2:C2)="X";$A$1:$C$1;""))

Bonjour,

Dommage que je n'ai pas cette version

Merci d'avoir partagé cette fonction, ça me servira si jamais je passe un jour en 2016!

Re

ça me servira si jamais je passe un jour en 2016!

2019 car sur 2016 ne marche que sur les versions 365.

Eh oui on va bientôt avoir un nombre de fonctions proportionnel à son porte monnaie... dommage que le nombre de mises à jour buguées y soit aussi proportionnel...

Dommage oui...

Ou proportionnel au temps que l'on a pour les coder aussi

Rechercher des sujets similaires à "creation liste dynamique colonnes utilisees"