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 Function

Fonction à 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.

Rechercher des sujets similaires à "fonction concatenation ligne"