Macro VBA transformer une colonne de nom en une liste

rabax7 Messages postés 3 Statut Membre -  
Le Pingou Messages postés 12720 Date d'inscription   Statut Contributeur Dernière intervention   -
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
A voir également:

7 réponses

f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
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
tobas Messages postés 210 Date d'inscription   Statut Membre Dernière intervention   24
 
bonjour,
pourquoi tu ne fais pas un copier-coller spécial en cochant transposé??
0
rabax7 Messages postés 3 Statut Membre
 
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
rabax7 Messages postés 3 Statut Membre
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
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
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
Bonjour michel_m,

merci du tuyau Join
0
Le Pingou Messages postés 12720 Date d'inscription   Statut Contributeur Dernière intervention   1 468
 
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