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

"Déconcatener" et mettre en forme une cellule

9 réponses
Avatar
m077664
Bonjour,
j'ai un fichier excel contenant 3000 lignes et 2 colonnes. Dans la colonne A la donnée est unique, par contre dans la colonne B elle est multiple et séparer par un /. Je souhaite obtenir un tableau contenant toujours mes 2 colonnes A et B en "deconcatenant" la colonne B en rajoutant autant de lignes qu'il y a de données dans la cellule de la colonne B.
Je fais un petit tableau pour expliquer ce que j'ai, et ce que je souhaite obtenir.

CE QUE J'AI

COLONNE A | COLONNE B
--------------------------------------------------
12-002-01-0 | 335EB/335EXB/335FB
12-004-00-0 | 324DL/324DXL
12-008-00-0 | 511AB/511CB/511GB

CE QUE JE SOUHAITE

COLONNE A | COLONNE B
----------------------------------
12-002-01-0 | 335EB
12-002-01-0 | 335EXB
12-002-01-0 | 335FB
12-004-00-0 | 324DL
12-004-00-0 | 324DXL
12-008-00-0 | 511AB
12-008-00-0 | 511CB
12-008-00-0 | 511GB

Un ami m'a fais la macro suivante, mais elle ne fonctionne pas.

Sub RetourLigne()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer
Dim x As String, NomClasseur As String, NomFeuille As String, ColonneDebut As Integer
Dim y As String

NomClasseur = "Classeur1.xls"
NomFeuille = "Feuil1"
ColonneDebut = 1

With Workbooks(NomClasseur).Worksheets(NomFeuille)
j = ColonneDebut
Do Until IsEmpty(.Cells(15, j))
x = .Cells(1, j)
i = 1
k = 1
k1 = 1
Do
y = Mid(x, k, 1)
If y = "/" Then
.Cells(i, j) = Mid(x, k1, k - k1)
i = i + 1
k1 = k + 1
End If
k = k + 1
Loop Until k = Len(x)
.Cells(i, j) = Mid(x, k1, k - k1 + 1)
j = j + 1
Loop
End With
End Sub

Pouvez vous m'apporter une solution.
D'avance, merci.

9 réponses

Avatar
gmlsteph
Bonjour,

Sub Azaz()

Dim lig As Long
lig = [a65536].End(xlUp).Row
Application.screenupdatingúlse
[b:b].TextToColumns Destination:=Range("B1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:úlse,
Tab:=True, _
Semicolon:úlse, Comma:úlse, Space:úlse, Other:=True,
OtherChar _
:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3,
1)), _
TrailingMinusNumbers:=True
Range("A2:A" & lig & ",C2:C" & lig).Copy Destination:=[a65536].End
(xlUp)(2)
Range("A2:A" & lig & ",d2:d" & lig).Copy Destination:=[a65536].End
(xlUp)(2)
'etc
Columns("C:D").Delete Shift:=xlToLeft
End Sub

'lSteph

On 17 mar, 14:06, m077664 wrote:
Bonjour,
j'ai un fichier excel contenant 3000 lignes et 2 colonnes. Dans la colonn e A la
donnée est unique, par contre dans la colonne B elle est multiple et s éparer par
un /. Je souhaite obtenir un tableau contenant toujours mes 2 colonnes A et B en
"deconcatenant" la colonne B en rajoutant  autant de lignes qu'il y a d e données
dans la cellule de la colonne B.
Je fais un petit tableau pour expliquer ce que j'ai, et ce que je souhait e
obtenir.

CE QUE J'AI    

COLONNE  A   |   COLONNE B
--------------------------------------------------
 12-002-01-0      |   335EB/335EXB/335FB
 12-004-00-0      |   324DL/324DXL
 12-008-00-0      |   511AB/511CB/511GB

CE QUE JE SOUHAITE      

COLONNE A | COLONNE B
----------------------------------
12-002-01-0 | 335EB
12-002-01-0 | 335EXB
12-002-01-0 | 335FB
12-004-00-0 | 324DL
12-004-00-0 | 324DXL
12-008-00-0 | 511AB
12-008-00-0 | 511CB
12-008-00-0 | 511GB

