IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

concatener cellules avec retour à la ligne sans cellules vides [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut concatener cellules avec retour à la ligne sans cellules vides
    Bonjour à tous

    sans doute l'un d'entre vous a déjà rencontrer ce problème.

    j'ai des adresses en lignes que je souhaite regrouper dans une seule cellule.
    l'enregistreur de macros le fait mais mon souci est quand une ou plusieurs cellules sont vides.
    comment les ignorer

    si vous avez des idées ?
    bon dimanche

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une piste, en admettant que la plage commence en colonne A depuis A2 (Noms en colonne A, prénoms en colonne B, etc...). La concaténation à lieu dans les cellules de la colonne A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Sub Test()
     
        Dim Plage As Range
        Dim PlageLigne As Range
        Dim Cel As Range
        Dim I As Integer
     
        With Worksheets("Feuil1")
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        For Each Cel In Plage
     
            Set PlageLigne = Plage.Range(Cel, Plage.Cells(Cel.Row, Columns.Count).End(xlToLeft))
     
            For I = 2 To PlageLigne.Count
     
                'ici, avec un retour à la ligne
                'Cel.Value = Cel.Value & IIf(PlageLigne(I).Value <> "", vbCrLf & PlageLigne(I).Value, "")
     
                'ici, les valeurs les unes à la suite des autres avec un espace
                Cel.Value = Cel.Value & IIf(PlageLigne(I).Value <> "", " " & PlageLigne(I).Value, "")
     
                'supprime la valeur de la cellule en cours
                PlageLigne(I).Value = ""
     
            Next I
     
     
        Next Cel
     
    End Sub
    Hervé.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    Bonjour Thez et merci cela fonctionne très

    une question : Si je veux mettre la concaténation en colonne G au lieu de A ?
    @+

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Concaténation en colonne G (enlever l'apostrophe devant >Cel.Value = ""< pour vider la cellule en colonne A) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Sub Test()
     
        Dim Plage As Range
        Dim PlageLigne As Range
        Dim Cel As Range
        Dim I As Integer
     
        With Worksheets("Feuil1")
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        For Each Cel In Plage
     
            Set PlageLigne = Plage.Range(Cel, Plage.Cells(Cel.Row, Columns.Count).End(xlToLeft))
     
            For I = 2 To PlageLigne.Count
     
                'ici, avec un retour à la ligne
                'Cel.Offset(, 6).Value = Cel.Value & IIf(PlageLigne(I).Value <> "", vbCrLf & PlageLigne(I).Value, "")
     
                'ici, les valeurs les unes à la suite des autres avec un espace
                Cel.Offset(, 6).Value = Cel.Value & IIf(PlageLigne(I).Value <> "", " " & PlageLigne(I).Value, "")
     
                'supprime la valeur de la cellule en cours
                PlageLigne(I).Value = ""
     
            Next I
     
            'pour supprimer la valeur de la cellule en cours en colonne A
            'Cel.Value = ""
     
        Next Cel
     
    End Sub
    Hervé.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    Bonjour Theze

    ci-joint, mon fichier

    en fait la macro ne reprend que la 1ère et dernière colonne
    @+
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Voilà le code qui convient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Sub Test()
     
        Dim Plage As Range
        Dim PlageLigne As Range
        Dim Cel As Range
        Dim I As Integer
     
        With Worksheets("Feuil1")
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        For Each Cel In Plage
     
            Set PlageLigne = Plage.Range(Cel, Plage.Cells(Cel.Row, Columns.Count).End(xlToLeft))
     
            For I = 1 To PlageLigne.Count
                'ici, avec un retour à la ligne
     
                Cel.Offset(, 6).Value = Cel.Offset(, 6).Value & IIf(PlageLigne(I).Value <> "", PlageLigne(I).Value & vbCrLf, "")
                'supprime la valeur de la cellule en cours
                'PlageLigne(I).Value = ""
            Next I
     
            'supprime le dernier vbCrLf
            Cel.Offset(, 6).Value = Left(Cel.Offset(, 6).Value, Len(Cel.Offset(, 6).Value) - 1)
     
            'pour supprimer la valeur de la cellule en cours en colonne A
            'Cel.Value = ""
        Next Cel
     
    End Sub
    Hervé.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    Super Theze

    ta macro fonctionne à merveille

    merci beaucoup

  8. #8
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Mais je t'en prie, c'est avec plaisir !
    Bonne continuation.

    Hervé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POI] Cas des cellules avec retour chariot
    Par argent dans le forum Documents
    Réponses: 2
    Dernier message: 25/05/2012, 11h36
  2. [XL-2003] écriture dans une cellule avec retour à la ligne
    Par Chicard dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/08/2011, 15h11
  3. [phpMyAdmin] export excel ; perte des retours à la ligne dans cellule
    Par emmbo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 13/07/2011, 16h15
  4. Retour à la ligne dans cellule
    Par totoche dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2009, 11h59
  5. Concatenation string avec retour a la ligne
    Par X-Nem dans le forum SAP
    Réponses: 1
    Dernier message: 25/08/2008, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo