Fonction Concatenation par ligne
Bonjour à tous,
Malgré de nombreuses recherches, et beaucoup d'essais infructueux je bloque sur la création d'une fonction.
Débutant en vba, ma débrouillardise a ses limites et j'en appelle donc à votre aide.
Je souhaite créer une fonction avec une sélection de la plage à la souris.
Les données sélectionnées sont rangées dans des cellules accolées, avec une valeur par cellule. Par exemple :
- Dupont | Paul | 43
- Durand | Jacques | 62
- Martin | Jean | 37
Et le résultat souhaité est une concatenation de la plage mais avec un séparateur à la fin de chaque ligne (celui-ci est fixe et en l’occurrence une virgule), sauf pour la dernière ligne.
Le résultat obtenu serait donc le suivant:
DupontPaul43,DurandJacques62,MartinJean37
Je pense qu'avec des boucles cela pourrait suffire mais je n'ai pas réussi à faire mieux que concatener la plage avec un séparateur après chaque cellule (et non chaque ligne). J'ai aussi essayer de regarder au niveau des Tableaux mais la j'arrive dans un trop grand champs d’incompréhension.
En espérant être assez clair, merci par avance de votre aide. Cordialement
Bonjour,
Si je résume, tu veux qu'une fonction personalisée te renvoie (dans la cellule où elle se trouve) la concaténation des valeurs d'une plage de la façon suivante : les valeurs des cellules de chaque ligne sont concaténées, et mises bout à bout séparées par des virgules ?
On va supposer que c'est cela :
Function CONCATPLAGE(plage As Range) As String
Dim conc(), lgn$, i%, k%
Application.Volatile
ReDim conc(1 To plage.Rows.Count)
With plage
For i = 1 To .Rows.Count
For k = 1 To .Columns.Count
lgn = lgn & .Cells(i, k)
Next k
conc(i) = lgn: lgn = ""
Next i
End With
CONCATPLAGE = Join(conc, ",")
End FunctionFonction à coller dans un module standard.
Dans la cellule où tu veux le résultat, tu tapes la formule :
=CONCATPLAGE(A1:C3)et tu y auras le résultat (A1:C3 étant la plage de tes données à concaténer, à remplacer selon tes plages à concaténer).
Merci beaucoup MFerrand, c'est exactement ça !
Et quelle rapidité, je vois que j'ai encore un long chemin avant de maitriser tout ça
Je vais prendre le temps pour étudier tout ça, mais s'il est possible d'user de ta sympathie, pourrais-tu expliquer ton code afin que moi et d'éventuels futurs 'Excel-trotter' comprenions mieux les étapes du code.
Encore merci, et quelle rapidité
C'est assez simple, tu fournis à la fonction une plage de cellule : plage.
Cette plage comprend un certain nombre de lignes : de 1 au total des lignes. On dimensionne d'abord un tableau (conc) sur ce nombre de lignes (1 au total).
Puis on lance une boucle sur les lignes, de 1 à total lignes (avec la variable i).
A l'intérieur de cette boucle, on défile une autre boucle sur les colonnes de la ligne, de 1 à total colonnes (avec la variable k).
Pour chaque ligne, on concatène les valeurs des colonnes de la ligne qu'on affecte à l'élément conc(i) du tableau.
Une fois toutes les lignes traitées, la fonction Split permet de convertir le tableau en chaîne de texte en intercalant un séparateur entre chaque élément. C'est la réponse cherchée.
Cordialement.