Concatener verticalement des lignes dont le nombre varie

excel_noob

XLDnaute Nouveau
Bonjour à tous !

Et merci à ce fabuleux forum d'exister ce qui permet aux noobs comme nous de trouver une réponse à leurs interrogations.
Aujourd'hui, la mienne est la suivante.

J'utilise un fichier Excel qui contient des opérations bancaires venant de deux banques
Chaque opération bancaire tient en une ligne. Pour la saisir, je fais un copier-coller un peu sauvage depuis le site de la BNP et je déplace les colonnes de données source vers l'endroit ou je souhaite qu'elles soient.
Jusqu'ici, tout va bien.

Là ou ce se complique, c'est lorsque je souhaite réaliser la même opération sur le site de la SG. J'obtiens alors une opération dont la date est sur la colonne A, étendue sur plusieurs cellules fusionnées verticalement en une, ainsi que plusieurs cellules non fusionnées en B.

Un exemple est au lien suivant : WeTransfer (le fichier pèse 400 ko et n'est pas accepté par le forum)

Je cherche une façon de faire tenir les opérations de la SG sur une seule ligne, en concatenant verticalement les données présentes sur la colonne B. Le point compliqué est que le nombre de cellules à concatener en B varie.
L'indicateur montrant que le nombre de cellules à concaténer est atteint est le changement de cellule sur la colonne

Je suis à votre disposition pour répondre à vos questions si nécessaire. Le point qui me pose problème est vraiment la longueur variable des lignes à concatener

Bien cordialement,
 

Modeste

XLDnaute Barbatruc
Re : Concatener verticalement des lignes dont le nombre varie

Bonsoir excel_noob,

Allez, juste pour ne pas laisser la demande sans réponse ... une proposition éminemment perfectible.
C'est une macro qui fait le travail et colle les infos en colonne H et suivantes.
Coller le code suivant dans un module standard et l'exécuter.
VB:
Sub concat()
Dim tablo()
With Sheets("SG")
For Each c In .[A1:A88] 'à adapter
    If c <> "" Then
        ReDim Preserve tablo(6, i)
        tablo(0, i) = CLng(c)
        For Each mc In c.MergeArea.Cells
            tablo(1, i) = tablo(1, i) & " " & mc.Offset(0, 1)
        Next mc
        tablo(2, i) = c.Offset(0, 2)
        tablo(3, i) = c.Offset(0, 3)
        tablo(4, i) = CLng(c.Offset(0, 4))
        tablo(5, i) = c.Offset(0, 5)
        i = i + 1
    End If
Next c
.[H1].Resize(i, 6) = Application.Transpose(tablo)
End With
End Sub

On verra ce qu'il y a lieu d'améliorer, en fonction du retour d'Excel_noob.

Bonne fin de soirée :)
 

excel_noob

XLDnaute Nouveau
Re : Concatener verticalement des lignes dont le nombre varie

Bonjour Modeste,

Merci beaucoup pour cette solution qui fonctionne parfaitement sur l'échantillon fourni. C'est tout à fait ce que je recherchais et n'aurais jamais réussi à faire :)
J'ai essayé de le tester sur une série de lignes plus longue, et le script semble ne considérer que les premières lignes.
Peut-on imaginer que le programme fonctionne sur une liste plus longue ? Faut-il forcément connaitre à l'avance le nombre de lignes que l'on veut traiter, ou bien leur nombre maximum ?
Si c'est le cas nous pouvons tout à fait nous limiter à 100.:cool:
 

Modeste

XLDnaute Barbatruc
Re : Concatener verticalement des lignes dont le nombre varie

Bonjour,

J'ai essayé de le tester sur une série de lignes plus longue, et le script semble ne considérer que les premières lignes.
... en modifiant, dans le code, la ligne où j'avais mis 'à adapter?
Quand tu parles des premières lignes, ça veut dire combien (une dizaine ... ou les 88 premières)?

Ce qu'il faudrait que tu fasses, c'est déterminer quelle colonne fournira -à tous les coups- la hauteur maximale de la plage. On peut repérer sans difficulté le n° de ligne de la dernière cellule non-vide dans une colonne, mais il faut être certain que ce sera toujours cette même colonne qui contiendra les dernières valeurs.

Dans le code, j'ai indiqué "en dur" que la plage à considérer était A1:A88. Si une colonne ne peut servir de repère, on peut aussi compter le nombre de lignes de la "UsedRange", mais là, on peut parfois avoir des surprises quand les données sont exportées depuis un autre logiciel ... Comme tu dis toi-même que tu fais "un copier-coller un peu sauvage depuis le site" :) c'est difficile de "deviner" quelle technique sera la plus appropriée
(pour illustrer, ton fichier faisait plus de 400 ko ... en ne recopiant, dans un nouveau classeur que les 3 plages de cellules concernées, je suis "descendu" à 20 ko ... Surprenant, n'est-il point :D)
 

excel_noob

XLDnaute Nouveau
Re : Concatener verticalement des lignes dont le nombre varie

Bonjour Modeste,

Je viens de comprendre la distinction code/commentaire dans le code que tu as envoyé.
En l'état, c'est tout simplement parfait :)
Il me suffit, comme tu as indiqué, de changer la cellule dans le code pour que celui-ci s’exécute sur la plage demandée.

Un grand merci pour ton aide :) Je suis ravi d'avoir pu trouver une réponse aussi complète et bien expliquée.

Merci.
 

Discussions similaires

Réponses
0
Affichages
214

Statistiques des forums

Discussions
312 196
Messages
2 086 099
Membres
103 116
dernier inscrit
kutobi87