Reporter texte de plusieurs cellules dans 1 seule / VBA

lapluchouet

XLDnaute Nouveau
Bonjour à tous,

C'est la première fois que j'ouvre une discussion, j'espère ne pas faire mon boulet en ouvrant une discussion qui aurait déjà été abordée, mais je n'ai pas su trouver de problèmes similaires au mien dans le forum en tout cas... !

Donc voilà, je suis une "bille" en VBA (du coup, les gens qui le maîtrise me semblent être des Dieux tout simplement et je les vénère... ! :D) et j'ai besoin de créer une macro qui me semble venir d'un autre monde !!!
Alors je challenge toutes les âmes charitables et génies d'Excel... pour arriver à me dépatouiller de cet OVNI... !

Je m'explique (même si cela est parfois difficile de poser des mots sur des problèmes Excel, le fichier annexe vous parlera davantage) :

J'ai une colonne avec du texte noir et du texte gris selon s'il s'agit :
- d'une marque (écrit en noir) par exemple
- ou de sa composition (écrit en gris).
En face du texte gris, nous avons des nombres et en face du texte noir nous avons une cellule vide.
J'aimerais reporter dans une nouvelle cellule le texte noir, suivi des nombres gris.
Puis, revenir à la ligne et réitérer à chaque fois qu'il y a du texte noir (faire la même manip' dans une nouvelle cellule...) En sachant toutefois, qu'il peut y avoir 1, 2, 4, 10, etc. lignes de texte gris et que cela est très variable. On ne peut pas le déterminer à l'avance.

Je ne sais pas si c'est très clair. C'est pour rédiger une macro qui me sert dans le logiciel SPSS. (oui, j'aime beaucoup les macros :) )
A ce jour, je me sers de la formule concaténer mais ça prend énormément de temps de le faire à la main. Je vous laisse regarder le fichier et vous remercie par avance pour votre aide précieuse...

Aude(tte)
 

Pièces jointes

  • Probleme_Macro.xlsx
    11 KB · Affichages: 45

Paf

XLDnaute Barbatruc
Re : Reporter texte de plusieurs cellules dans 1 seule / VBA

Bonjour,

Je ne sais pas si c'est très clair.

Pas vraiment ! Un exemple de l'attendu aurait précisé le besoin

Peut-être . à tester :

Code:
Sub LaMacro()
 Dim Marque As String, MaChaine As String, i As Long
 With Worksheets("Problème") ' nom de feuille à adapter
 For i = 3 To .Range("B" & .Rows.Count).End(xlUp).Row
    Deb = i
    Marque = .Cells(i, 3) & " : "
    Do
        i = i + 1
        MaChaine = MaChaine & .Cells(i, 2) & " , "
    Loop Until .Cells(i + 1, 2).Font.ColorIndex = 1
    .Cells(Deb, 5) = Marque & MaChaine
    Marque = ""
    MaChaine = ""
 Next
 End With
End Sub

A+
 

lapluchouet

XLDnaute Nouveau
Re : Reporter texte de plusieurs cellules dans 1 seule / VBA

Bonjour,

Avant tout, merci infiniment d'avoir pris le temps de me répondre :).
Je m'excuse si mon fichier et/ou mes explications n'étaient pas clairs. Concrètement, ce que j'ai mis en jaune était le résultat final que j'attendais.
Concrètement, je dois exactement avoir écrit ceci : "SUBTOTAL='ST - + la Marque A' + suivi des numéros 101, 102, etc.
Exemple :
SUBTOTAL='ST - Marque A' 101, 102, 103, 104,
SUBTOTAL='ST - Marque B' 201, 202,
SUBTOTAL='ST - Marque C' 301, 302, 303,
SUBTOTAL='ST - Marque D' 401,

(J'ai mis en gras, les infos que la macro doit aller chercher dans les autres cellules.)
Par contre : SUBTOTAL='ST - ' peut être écrit directement dans la macro, car c'est tout le temps la même structure.
Les apostrophes encadrant ST - et Marque A' sont importantes, ainsi que les virgules entre chaque nombre, car sinon le logiciel SPSS ne comprend pas la macro.
Je souhaiterais également que chaque ligne s'écrive l'une en-dessous de l'autre comme dans mon exemple ci-dessus.
Je peux joindre un autre fichier, vide de formule, si vous le souhaitez...

Merci encore. J'espère avoir été plus claire.
:)
 

Paf

XLDnaute Barbatruc
Re : Reporter texte de plusieurs cellules dans 1 seule / VBA

Re,

a priori
Code:
Sub LaMacro()
 Dim Marque As String, MaChaine As String, i As Long, x As Integer
 With Worksheets("Problème") ' nom de feuille à adapter
 x = 7
 For i = 3 To .Range("B" & .Rows.Count).End(xlUp).Row
    Marque = "SUBTOTAL='ST - " & .Cells(i, 3) & "' "
    Do
        i = i + 1
        MaChaine = MaChaine & .Cells(i, 2) & ", "
    Loop Until .Cells(i + 1, 2).Font.ColorIndex = 1
    x = x + 1
    .Cells(x, 6) = Left(Marque & MaChaine, Len(Marque & MaChaine) - 1)
    Marque = ""
    MaChaine = ""
 Next
 End With
End Sub

A+
 

lapluchouet

XLDnaute Nouveau
Re : Reporter texte de plusieurs cellules dans 1 seule / VBA

Bonjour Paf... Tant que j'y suis, puis-je vous poser une seconde question qui est indépendante de la première ? ou faut-il que j'ouvre une nouvelle discussion ? cela concerne une macro pour trier par ordre décroissant des sous-parties dans un tableau...
 

Discussions similaires

Statistiques des forums

Discussions
314 653
Messages
2 111 592
Membres
111 208
dernier inscrit
estalavista