Un ami m'a fais la macro suivante, mais elle ne fonctionne pas.

Sub RetourLigne()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer
Dim x As String, NomClasseur As String, NomFeuille As String, ColonneDebu t As
Integer
Dim y As String

NomClasseur = "Classeur1.xls"
NomFeuille = "Feuil1"
ColonneDebut = 1

With Workbooks(NomClasseur).Worksheets(NomFeuille)
    j = ColonneDebut
    Do Until IsEmpty(.Cells(15, j))
        x = .Cells(1, j)
        i = 1
        k = 1
        k1 = 1
        Do
            y = Mid(x, k, 1)
            If y = "/" Then
                .Cells(i, j) = Mid(x, k1, k - k1)
                i = i + 1
                k1 = k + 1
            End If
            k = k + 1
        Loop Until k = Len(x)
        .Cells(i, j) = Mid(x, k1, k - k1 + 1)
        j = j + 1
    Loop
End With
End Sub

Pouvez vous m'apporter une solution.
D'avance, merci.


Avatar
JB
Bonjour,

ligne = 2
For Each c In Range("A2:A" & [A65000].End(xlUp).Row)
a = Split(c.Offset(, 1), "/")
For j = LBound(a) To UBound(a)
Sheets(2).Cells(ligne, 1) = c
Sheets(2).Cells(ligne, 2) = a(j)
ligne = ligne + 1
Next
Next c

http://cjoint.com/?dtpbe35yKE

JB
http://boisgontierjacques.free.fr





On 17 mar, 14:06, m077664 wrote:
Bonjour,
j'ai un fichier excel contenant 3000 lignes et 2 colonnes. Dans la colonn e A la
donnée est unique, par contre dans la colonne B elle est multiple et s éparer par
un /. Je souhaite obtenir un tableau contenant toujours mes 2 colonnes A et B en
"deconcatenant" la colonne B en rajoutant  autant de lignes qu'il y a d e données
dans la cellule de la colonne B.
Je fais un petit tableau pour expliquer ce que j'ai, et ce que je souhait e
obtenir.

CE QUE J'AI    

COLONNE  A   |   COLONNE B
--------------------------------------------------
 12-002-01-0      |   335EB/335EXB/335FB
 12-004-00-0      |   324DL/324DXL
 12-008-00-0      |   511AB/511CB/511GB

CE QUE JE SOUHAITE      

COLONNE A | COLONNE B
----------------------------------
12-002-01-0 | 335EB
12-002-01-0 | 335EXB
12-002-01-0 | 335FB
12-004-00-0 | 324DL
12-004-00-0 | 324DXL
12-008-00-0 | 511AB
12-008-00-0 | 511CB
12-008-00-0 | 511GB

Un ami m'a fais la macro suivante, mais elle ne fonctionne pas.

Sub RetourLigne()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer
Dim x As String, NomClasseur As String, NomFeuille As String, ColonneDebu t As
Integer
Dim y As String

NomClasseur = "Classeur1.xls"
NomFeuille = "Feuil1"
ColonneDebut = 1

With Workbooks(NomClasseur).Worksheets(NomFeuille)
    j = ColonneDebut
    Do Until IsEmpty(.Cells(15, j))
        x = .Cells(1, j)
        i = 1
        k = 1
        k1 = 1
        Do
            y = Mid(x, k, 1)
            If y = "/" Then
                .Cells(i, j) = Mid(x, k1, k - k1)
                i = i + 1
                k1 = k + 1
            End If
            k = k + 1
        Loop Until k = Len(x)
        .Cells(i, j) = Mid(x, k1, k - k1 + 1)
        j = j + 1
    Loop
End With
End Sub

Pouvez vous m'apporter une solution.
D'avance, merci.


Avatar
gmlsteph
...sans macro:
sélectionne ta colonne B Données Convertir Délimité Séparateur: " /"
Copie A et C colle sous A
Copie A et D
colle sous D

