VBA - Excel: Concaténer automatiquement avec boucle

Résolu/Fermé
Lena-tkd - 12 janv. 2021 à 10:14
 Lena-tkd - 12 janv. 2021 à 16:14
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!
A voir également:

1 réponse

yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
12 janv. 2021 à 12:31
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
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
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > Lena-tkd
12 janv. 2021 à 15:55
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
Lena-tkd > yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
12 janv. 2021 à 16:05
C'est encore mieux, merci énormément!!!
0
yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > Lena-tkd
12 janv. 2021 à 16:07
avec plaisir!
pourras-tu marquer la discussion comme résolue?
0
Lena-tkd > yg_be Messages postés 22723 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
12 janv. 2021 à 16:14
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