Séparer le contenu d'une cellule sur plusieurs lignes

Bonjour à tous,

Je suis débutant en VBA, et c'est pourquoi je fais appel à vous puisque j'ai un petit problème.

Je m'explique, je souhaite associer des spécialisations à des codes clients. Pour se faire, j'ai besoin de séparer le contenu d'une cellule sur plusieurs lignes tout en gardant le code clients associés. Et comme une image vaut mille mot je vous mets un exemple de ce que j'attends dans ce classeur Excel :

6classeur1.xlsx (10.86 Ko)

Merci d'avance

Bonjour,

Un test via POWER QUERY sur la base de la table structurée BDD. A noter que le délimitateur n'est pas des plus fiables, il suffit que vous ayez une spé avec un espace au milieu et ce seront deux lignes qui seront créées.

Pour MaJ > Données > Actualiser tout.

Les lignes en rose n'apparaissent pas car les cellules de spécialisations ne sont pas renseignées, hors c'est un champ obligatoire selon votre table donc je ne me suis pas occupé à les gérer.

Cdlt,

22classeur1.xlsx (18.92 Ko)

Sincèrement merci beaucoup Ergotamine, c'est exactement ce que je voulais. Je ne connaissais pas POWER QUERY, je vais me renseigner à ce sujet.

Bonne journée

Bonjour,

voici une proposition en Vba

je peux la modifier en fonction de vos besoins

Bonjour

Bonjour à tous

Un essai tel que demandé.

13classeur1-1-v1.xlsm (25.78 Ko)
Option Explicit

Dim tablo, tabloR()
Dim i&, n&, nb&, k&

Sub Séparer()

    tablo = Range("A3:B" & Range("A" & Rows.Count).End(xlUp).Row)
    Range("G1").CurrentRegion.Offset(2, 0).Clear
    k = 0
    For i = 1 To UBound(tablo, 1)
        If tablo(i, 2) = "" Then
            ReDim Preserve tabloR(1 To 2, 1 To k + 1)
            tabloR(1, k + 1) = tablo(i, 1)
            k = k + 1
            GoTo suite
        End If
        nb = UBound(Split(tablo(i, 2), " "))
        For n = 0 To nb
            ReDim Preserve tabloR(1 To 2, 1 To k + 1)
            tabloR(1, k + 1) = tablo(i, 1)
            tabloR(2, k + 1) = Split(tablo(i, 2), " ")(n)
            k = k + 1
        Next n
suite:
    Next i
    Range("G3").Resize(UBound(tabloR, 2), 2) = Application.Transpose(tabloR)
    Range("G3").Resize(UBound(tabloR, 2), 2).Borders.LineStyle = xlContinuous
    Erase tabloR
End Sub

Bye !

Merci gullaud, ta proposition en VBA fonctionne parfaitement aussi.

Cependant, j'aimerais la copier sur un autre classeur, mais lorsque je copie-colle la macro cela ne fonctionne plus (cela est peut être liée au faite qu'il y ai deux macros (insere_ligne et sépare)

Pourrais tu m'expliquer comment faire ?

En te remerciant par avance.

Bonjour,

une feuille de classeur possède 2 noms (ces 2 noms peuvent être différents)

nom de l'onglet : client

nom de l'objet : client

dans mon programme, la procédure sépare utilise le nom de l'objet, celui que tu dois changer ou renommer le nom objet de la feuille

pour modifier ce nom, aller dans visual basic, cliquer sue le nom de la feuille (fenêtre "projet VBA project") en haut gauche

puis dans la fenêtre propriété situé en dessous changer le nom à droite de : (Name)

la procédure insere_lignes ne sert à rien

Bonjour,

Merci beaucoup pour votre réponse.

Cela fonctionne parfaitement

Rechercher des sujets similaires à "separer contenu lignes"