Macro Excel: concatener plusieurs lignes non vide

Fermé
gregt73 Messages postés 52 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 21 janvier 2019 - 18 janv. 2019 à 16:22
titeufdu89 Messages postés 375 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 - 21 janv. 2019 à 12:53
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 10852 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
18 janv. 2019 à 18:48
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 52 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 21 janvier 2019
21 janv. 2019 à 08:24
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 375 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 38
Modifié le 21 janv. 2019 à 11:07
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 52 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 21 janvier 2019
21 janv. 2019 à 12:27
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 375 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 38
21 janv. 2019 à 12:53
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