Macro Excel: concatener plusieurs lignes non vide

gregt73 Messages postés 55 Statut Membre -  
titeufdu89 Messages postés 387 Statut Membre -
Bonjour,

Etant (toujours) pas très fort en vba, et après plusieurs essai et recherche sur les forums, je pose ma question en espérant que qq1 pourra m'aider:


Dans une colonne (I), j'ai des lignes non vides qui se suivent, puis parfois 1,2 ou 3 lignes vide puis, de nouveau des lignes non vides, etc...
J'aurais voulu concatener toutes les lignes non vides dans la 1ere cellule non vide.

ex: tata
toto
tutu
vide
vide
lala
lolo

devrait devenir

tata - toto - tutu
vide
vide
vide
vide
lala - lolo
vide


J'espère avoir été assez clair dans mon explication.
Merci d'avance.




Configuration: Windows / Internet Explorer 11.0
A voir également:

4 réponses

ccm81 Messages postés 11033 Statut Membre 2 433
 
Bonjour

Q1. Tu veux garder les lignes vides ?
Q2. Il n'y a qu'une colonne dans ton fichier ?

Cdlmnt
0
gregt73 Messages postés 55 Statut Membre
 
Bonjour,

C'est vrai que je n'ai pas été très précis.

Réponse 1: Oui, je voudrais garder les lignes vides.
Réponse 2 : Non, il y a plusieurs colonnes dans mon fichier.

Merci d'avance pour l'aide.
0
titeufdu89 Messages postés 387 Statut Membre 38
 
Bonjour,

Tu peux essayer ce code, a coller soit dans un module, soit dans le module de la feuille contenant ton tableau. A mettre à jour en fonction des indications en vert.

Sub concatener_col_I()
With Worksheets("Feuil1") '<<<< nom de la feuille à mettre a jour ou remplacer par 'With Activesheet' pour la feuille active
    For i = 2 To .Range("I65536").End(xlUp).Row '<<< remplace 2 par 1 si ton tableau ne comporte pas d'en-tête, ou plus de 2 si tu as plusieurs lignes d'en-tête
        If .Range("I" & i) <> "" Then
        cpte = 0
        msg = ""
            Do While .Range("I" & i + cpte) <> ""
                    If cpte = 0 Then
                    msg = .Range("I" & i + cpte).Value
                    Else
                    msg = msg & " - " & .Range("I" & i + cpte).Value
                    End If
                .Range("i" & i + cpte) = ""
            cpte = cpte + 1
            Loop
        .Range("I" & i) = msg
        i = i + cpte
        End If
    Next i
End With
End Sub


Bonne journée

Jc
0
gregt73 Messages postés 55 Statut Membre
 
Bonjour titeufdu89,

Ca marche nickel..!!!

J'étais parti dans une boucle du même style, mais alors j'étais loin, très loin du compte..! -:)

Merci beaucoup.
Bonne journée.
0
titeufdu89 Messages postés 387 Statut Membre 38
 
Cool!!!
En VBA il n'y a pas de bonne ou mauvaise réponse, il y a juste différentes interprétations du problème et de la façon de le résoudre ;-)
C'est pas parce que mon code fonctionne que le tiens n'aurait pas fonctionné, c'est ainsi que l'on apprend et que l'on progresse alors si j'ai un conseil à te donner... persévère!
Bonne continuation

Jc
0