Microsoft 365 Créer une fonction de concaténation qui fonctionne sur une plage de cellules

nozil

XLDnaute Nouveau
Bonjour,

je vais tenter d'être clair.
J'ai un tableau de 170 colonnes. En entête, j'ai une valeur en texte (du genre 1.1, 1.2, 1.a)
Pour chaque ligne, dans chaque colonne, j'ai la valeur Oui ou Non.
Ce que je cherche à avoir, c'est pour chaque ligne, une colonne récap qui me concatène les entêtes pour lesquels j'ai un oui dans la case.
Un exemple ci dessous.
Comment feriez vous ça, sachant que mon nombre de colonnes est conséquent !

1.11.21.31.42.12.22.3Récap
ouinonouinonnonouinon1.1-1.3-2.2
nonouinonnonnonnonnon1.2
 

vgendron

XLDnaute Barbatruc
Hello

avec cette macro
VB:
Sub Recapitulatif()

Dim TabData() As Variant
Dim NbLignes As Long
Dim NbCol As Long
Dim Recap as string

With Sheets("Feuil1") 'dans la feuille 1
    NbLignes = .Range("A" & .Rows.Count).End(xlUp).Row
    NbCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    TabData = .Range("A1").Resize(NbLignes, NbCol).Value
    
    For i = LBound(TabData, 1) + 1 To UBound(TabData, 1)
        Recap = ""
        For j = LBound(TabData, 2) To UBound(TabData, 2) - 1
            If TabData(i, j) = "oui" Then Recap = Recap & "-" & TabData(1, j)
        Next j
        TabData(i, UBound(TabData, 2)) = Right(Recap, Len(Recap) - 1)
    Next i
    .Range("A1").Resize(NbLignes, NbCol) = TabData
End With
End Sub
 

nozil

XLDnaute Nouveau
Hello

avec cette macro
VB:
Sub Recapitulatif()

Dim TabData() As Variant
Dim NbLignes As Long
Dim NbCol As Long
Dim Recap as string

With Sheets("Feuil1") 'dans la feuille 1
    NbLignes = .Range("A" & .Rows.Count).End(xlUp).Row
    NbCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    TabData = .Range("A1").Resize(NbLignes, NbCol).Value
   
    For i = LBound(TabData, 1) + 1 To UBound(TabData, 1)
        Recap = ""
        For j = LBound(TabData, 2) To UBound(TabData, 2) - 1
            If TabData(i, j) = "oui" Then Recap = Recap & "-" & TabData(1, j)
        Next j
        TabData(i, UBound(TabData, 2)) = Right(Recap, Len(Recap) - 1)
    Next i
    .Range("A1").Resize(NbLignes, NbCol) = TabData
End With
End Sub
Bonjour et merci pour le coup de main.
Je précise, je débute totalement dans les macros Excel.
J'ai rajouté cette macro dans ma feuille Excel. Quand je tente de l'exécuter, j'ai le message d'erreur "Argument ou appel de procédure incorrect".
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 499
Messages
2 110 249
Membres
110 711
dernier inscrit
chmessi