VBA - Excel: Concaténer automatiquement avec boucle

Résolu
Lena-tkd -  
 Lena-tkd -
Bonjour,

Je travaille sur Excel 2013, je débute en VBA et j'ai une problématique qui me bloque.
Ma feuille contient des mots dans les cellules: ex: en B1:"Bonjour", en C1:"à", en D1:"tous", puis en B2:"Salut" et en C2:"toi"...
En colonne A, j'aimerais pouvoir constituer automatiquement des phrases par ligne en concaténant les mots des différentes cellules séparés d'un espace, pour obtenir "Bonjour à tous" pour la ligne 1, puis "Salut toi" pour la ligne 2...
Le problème c'est que je ne sais jamais combien de mots j'ai dans chaque ligne, ni combien de lignes j'ai au total.
Auriez-vous une solution ou une piste à me proposer?

Je vous remercie par avance de votre aide!

1 réponse

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    suggestion:
    Sub lena()
    Dim cola As Range, mot As Range
    Set cola = [a1]
    Do While cola.Offset(, 1) <> ""
        Set mot = cola.Offset(, 1)
        Do While mot <> ""
            cola = cola + mot + " "
            Set mot = mot.Offset(, 1)
        Loop
        Set cola = cola.Offset(1)
    Loop
    End Sub
    2
    1. Lena-tkd
       
      Ca semble bien fonctionner, merci!!
      Petite question subsidiaire: y'a-t-il une solution pour intégrer les éventuelles cellules vides suivies d'une non vide, autrement dit, s'assurer que c'est bien la dernière cellule non vide de la ligne même s'il y'en a une vide sur la ligne??
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Lena-tkd
         
        petite suggestion subsidiaire:
        Sub lena()
        Dim cola As Range, mot As String, ncol As Long, lastcol As Long, nlig As Long, fl As Worksheet
        Set fl = ActiveSheet
        Set cola = fl.[a1]
        lastcol = fl.UsedRange.Column + fl.UsedRange.Columns.Count - 1
        Do While cola.Offset(, 1) <> ""
            cola = ""
            nlig = cola.Row
            For ncol = 2 To lastcol
                mot = fl.Cells(nlig, ncol)
                If mot <> "" Then
                    cola = cola + mot + " "
                End If
            Next ncol
            Set cola = cola.Offset(1)
        Loop
        End Sub
        0
      2. Lena-tkd > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        C'est encore mieux, merci énormément!!!
        0
      3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Lena-tkd
         
        avec plaisir!
        pourras-tu marquer la discussion comme résolue?
        0
      4. Lena-tkd > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        C'est ce que je cherche à faire depuis mon dernier commentaire, mais je ne trouve pas la fonction, je voudrais même ajouter un "Merci" :/
        0