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 :
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
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
Bonjour
Essayez avec CHR au lieu de CHAR
Gaetan
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
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
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!!
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