le tour est joué!

--
lSteph
(trie éventuellement pour virer les vides )


On 17 mar, 14:06, m077664 wrote:
Bonjour,
j'ai un fichier excel contenant 3000 lignes et 2 colonnes. Dans la colonn e A la
donnée est unique, par contre dans la colonne B elle est multiple et s éparer par
un /. Je souhaite obtenir un tableau contenant toujours mes 2 colonnes A et B en
"deconcatenant" la colonne B en rajoutant  autant de lignes qu'il y a d e données
dans la cellule de la colonne B.
Je fais un petit tableau pour expliquer ce que j'ai, et ce que je souhait e
obtenir.

CE QUE J'AI    

COLONNE  A   |   COLONNE B
--------------------------------------------------
 12-002-01-0      |   335EB/335EXB/335FB
 12-004-00-0      |   324DL/324DXL
 12-008-00-0      |   511AB/511CB/511GB

CE QUE JE SOUHAITE      

COLONNE A | COLONNE B
----------------------------------
12-002-01-0 | 335EB
12-002-01-0 | 335EXB
12-002-01-0 | 335FB
12-004-00-0 | 324DL
12-004-00-0 | 324DXL
12-008-00-0 | 511AB
12-008-00-0 | 511CB
12-008-00-0 | 511GB

Un ami m'a fais la macro suivante, mais elle ne fonctionne pas.

Sub RetourLigne()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer
Dim x As String, NomClasseur As String, NomFeuille As String, ColonneDebu t As
Integer
Dim y As String

NomClasseur = "Classeur1.xls"
NomFeuille = "Feuil1"
ColonneDebut = 1

With Workbooks(NomClasseur).Worksheets(NomFeuille)
    j = ColonneDebut
    Do Until IsEmpty(.Cells(15, j))
        x = .Cells(1, j)
        i = 1
        k = 1
        k1 = 1
        Do
            y = Mid(x, k, 1)
            If y = "/" Then
                .Cells(i, j) = Mid(x, k1, k - k1)
                i = i + 1
                k1 = k + 1
            End If
            k = k + 1
        Loop Until k = Len(x)
        .Cells(i, j) = Mid(x, k1, k - k1 + 1)
        j = j + 1
    Loop
End With
End Sub

Pouvez vous m'apporter une solution.
D'avance, merci.


Avatar
LSteph
...petit effacement malencontreux:

> ...sans macro:
> sélectionne ta colonne B Données Convertir Délimité Séparateur: "/"
> Copie A et C colle sous A
> Copie A et D
> colle sous ...
A

...et supprime les colonnes C et... D


a écrit :
...sans macro:
sélectionne ta colonne B Données Convertir Délimité Séparateur: "/"
Copie A et C colle sous A
Copie A et D
colle sous D

le tour est joué!

--
lSteph
(trie éventuellement pour virer les vides )


On 17 mar, 14:06, m077664 wrote:
Bonjour,
j'ai un fichier excel contenant 3000 lignes et 2 colonnes. Dans la colonne A la
donnée est unique, par contre dans la colonne B elle est multiple et séparer par
un /. Je souhaite obtenir un tableau contenant toujours mes 2 colonnes A et B en
"deconcatenant" la colonne B en rajoutant autant de lignes qu'il y a de données
dans la cellule de la colonne B.
Je fais un petit tableau pour expliquer ce que j'ai, et ce que je souhaite
obtenir.

CE QUE J'AI

COLONNE A | COLONNE B
--------------------------------------------------
12-002-01-0 | 335EB/335EXB/335FB
12-004-00-0 | 324DL/324DXL
12-008-00-0 | 511AB/511CB/511GB

CE QUE JE SOUHAITE

COLONNE A | COLONNE B
----------------------------------
12-002-01-0 | 335EB
12-002-01-0 | 335EXB
12-002-01-0 | 335FB
12-004-00-0 | 324DL
12-004-00-0 | 324DXL
12-008-00-0 | 511AB
12-008-00-0 | 511CB
12-008-00-0 | 511GB

