[MISE A JOUR] Très belle fonction pour concaténer une plage

Note : je viens d'éditer ce post pour prendre en compte les commentaires ci-dessous.
Merci à tous.

Vous pouvez télécharger ici un fichier exemple.

Cette fonction permet de concaténer une plage avec un séparateur.


Function ConcatenateRange(ByVal cell_range As range, _
Optional ByVal seperator As String) As String
Dim cell As range
Dim newString As String
Dim cellArray As Variant
Dim i As Long, j As Long

cellArray = cell_range.Value

For i = 1 To UBound(cellArray, 1)
For j = 1 To UBound(cellArray, 2)
If Len(cellArray(i, j)) <> 0 Then
newString = newString & (seperator & cellArray(i, j))
End If
Next
Next

If Len(newString) <> 0 Then
newString = Right$(newString, (Len(newString) - Len(seperator)))
End If

ConcatenateRange = newString

End Function

Si vous utilisez CHR(10) comme séparateur, ca va mettre les différents éléments les uns en dessous des autres (voir la fonction ConcatenateRangeRetourLigne du fichier).
Il faut aussi activer le retour à la ligne automatique pour cette cellule :

concatener-plage-renvoi-automatique-a-la-ligne

Pour utiliser cette fonction, copiez le code dans un module VBA, puis dans Excel, vous tapez la fonction en commençant par =.

Voici une vidéo qui explique comment faire à partir d'un fichier vide :

A bientôt

Source :
http://stackoverflow.com/questions/8135995/how-to-merge-all-column-into-one-cell-in-excel

Gaëtan

Pour marque-pages : Permaliens.

6 réponses à [MISE A JOUR] Très belle fonction pour concaténer une plage

  1. Gally Jean-Marc dit :

    Bonjour,

    Merci pour cette fonction. Je n’arrive pas a faire fonctionner avec en français CAR et non CHAR (10). Le texte reste collé sans séparateur.

    Merci pour ton aide

    Jean-Marc

  2. Gaetan dit :

    Bonjour

    Essayez avec CHR au lieu de CHAR

    Gaetan

  3. Christophe Joveneaux dit :

    Bonjour
    Jean Marc: pour que la fonction fonctionne il faut que la cellule soit formatée en renvoie automatique.
    Très belle fonction en effet !
    Bonne année 2015

    Christophe

  4. Gaetan dit :

    Merci à Christophe pour la précision.

    Ca donnerait quelque chose comme ceci – toujours en ajoutant le retour à la ligne automatique :


    Function ConcatenateRangeRetourLigne(ByVal cell_range As Range, _
    Optional ByVal separator As String) As String
    Dim cell As Range
    Dim newString As String
    Dim cellArray As Variant
    Dim i As Long, j As Long
    cellArray = cell_range.Value
    For i = 1 To UBound(cellArray, 1)
      For j = 1 To UBound(cellArray, 2)
        If Len(cellArray(i, j)) <> 0 Then
          If i = UBound(cellArray, 1) And j = UBound(cellArray, 2) Then
            newString = newString & (separator & cellArray(i, j))
          Else
            newString = newString & (separator & cellArray(i, j)) & Chr(10)
          End If
        End If
      Next j
    Next i
    If Len(newString) <> 0 Then
      newString = Right$(newString, (Len(newString) - Len(separator)))
    End If
    ConcatenateRangeRetourLigne = newString
    End Function

  5. Emma dit :

    Bonjour,

    Je suis une novice sous excel. La solution dont vous parlez est exactement ce dont j’ai besoin… 🙂 Par contre je n’arrive pas à la faire fonctionner. Le fait que je sois sous mac peut il avoir une incidence?
    Merci!!

  6. Gaetan Mourmant dit :

    Bonjour Emma,

    Je viens d’ajouter une vidéo explicative;

    Ca pourrait aussi venir du Mac, mais ca me surprendrait.

    A bientôt.

    Gaëtan

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.