Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

scinder texte avec LF en plusieurs lignes

4 réponses
Avatar
Quetzalcoatl
Bonsoir,

Soit, dans un onglet EXCEL, une zone de cellules contenant du texte.
Pour toutes les colonnes sauf une, chaque cellule contient une ligne de texte.
Pour la colonne singulière, chaque cellule contient une ou plusieurs lignes de texte. (Lorsqu'une cellule contient plusieurs lignes
de texte, cela signifie que chaque ligne de texte est séparée de la suivante par le caractère "Line Feed" : chr(10) ou ALT Entrée).

Je sélectionne la matrice intersection de la colonne singulière et des rows que je souhaite considérer.
Je bute sur l'algorithme VBA permettant de scinder chaque row en autant de rows qu'il y a de lignes de texte.

Exemple :

A B C
1 renault essence break
diesel
2 citroen auto ABS
méca
3 peugeot clim vitres élec.
4 ford 3 portes airbag

avec matrice B1:B3 sélectionnée, deviendrait :

A B C
1 renault essence break
2 renault diesel break
3 citroen auto ABS
4 citroen méca ABS
5 peugeot clim vitres élec.
6 ford 3 portes airbag

Merci d'avance pour toute aide.
Cordialement.

4 réponses

Avatar
Pounet95
Bonjour,

Peut-être avec ceci à adapter en fonction des cellules de la plage
sélectionnée

Sub toto()
Dim rtrn(20) As String
Dim maCel As Range
Set maCel = [B3]


nb = 1 'nbre de CHR(10)
deb = 1 'début de la chaine extraite
For i = 1 To Len(maCel)
If Mid(maCel, i, 1) = Chr(10) Then
rtrn(nb) = Mid(maCel, deb, i - deb)
nb = nb + 1
deb = i + 1
End If
Next i
rtrn(nb) = Mid$(maCel, deb, Len(maCel) - deb + 1)

If nb > 1 Then
Rows(maCel.Row + 1 & ":" & maCel.Row + nb - 1).Select
Selection.Insert
For j = 1 To nb
maCel.Offset(j - 1, 0) = rtrn(j)
maCel.Offset(j - 1, -1) = maCel.Offset(0, -1)
Next j
End If
End Sub


Bonne journée
Pounet95

"Quetzalcoatl" a écrit dans le message
de news: 47069331$0$25917$
Bonsoir,

Soit, dans un onglet EXCEL, une zone de cellules contenant du texte.
Pour toutes les colonnes sauf une, chaque cellule contient une ligne de
texte.
Pour la colonne singulière, chaque cellule contient une ou plusieurs
lignes de texte. (Lorsqu'une cellule contient plusieurs lignes de texte,
cela signifie que chaque ligne de texte est séparée de la suivante par le
caractère "Line Feed" : chr(10) ou ALT Entrée).

Je sélectionne la matrice intersection de la colonne singulière et des
rows que je souhaite considérer.
Je bute sur l'algorithme VBA permettant de scinder chaque row en autant de
rows qu'il y a de lignes de texte.

Exemple :

A B C
1 renault essence break
diesel
2 citroen auto ABS
méca
3 peugeot clim vitres élec.
4 ford 3 portes airbag

avec matrice B1:B3 sélectionnée, deviendrait :

A B C
1 renault essence break
2 renault diesel break
3 citroen auto ABS
4 citroen méca ABS
5 peugeot clim vitres élec.
6 ford 3 portes airbag

Merci d'avance pour toute aide.
Cordialement.



Avatar
JB
Bonjour,

ligne = 1
For Each c In Range([B1], [B65000].End(xlUp))
a = Split(c.Value, Chr(10))
For i = 0 To UBound(a)
Sheets(2).Cells(ligne, 1) = c.Offset(0, -1)
Sheets(2).Cells(ligne, 2) = a(i)
Sheets(2).Cells(ligne, 3) = c.Offset(0, 1)
ligne = ligne + 1
Next i
Next c

http://cjoint.com/?kghRPY8zX8

JB
http://boisgontierjacques.free.fr


On 5 oct, 21:40, "Quetzalcoatl"
wrote:
Bonsoir,

