"Déconcatener" et mettre en forme une cellule

Le
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.
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
gmlsteph
Le #18921191
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
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.


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


gmlsteph
Le #18922591
...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
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.


LSteph
Le #18926151
...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
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.





m077664
Le #18926431
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
Henry
Le #18926561
"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
Corto
Le #18926661
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.



gmlsteph
Le #18926751
Bonjour,

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

--
lSteph


On 18 mar, 10:11, Henry

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 -


m077664
Le #18926841
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
Publicité
Poster une réponse
Anonyme