Un ami m'a fais la macro suivante, mais elle ne fonctionne pas.

Sub RetourLigne()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer
Dim x As String, NomClasseur As String, NomFeuille As String, ColonneDebut As
Integer
Dim y As String

NomClasseur = "Classeur1.xls"
NomFeuille = "Feuil1"
ColonneDebut = 1

With Workbooks(NomClasseur).Worksheets(NomFeuille)
j = ColonneDebut
Do Until IsEmpty(.Cells(15, j))
x = .Cells(1, j)
i = 1
k = 1
k1 = 1
Do
y = Mid(x, k, 1)
If y = "/" Then
.Cells(i, j) = Mid(x, k1, k - k1)
i = i + 1
k1 = k + 1
End If
k = k + 1
Loop Until k = Len(x)
.Cells(i, j) = Mid(x, k1, k - k1 + 1)
j = j + 1
Loop
End With
End Sub

Pouvez vous m'apporter une solution.
D'avance, merci.





Avatar
m077664
JB a écrit le 17/03/2009 à 15h00 :
Bonjour,

ligne = 2
For Each c In Range("A2:A" & [A65000].End(xlUp).Row)
a = Split(c.Offset(, 1), "/")
For j = LBound(a) To UBound(a)
Sheets(2).Cells(ligne, 1) = c
Sheets(2).Cells(ligne, 2) = a(j)
ligne = ligne + 1
Next
Next c

http://cjoint.com/?dtpbe35yKE

JB
http://boisgontierjacques.free.fr





On 17 mar, 14:06, m077664 wrote:
Bonjour,
j'ai un fichier excel contenant 3000 lignes et 2 colonnes. Dans la colonn e A
la
donnée est unique, par contre dans la colonne B elle est multiple et s
éparer par
un /. Je souhaite obtenir un tableau contenant toujours mes 2 colonnes A et B
en
"deconcatenant" la colonne B en rajoutant  autant de lignes
qu'il y a d e données
dans la cellule de la colonne B.
Je fais un petit tableau pour expliquer ce que j'ai, et ce que je souhait e
obtenir.

CE QUE J'AI    

COLONNE  A   |   COLONNE B
--------------------------------------------------
 12-002-01-0      |   335EB/335EXB/335FB
 12-004-00-0      |   324DL/324DXL
 12-008-00-0      |   511AB/511CB/511GB

CE QUE JE SOUHAITE      

COLONNE A | COLONNE B
----------------------------------
12-002-01-0 | 335EB
12-002-01-0 | 335EXB
12-002-01-0 | 335FB
12-004-00-0 | 324DL
12-004-00-0 | 324DXL
12-008-00-0 | 511AB
12-008-00-0 | 511CB
12-008-00-0 | 511GB

Un ami m'a fais la macro suivante, mais elle ne fonctionne pas.

Sub RetourLigne()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer
Dim x As String, NomClasseur As String, NomFeuille As String, ColonneDebu t As
Integer
Dim y As String

NomClasseur = "Classeur1.xls"
NomFeuille = "Feuil1"
ColonneDebut = 1

With Workbooks(NomClasseur).Worksheets(NomFeuille)
    j = ColonneDebut
    Do Until IsEmpty(.Cells(15, j))
        x = .Cells(1, j)
        i = 1
        k = 1
        k1 = 1
        Do
            y = Mid(x, k, 1)
            If y = "/" Then
                .Cells(i, j) = Mid(x,
k1, k - k1)
                i = i + 1
                k1 = k + 1
            End If
            k = k + 1
        Loop Until k = Len(x)
        .Cells(i, j) = Mid(x, k1, k - k1 + 1)
        j = j + 1
    Loop
End With
End Sub

Pouvez vous m'apporter une solution.
D'avance, merci.





Merci, c'est tout a fait ce que je cherchais
Avatar
Henry
"m077664" a écrit :

