Concaténer en VBA

Trunk

XLDnaute Nouveau
Bonjour,

Je cherche, désespérément, à trouver le code VBA me permettant de paramétrer un bouton au sein d'excel qui concaténera plusieurs valeurs et les formatera de manière spécifique.

J'ai une colonne de 20 cellules (disons A1 à A20) et je souhaiterais que le bouton en question, lorsque l'on clique dessus, puisse concaténer toutes les valeurs situées dans ces cellules (des adresses mails en l'occurence) et me les copier dans une autre cellule (disons B1) sous la forme :

test@mail.fr; test2@mail.fr; test3@mail.fr

où la valeur de A1 est test@mail.fr, celle de A2 est test2@mail.fr, etc...

Pourriez-vous m'aider s'il vous plait ? J'ai cherché sur divers forums/sites via des recherches Google, mais en vain.

Merci beaucoup par avance à tous ceux qui prendront le temps de me répondre.
 
G

Guest

Guest
Re : Concaténer en VBA

Bonjour,

voici une macro simple qui le fera.
Par contre les espaces entre les adresse sont en trop, la macro ne les met pas. Si tu les veux remplace ";" par "; "
Code:
Sub Concantener()
Dim c As Range
Dim Texte As String
For Each c In Range("A1:A20")
    Texte = Texte & c & ";"
Next
Range("B1") = Left(Texte, Len(Texte) - 1)
End Sub

Encore plus simple et plus court
Code:
Sub Concantener_2()
Dim t
t = Application.Transpose(Range("A1:A20").Value)
Range("B1") = Join(t, ";")
End Sub

Et pour finir encore plus court:

Code:
Sub Concantener_3()
Range("B1") = Join(Application.Transpose(Range("A1:A20").Value), ";")
End Sub

A+
 
Dernière modification par un modérateur:

Trunk

XLDnaute Nouveau
Re : Concaténer en VBA

Génial ça, merci beaucoup !

Juste une dernière chose, j'obtiens le résultat suivant (avec le dernier bout de code fourni, auquel j'ai juste ajouté un espace après le ";") :

test@test.fr; ; ; ; ; ; ; ; ; ; ; ; test2@test.fr; test3@test.fr; ; ; ; ; test4@test.fr; ; ; ; ;

Comment peut-on gérer les cellules vides pour ne pas qu'elle soient incluses ?

Merci beaucoup pour votre aide !!!
 

tototiti2008

XLDnaute Barbatruc
Re : Concaténer en VBA

Bonjour Trunk, Bonjour Hasco,

me rappelle d'autres fils, ça...

https://www.excel-downloads.com/threads/assembler-des-adresses-mail.103713/

mais sinon, pour éviter les cellules vides, sur la base du 1er code de Hasco :

Code:
Sub Concantener()
Dim c As Range
Dim Texte As String
For Each c In Range("A1:A20")
if c.value <> "" then Texte = Texte & c & "; "
Next
Range("B1") = Left(Texte, Len(Texte) - 1)
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Concaténer en VBA

Bonsoir à tous

Avec une fonction VBA personnalisée


Code:
Function concat(r As Range, sep As String)
Dim c As Range
For Each c In r
concat = concat & sep & c
Next
concat = Mid$(concat, Len(sep) + 1)
End Function

Ex: saisr en B1
Code:
=concat("A1:A20;";")
 

supercrapaud

XLDnaute Occasionnel
Re : Concaténer en VBA

BOnjour à vous tous !
Voilà un bout de code que vous pouvez mettre :
Sub Concantener_3()
Range("B1") = Join(Application.Transpose(Range("A1:A20").SpecialCells(xlCellTypeConstants).Value), ";")
End Sub

Ca ne prend qu'une ligne de code et normalement ne prend en compte que les données qui sont des constantes. A voir chez vous
 

Discussions similaires

Réponses
1
Affichages
613

Statistiques des forums

Discussions
312 502
Messages
2 089 033
Membres
104 010
dernier inscrit
Freba