Macro VBA transformer une colonne de nom en une liste

Bonjour,

J'aimerai transformer une colonne Excel contenant des infos type

USD
JPY
CAD
GBP
ZAR
SEK
...

en une simple ligne au sein d'une cellule.
le but serait d'avoir "USD; JPY; CAD; GBP ; ZAR ; SEK" dans la même cellule. Je souhaite vraiment respecter ce format et avec les ; c'est un peu la galère...
C'est un procédé que je fais manuellement avec des fonctions excels
ex : =A1&";"&B2...
L'automatiser serait vraiment super
Mais je n'arrive pas à le programmer sur VBA et ce que quelqu'un aurait par hasard un code sympathique à proposer pour réaliser ce process?
Merci d'avance pour votre précieuse aide

Michel

7 réponses

  1. Bonjour,

    le but serait d'avoir "USD; JPY; CAD; GBP ; ZAR ; SEK" dans la même cellule

    une facon de faire, code dans VBA de la feuille: adaptez colonne et cellules

    Private Sub Worksheet_Change(ByVal Target As Range)
        'derniere cellule non vide colonne A
        derlig = Range("A" & Rows.Count).End(xlUp).Row
        'test changement
        If Not Application.Intersect(Target, Range("A1:A" & derlig)) Is Nothing Then
            'raz cellule liste
            Range("B2") = ""
            'mise en forme: x a adapter suivant 1ere cellule
            For x = 1 To derlig - 1
                Range("B2") = Range("B2") & Range("A" & x) & ";"
            Next x
            Range("B2") = Range("B2") & Range("A" & derlig)
        End If
    End Sub
    1
    1. bonjour,
      pourquoi tu ne fais pas un copier-coller spécial en cochant transposé??
      0
      1. ca ne me permet pas d'avoir
        dans une seule cellule
        "USD; JPY; CAD; GBP ; ZAR ; SEK"

        l'idée enfait et de pouvoir faire un copier coller de cette ligne pour un extraction comtpable et je dois inserer une seule ligne.
        Si je fais le copier-coller spécial transposé, le problème est le même mais juste cette fois ci horizontalement.
        0
        1. J'arrive aps à faire fonctionner la macro, je dois la mettre dans la feuille, ok mais après comment je fait pour la lancer. quand ej fais play, il me demande de choisir une autre macro?

          La réponse doit surement être évidente :/
          0
          1. Re,

            si vous modifiez ou ajoutez du texte dans une cellule de la colonne que vous avez choisie pour les noms, cela lance la macro Private Sub Worksheet_Change(ByVal Target As Range), c'est excel qui gere la chose. Au depart si votre colonne est deja renseignee, il faut modifier une cellule pour que cela demarre.

            A+
            0
            1. Contributeur
              Bonjour

              la fin sans boucle

              Dim Derlig As Integer, liste()
              Derlig = Columns("A").Find("*", , , , , xlPrevious).Row
              liste = Application.Transpose(Range("A1:A" & Derlig).Value)
              Range("B2") = Join(liste, " ; ")


              0
              1. Bonjour michel_m,

                merci du tuyau Join
                0
            2. Bonjour à tous,
              Une autre possibilité, la chaine concaténer se mettre à gauche de la première valeur à traiter.
              La procédure :
              Sub creerchaine()
              Set donnees = Application.InputBox("A l'aide de la souris, selectionnez la plage de valeurs (sans les entêtes de colonnes).", Type:=8)
              donnees.Interior.ColorIndex = 6
              For Each c In donnees
                  chaine = chaine & c & ";"
              Next
              chaine = Left(chaine, Len(chaine) - 1)
              col = donnees.Column
              li = donnees.Row
              Range(Cells(li, col), Cells(li, col)).Offset(0, 1) = chaine
              End Sub

              0