Bonjour,
j'ai un fichier excel contenant 3000 lignes et 2 colonnes. Dans la colonne A la
donnée est unique, par contre dans la colonne B elle est multiple et séparer par
un /. Je souhaite obtenir un tableau contenant toujours mes 2 colonnes A et B en
"deconcatenant" la colonne B en rajoutant autant de lignes qu'il y a de données
dans la cellule de la colonne B.
Je fais un petit tableau pour expliquer ce que j'ai, et ce que je souhaite
obtenir.

CE QUE J'AI

COLONNE A | COLONNE B
--------------------------------------------------
12-002-01-0 | 335EB/335EXB/335FB
12-004-00-0 | 324DL/324DXL
12-008-00-0 | 511AB/511CB/511GB

CE QUE JE SOUHAITE

COLONNE A | COLONNE B
----------------------------------
12-002-01-0 | 335EB
12-002-01-0 | 335EXB
12-002-01-0 | 335FB
12-004-00-0 | 324DL
12-004-00-0 | 324DXL
12-008-00-0 | 511AB
12-008-00-0 | 511CB
12-008-00-0 | 511GB

Un ami m'a fais la macro suivante, mais elle ne fonctionne pas.

Sub RetourLigne()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer
Dim x As String, NomClasseur As String, NomFeuille As String, ColonneDebut As
Integer
Dim y As String

NomClasseur = "Classeur1.xls"
NomFeuille = "Feuil1"
ColonneDebut = 1

With Workbooks(NomClasseur).Worksheets(NomFeuille)
j = ColonneDebut
Do Until IsEmpty(.Cells(15, j))
x = .Cells(1, j)
i = 1
k = 1
k1 = 1
Do
y = Mid(x, k, 1)
If y = "/" Then
.Cells(i, j) = Mid(x, k1, k - k1)
i = i + 1
k1 = k + 1
End If
k = k + 1
Loop Until k = Len(x)
.Cells(i, j) = Mid(x, k1, k - k1 + 1)
j = j + 1
Loop
End With
End Sub

Pouvez vous m'apporter une solution.
D'avance, merci.




Je ne sais pas si tu connais la fonction Données > convertir
celà correspond bien a ton attente en sélectionnant la colonne
Avatar
Corto
Bonjour m077664,
Sub Déconcaténer()
'--| Définition des plages Source et Destination
XROWS = [A1].CurrentRegion.Rows.Count - 1
Set XSRC = [A1].CurrentRegion.Offset(1, 0).Resize(Rowsize:=XROWS)
XTAB = XSRC.Value: Set XDST = [A7]

'--| Déconcaténation du tableau
For XCPT = 1 To UBound(XTAB)
XVALS = Split(XTAB(XCPT, 2), "/")
XDST.Resize(Rowsize:=UBound(XVALS) + 1) = XTAB(XCPT, 1)
XDST.Offset(0, 1).Resize(Rowsize:=UBound(XVALS) + 1) =
Application.Transpose(XVALS)
Set XDST = XDST.Offset(UBound(XVALS) + 1, 0)
Next XCPT
End Sub

Corto

m077664 a écrit :
Bonjour,
j'ai un fichier excel contenant 3000 lignes et 2 colonnes. Dans la colo nne A la
donnée est unique, par contre dans la colonne B elle est multiple et séparer par
un /. Je souhaite obtenir un tableau contenant toujours mes 2 colonnes A et B en
"deconcatenant" la colonne B en rajoutant autant de lignes qu'il y a d e données
dans la cellule de la colonne B.
Je fais un petit tableau pour expliquer ce que j'ai, et ce que je souha ite
obtenir.

CE QUE J'AI

COLONNE A | COLONNE B
--------------------------------------------------
12-002-01-0 | 335EB/335EXB/335FB
12-004-00-0 | 324DL/324DXL
12-008-00-0 | 511AB/511CB/511GB

CE QUE JE SOUHAITE

COLONNE A | COLONNE B
----------------------------------
12-002-01-0 | 335EB
12-002-01-0 | 335EXB
12-002-01-0 | 335FB
12-004-00-0 | 324DL
12-004-00-0 | 324DXL
12-008-00-0 | 511AB
12-008-00-0 | 511CB
12-008-00-0 | 511GB

