XL 2021 Découper une ligne en plusieurs lignes en fonction d'un caractère

  • Initiateur de la discussion Initiateur de la discussion natorp
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

natorp

XLDnaute Barbatruc
Bonjour tout le monde

J'aimerais découper une ligne en plusieurs lignes en fonction du caractère ]
Dès que je trouve le caractère ] dans la ligne, je coupe jusqu'au prochain et je copie à la ligne suivante
J'ai un fichier très important à traiter, je vous joins un exemple

Merci pour votre aide, cordialement, Gérard
 

Pièces jointes

Solution
Une solution très rapide qui utilise la commande Convertir :
VB:
Sub Eclate()
Dim a, s
a = ActiveSheet.UsedRange.Rows(1)
a = Application.Transpose(Application.Transpose(a))
s = Split(Join(a, vbTab), "]")
Rows("3:" & Rows.Count).ClearContents 'RAZ
With [A3].Resize(UBound(s) + 1)
    .Value = Application.Transpose(s)
    .TextToColumns .Cells(1), xlDelimited, Tab:=True 'commande Convertir
End With
End Sub
Il ne paraît pas utile d'ajouter "]" au début de A4 A5 A6.
Bonjour Nathorp, Dudu,
Un exemple en PJ avec :
VB:
Sub Découpe()
Dim T, L%, C%
Application.ScreenUpdating = False
[A4:Z1000].ClearContents
T = [A1].CurrentRegion
L = 3: C = 1
For i = 1 To UBound(T, 2)
    If Left(T(1, i), 1) = "]" Then
        L = L + 1: C = 1
    Else
        C = C + 1
    End If
    Cells(L, C) = T(1, i)
Next i
End Sub
 

Pièces jointes

Bonjour à tous,

Une approche Power Query.

PowerQuery:
let
A = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
B = Table.Combine(List.TransformMany(Table.ToRows(A),
    each List.Transform({_}, each Table.Group(Table.FromList(_, each {_},{"x"}), "x", {"y",     
    each [x]},0, (x,y)=> Byte.From(y = "]TONREP"))[y]), (x,y)=> Table.FromRows(y)))
in
B

Cordialement
 
Re, bonjour le fil,
En passant par un array de sortie pour accélérer les choses :
VB:
Sub Découpe()
Dim T, L%, C%, Sortie
[A4:Z100000].ClearContents
ReDim Sortie(1 To 100000, 1 To 7)
T = [A1:FRZ1]
L = 1: C = 1
For i = 1 To UBound(T, 2)
    If T(1, i) = "" Then Exit For
    If Left(T(1, i), 1) = "]" Then
        L = L + 1: C = 1
    Else
        C = C + 1
    End If
    Sortie(L, C) = T(1, i)
Next i
[A4].Resize(UBound(Sortie, 1), UBound(Sortie, 2)) = Sortie
End Sub
 

Pièces jointes

Merci Sylvanu

J'ai une erreur sur la ligne "Sortie(L, C) = T(1, i)" : l'indice n'appartient pas à la sélection
Oups, ça vient de mon fichier original qui a plus de colonne entre 2 ]
Mais après correction, la macro ne traite pas toutes les colonnes
Je n'obtiens que 20 lignes alors qu'il devrait y en avoir beaucoup plus

Cordialement, Gérard
 
Une solution très rapide qui utilise la commande Convertir :
VB:
Sub Eclate()
Dim a, s
a = ActiveSheet.UsedRange.Rows(1)
a = Application.Transpose(Application.Transpose(a))
s = Split(Join(a, vbTab), "]")
Rows("3:" & Rows.Count).ClearContents 'RAZ
With [A3].Resize(UBound(s) + 1)
    .Value = Application.Transpose(s)
    .TextToColumns .Cells(1), xlDelimited, Tab:=True 'commande Convertir
End With
End Sub
Il ne paraît pas utile d'ajouter "]" au début de A4 A5 A6.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
20
Affichages
698
Retour