Soit, dans un onglet EXCEL, une zone de cellules contenant du texte.
Pour toutes les colonnes sauf une, chaque cellule contient une ligne de t exte.
Pour la colonne singulière, chaque cellule contient une ou plusieurs li gnes de texte. (Lorsqu'une cellule contient plusieurs lignes
de texte, cela signifie que chaque ligne de texte est séparée de la s uivante par le caractère "Line Feed" : chr(10) ou ALT Entrée).

Je sélectionne la matrice intersection de la colonne singulière et de s rows que je souhaite considérer.
Je bute sur l'algorithme VBA permettant de scinder chaque row en autant d e rows qu'il y a de lignes de texte.

Exemple :

A B C
1 renault essence break
diesel
2 citroen auto ABS
méca
3 peugeot clim vitres élec.
4 ford 3 portes airbag

avec matrice B1:B3 sélectionnée, deviendrait :

A B C
1 renault essence break
2 renault diesel break
3 citroen auto ABS
4 citroen méca ABS
5 peugeot clim vitres élec.
6 ford 3 portes airbag

Merci d'avance pour toute aide.
Cordialement.


Avatar
Quetzalcoatl
Bonjour,

Waw ! Plus simple que les directions que j'avais prises. Merci .

Et pour ceux (excel 97) qui n'ont pas la fonction Split (trouvée sur le ouèbe) :

Function Split(sString As String, sSep As String) As Variant

Dim aRet() As String
Dim iI As Integer
Dim iLen As Integer
Dim sBuff As String
Dim sChar As String

ReDim aRet(0)
iLen = Len(sString)
sBuff = ""

For iI = 1 To iLen
sChar = Mid$(sString, iI, 1)
If sChar = sSep Then
aRet(UBound(aRet)) = sBuff
sBuff = ""
ReDim Preserve aRet(UBound(aRet) + 1)
ElseIf iI = iLen Then
sBuff = sBuff & sChar
aRet(UBound(aRet)) = sBuff
Else
sBuff = sBuff & sChar
End If
Next iI
Split = aRet
End Function


"JB" a écrit dans le message de news:
Bonjour,

ligne = 1
For Each c In Range([B1], [B65000].End(xlUp))
a = Split(c.Value, Chr(10))
For i = 0 To UBound(a)
Sheets(2).Cells(ligne, 1) = c.Offset(0, -1)
Sheets(2).Cells(ligne, 2) = a(i)
Sheets(2).Cells(ligne, 3) = c.Offset(0, 1)
ligne = ligne + 1
Next i
Next c

http://cjoint.com/?kghRPY8zX8

JB
http://boisgontierjacques.free.fr


On 5 oct, 21:40, "Quetzalcoatl"
wrote:
Bonsoir,

Soit, dans un onglet EXCEL, une zone de cellules contenant du texte.
Pour toutes les colonnes sauf une, chaque cellule contient une ligne de texte.
Pour la colonne singulière, chaque cellule contient une ou plusieurs lignes de texte. (Lorsqu'une cellule contient plusieurs
lignes
de texte, cela signifie que chaque ligne de texte est séparée de la suivante par le caractère "Line Feed" : chr(10) ou ALT
Entrée).

Je sélectionne la matrice intersection de la colonne singulière et des rows que je souhaite considérer.
Je bute sur l'algorithme VBA permettant de scinder chaque row en autant de rows qu'il y a de lignes de texte.

Exemple :

A B C
1 renault essence break
diesel
2 citroen auto ABS
méca
3 peugeot clim vitres élec.
4 ford 3 portes airbag

avec matrice B1:B3 sélectionnée, deviendrait :

A B C
1 renault essence break
2 renault diesel break
3 citroen auto ABS
4 citroen méca ABS
5 peugeot clim vitres élec.
6 ford 3 portes airbag

Merci d'avance pour toute aide.
Cordialement.


Avatar
Quetzalcoatl
Merci.
Ca fonctionne, moyennant une petite adaptation pour recopier toutes les cellules qui ne comportent qu'une ligne de texte.


"Pounet95" a écrit dans le message de news: 47071bcc$0$5099$
Bonjour,

Peut-être avec ceci à adapter en fonction des cellules de la plage sélectionnée
[...]