Un ami m'a fais la macro suivante, mais elle ne fonctionne pas.

Sub RetourLigne()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer
Dim x As String, NomClasseur As String, NomFeuille As String, ColonneDe but As
Integer
Dim y As String

NomClasseur = "Classeur1.xls"
NomFeuille = "Feuil1"
ColonneDebut = 1

With Workbooks(NomClasseur).Worksheets(NomFeuille)
j = ColonneDebut
Do Until IsEmpty(.Cells(15, j))
x = .Cells(1, j)
i = 1
k = 1
k1 = 1
Do
y = Mid(x, k, 1)
If y = "/" Then
.Cells(i, j) = Mid(x, k1, k - k1)
i = i + 1
k1 = k + 1
End If
k = k + 1
Loop Until k = Len(x)
.Cells(i, j) = Mid(x, k1, k - k1 + 1)
j = j + 1
Loop
End With
End Sub

Pouvez vous m'apporter une solution.
D'avance, merci.



Avatar
gmlsteph
Bonjour,

c'est ce que je trouvais bien plus simple,
faut-il encore le voir .

--
lSteph


On 18 mar, 10:11, Henry wrote:


Je ne sais pas si tu connais la fonction Données > convertir
celà correspond bien a ton attente en sélectionnant la colonne- Masqu er le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
m077664
Henry a écrit le 18/03/2009 à 10h11 :
"m077664" a écrit :

Bonjour,
j'ai un fichier excel contenant 3000 lignes et 2 colonnes. Dans la colonne A
la
donnée est unique, par contre dans la colonne B elle est multiple et
séparer par
un /. Je souhaite obtenir un tableau contenant toujours mes 2 colonnes A et B
en
"deconcatenant" la colonne B en rajoutant autant de lignes qu'il y
a de données
dans la cellule de la colonne B.
Je fais un petit tableau pour expliquer ce que j'ai, et ce que je souhaite
obtenir.

CE QUE J'AI

COLONNE A | COLONNE B
--------------------------------------------------
12-002-01-0 | 335EB/335EXB/335FB
12-004-00-0 | 324DL/324DXL
12-008-00-0 | 511AB/511CB/511GB

CE QUE JE SOUHAITE

COLONNE A | COLONNE B
----------------------------------
12-002-01-0 | 335EB
12-002-01-0 | 335EXB
12-002-01-0 | 335FB
12-004-00-0 | 324DL
12-004-00-0 | 324DXL
12-008-00-0 | 511AB
12-008-00-0 | 511CB
12-008-00-0 | 511GB

Un ami m'a fais la macro suivante, mais elle ne fonctionne pas.

Sub RetourLigne()

Dim i As Integer, j As Integer, k As Integer, k1 As Integer
Dim x As String, NomClasseur As String, NomFeuille As String, ColonneDebut As
Integer
Dim y As String

NomClasseur = "Classeur1.xls"
NomFeuille = "Feuil1"
ColonneDebut = 1

With Workbooks(NomClasseur).Worksheets(NomFeuille)
j = ColonneDebut
Do Until IsEmpty(.Cells(15, j))
x = .Cells(1, j)
i = 1
k = 1
k1 = 1
Do
y = Mid(x, k, 1)
If y = "/" Then
.Cells(i, j) = Mid(x, k1, k - k1)
i = i + 1
k1 = k + 1
End If
k = k + 1
Loop Until k = Len(x)
.Cells(i, j) = Mid(x, k1, k - k1 + 1)
j = j + 1
Loop
End With
End Sub

Pouvez vous m'apporter une solution.
D'avance, merci.





Je ne sais pas si tu connais la fonction Données > convertir
celà correspond bien a ton attente en sélectionnant la colonne


Bonjour, je connais bien la fonction convertir, le problème est que cette fonction "déconcatene" sur la meme ligne, moi je recherche quelque chose qui "deconcatene" sur la meme colonne.
CRDLT