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

  • Initiateur de la discussion Initiateur de la discussion nozil
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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".
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour