Microsoft 365 VBA Concaténer contenu de plusieurs cellules dans une seule avec séparateurs / évolutifs

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

spike29

XLDnaute Occasionnel
Bonjour le forum,

J'ai une macro qui vient copier le contenu d'une cellule E25 de la feuil"TEST" vers une cellule d'un tableau présent en Feuil"TEST2".
Bien que le code utilisé soit largement perfectible (.select notamment…), jusque là tout fonctionne.

VB:
Sub copie()

Derlig = Sheets("TEST2").Range("B65536").End(xlUp).Row 'tableau de destination en Feuil'TEST2

Sheets("TEST").Activate
    Range("E25").Select
    Selection.Copy
    Sheets("TEST2").Select
    Cells(Derlig + 1, 2).Select
    ActiveCell.PasteSpecial Paste:=xlValues
    
End Sub


Mon besoin :
J'aimerai copier et concaténer le contenu présent dans les cellules E25;F25;G25;H25 vers la cellule de destination dans le tableau en Feuil Test2. Je souhaite qu'il y ait un espace suivi d'un séparateur de type "/" entre le contenu de chaque cellule.
Cela donnera à titre d'exemple dans la cellule de destination du tableau en FeuilTEST2 : Deux / Trois / Un
Seule particularité, les 4 cellules copiées n'ont pas systématiquement un contenu.
Pour une raison de lisibilité, j'aimerai que la présence de séparateur soit conditionnée à la présence d'un contenu à copier de sorte à ce qu'il n'y ai pas de séparateurs parasites si certaines des 4 cellules de la plage de copie sont vides.

En copie vous trouverez un fichier qui illustre mon besoin.

Bonne journée
 

Pièces jointes

Solution
Bonjour Spike, ALS,
En VBA :
VB:
Sub copie()
With Sheets("TEST2")
    Derlig = 1 + .Range("B65536").End(xlUp).Row
    .Cells(Derlig, "B") = Replace([E25] & "/" & [F25] & "/" & [G25] & "/" & [H25], "//", "/")
End With
End Sub
Et s'il peut y avoir plusieurs cellules vides :
VB:
Sub copie()
With Sheets("TEST2")
    Derlig = 1 + .Range("B65536").End(xlUp).Row
    For C = 5 To 9
        If Cells(25, C) <> "" Then Chaine = Chaine & "/" & Cells(25, C)
    Next C
    .Cells(Derlig, "B") = Mid(Chaine, 2)
End With
End Sub
Bonjour Spike, ALS,
En VBA :
VB:
Sub copie()
With Sheets("TEST2")
    Derlig = 1 + .Range("B65536").End(xlUp).Row
    .Cells(Derlig, "B") = Replace([E25] & "/" & [F25] & "/" & [G25] & "/" & [H25], "//", "/")
End With
End Sub
Et s'il peut y avoir plusieurs cellules vides :
VB:
Sub copie()
With Sheets("TEST2")
    Derlig = 1 + .Range("B65536").End(xlUp).Row
    For C = 5 To 9
        If Cells(25, C) <> "" Then Chaine = Chaine & "/" & Cells(25, C)
    Next C
    .Cells(Derlig, "B") = Mid(Chaine, 2)
End With
End Sub
 
Dernière édition:
Bonjour ALS35 & sylvanu

Merci encore pour vos réponses. Les deux fonctionnent parfaitement mais je recherchais effectivement une réponse en VBA.
J'ai intégré la 2ème partie du code de sylvanu au mien et cela fonctionne à merveille, encore merci.
Bonne fin de journée 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour