VBA : Concatener plusieurs cellules dans une seule sur une plage de valeurs

Bonjour,

Je me permets de revenir vers le forum, j'ai un nouveau blocage sur ma macro.

J'aimerai que la plage de cellules Cells (d,c+1) soit égal à l'ensemble des valeurs de la ligne 8 dont le texte en gras dans la ligne d (concatener avec un espace entre chaque si possible) de la plage cells (8,c-a).

Voir le code ci-dessous, la première boucle For, If et While me permettent de définir la plage c et a. La dernière boucle If fonctionne mais écrit que la dernière valeur de la ligne 8 dont le texte est en gras et pas l'ensemble.

Merci par avance de votre aide.

Dites moi si je suis pas clair, je ne suis pas sur de l'être.

For c = 2 To 200
For d = 9 To 200
If Cells(8, c).Value Like "*Valeurs*" Then 'si une cellule contient valeur
a = 1

While Cells(8, c - a).Value <> ("Fin")
If Cells(d, c - a).Font.Bold = True Then
Cells(d, c + 1) = Cells(8, c - a)
End If

a = a + 1
Wend
End If
Next
Next

Bonsoir, un bout de votre fichier serait bienvenue !

Bonjour,

Vous trouverez ci-joint un fichier simplifié pour l'exemple.

Dans cet exemple, le but est d'écrire, T2 T4 T6 T8 T10 dans la cellule R9 puis T1 T3 T5 T6 T8 T10 T12 dans la cellule R10.

Il est à noter que mon nombre de ligne et de colonne à traiter varie (boucle for de ma macro).

Bonjour,

Personne n'a de solution ou la problématique est mal exprimée ?

J'ai beau lire et relire le problème, je t'assure meme avec le fichier j'ai pas compris

Désolé, ce n'est pas si facile à expliquer.

Je ressaye.

Le but est de concatener l'ensemble des valeurs d'une plage de cellule variable d'une ligne dans une seule au bout de cette ligne.

Et si possible mettre un espace entre chaque valeur concatener.

Dites moi si c'est mieux.

Bonjour à tous,

avec une fonction personnalisée à mettre dans un module standard :

Function concatNonVide(pl As Range, Optional sep As String = ",") As String
    Dim datas, lig As Long, col As Long
    datas = pl.Value
    For lig = 1 To UBound(datas, 1)
        For col = 1 To UBound(datas, 2)
            If datas(lig, col) <> "" Then concatNonVide = concatNonVide & sep & datas(lig, col)
        Next col
    Next lig
    If concatNonVide <> "" Then concatNonVide = Mid(concatNonVide, Len(sep))
End Function

eric

ça fonctionne !

Merci beaucoup éric !

Rechercher des sujets similaires à "vba concatener seule plage valeurs"