Macro VBA transformer une colonne de nom en une liste

Fermé
rabax7 Messages postés 3 Date d'inscription lundi 29 juillet 2013 Statut Membre Dernière intervention 29 juillet 2013 - 29 juil. 2013 à 15:54
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 - 29 juil. 2013 à 18:18
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

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
29 juil. 2013 à 16:19
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 jeudi 23 novembre 2000 Statut Membre Dernière intervention 8 septembre 2014 24
29 juil. 2013 à 16:08
bonjour,
pourquoi tu ne fais pas un copier-coller spécial en cochant transposé??
0
rabax7 Messages postés 3 Date d'inscription lundi 29 juillet 2013 Statut Membre Dernière intervention 29 juillet 2013
29 juil. 2013 à 16:17
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 Date d'inscription lundi 29 juillet 2013 Statut Membre Dernière intervention 29 juillet 2013
29 juil. 2013 à 16:45
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 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
29 juil. 2013 à 16:49
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
29 juil. 2013 à 17:02
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 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
29 juil. 2013 à 17:11
Bonjour michel_m,

merci du tuyau Join
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
29 juil. 2013 à 18:18
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