scinder texte avec LF en plusieurs lignes

Le
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pounet95
Le #4961611
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" 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.



JB
Le #4961601
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.


Quetzalcoatl
Le #4961421
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" 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.


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


"Pounet95"
Bonjour,

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


Publicité
Poster une réponse
Anonyme