Répartir contenu d'une cellule sur des lignes distinctes
Résolu
Fitia
-
Fitia -
Fitia -
Bonjour,
Je cherche répartir les données d'une cellule excel sur plusieurs lignes et non sur plusieurs colonnes comme le fait excel avec la touche convertir.
Mon exemple : X ;Y ; Z
Je voudrais avoir :
X
Y
Z
avec les données des autres colonnes correspondantes dupliquées.
Je sais que c'est possible par macro, mais je ne m'y connais pas. Si vous pouviez me donner les codes que je pourrai adapter
Je vous serai reconnaissante de votre aide,
Sinon mon fichier
http://www.cjoint.com/c/EIskFtDr0Ij
Fitia
Je cherche répartir les données d'une cellule excel sur plusieurs lignes et non sur plusieurs colonnes comme le fait excel avec la touche convertir.
Mon exemple : X ;Y ; Z
Je voudrais avoir :
X
Y
Z
avec les données des autres colonnes correspondantes dupliquées.
Je sais que c'est possible par macro, mais je ne m'y connais pas. Si vous pouviez me donner les codes que je pourrai adapter
Je vous serai reconnaissante de votre aide,
Sinon mon fichier
http://www.cjoint.com/c/EIskFtDr0Ij
Fitia
A voir également:
- Répartir le contenu d'une cellule dans des lignes
- Aller à la ligne dans une cellule excel - Guide
- Fusionner deux cellules excel en gardant le contenu - Guide
- Partager des photos en ligne - Guide
- Excel cellule couleur si condition texte - Guide
- Proteger cellule excel - Guide
4 réponses
Bonjour,
Tu ne peux pas transposer une plage de 9062 lignes sur un fichier *.xls qui ne contient que 256 colonnes.
A+
Tu ne peux pas transposer une plage de 9062 lignes sur un fichier *.xls qui ne contient que 256 colonnes.
A+
<Sub ExtractionNombres()
Dim Tableau() As String
Dim i As Integer
ActiveSheet.Activate
Range("H1").Activate
Do
x = ActiveCell.Value
Tableau = Split(x, ", ")
For i = 0 To UBound(Tableau)
ActiveCell.Value = Tableau(i)
ActiveCell.Offset(rowoffset:=1, columnoffset:=0).Activate
If i <> UBound(Tableau) Then Selection.EntireRow.Insert
Next i
Loop Until ActiveCell = ""
End Sub></code>
voici une partie du code qui marche bien pour répartir les données de la cellule H mais ne duplique pas le contenu des autres colonnes
Dim Tableau() As String
Dim i As Integer
ActiveSheet.Activate
Range("H1").Activate
Do
x = ActiveCell.Value
Tableau = Split(x, ", ")
For i = 0 To UBound(Tableau)
ActiveCell.Value = Tableau(i)
ActiveCell.Offset(rowoffset:=1, columnoffset:=0).Activate
If i <> UBound(Tableau) Then Selection.EntireRow.Insert
Next i
Loop Until ActiveCell = ""
End Sub></code>
voici une partie du code qui marche bien pour répartir les données de la cellule H mais ne duplique pas le contenu des autres colonnes
Je comprends mieux à la lecture du code.
Ta procédure utilise la fonction Split qui renvoie un tableau contenant les sous-chaînes délimitées par le séparateur ",".
Pour placer les éléments du tableau sur plusieurs lignes dans la même cellule, tu peux utiliser le code suivant :
Le traitement est effectué sur toutes les cellules de la ligne 1.
A+
Ta procédure utilise la fonction Split qui renvoie un tableau contenant les sous-chaînes délimitées par le séparateur ",".
Pour placer les éléments du tableau sur plusieurs lignes dans la même cellule, tu peux utiliser le code suivant :
Sub ExtractionNombres()
Dim Tableau() As String, Texte As String
Dim DerCol As Integer, Col As Integer, i As Integer
With Worksheets("JIRA Data")
DerCol = .Cells(1, Columns.Count).End(xlToLeft).Column
For Col = 1 To DerCol
Tableau = Split(.Cells(1, Col).Value, ";")
For i = 0 To UBound(Tableau)
Texte = Texte & Tableau(i) & Chr(10)
Next i
.Cells(1, Col) = Left(Texte, Len(Texte) - 1)
Texte = ""
Next Col
End With
End Sub
Le traitement est effectué sur toutes les cellules de la ligne 1.
A+
Gyrus, merci de ta réponse. J'ai essayé ton code mais il y a eu erreur sur la ligne
.Cells(1, Col) = Left(Texte, Len(Texte) - 1)
Toutefois, j'ai trouvé ce code traîner sur le forum, il marche mais je n'ai pas pu l'adapter à mon fichier de travail :-( je suis vraiment débutante en VBA.
Pourrais-tu m'aider là dessus?
.Cells(1, Col) = Left(Texte, Len(Texte) - 1)
Toutefois, j'ai trouvé ce code traîner sur le forum, il marche mais je n'ai pas pu l'adapter à mon fichier de travail :-( je suis vraiment débutante en VBA.
Pourrais-tu m'aider là dessus?
Sub test()
Dim C As Range, Tabl, Plage As Range, Ligne As Long
With Sheets("Feuil1")
Set Plage = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
End With
With Sheets("Feuil2")
For Each C In Plage
Tabl = Split(C.Offset(, 10), ";")
.[A:C].NumberFormat = "@"
For i = 0 To UBound(Tabl)
Ligne = Ligne + 1
.Range(.Cells(Ligne, 1), .Cells(Ligne, 10)).Value = C.Resize(, 10).Value
.Cells(Ligne, 11) = Tabl(i)
Next i
Next
.[K:K].EntireColumn.AutoFit
End With
End Sub
Dim C As Range, Tabl, Plage As Range, Ligne As Long
With Sheets("Feuil1")
Set Plage = .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp))
End With
With Sheets("Feuil2")
For Each C In Plage
Tabl = Split(C.Offset(, 10), ";")
.[A:C].NumberFormat = "@"
For i = 0 To UBound(Tabl)
Ligne = Ligne + 1
.Range(.Cells(Ligne, 1), .Cells(Ligne, 10)).Value = C.Resize(, 10).Value
.Cells(Ligne, 11) = Tabl(i)
Next i
Next
.[K:K].EntireColumn.AutoFit
End With
End Sub
Avant de glaner d'autres codes, ce serait bien que tu cherches à comprendre ceux qui te sont envoyés.
Tu peux te douter qu'avant d'envoyer une proposition j'ai pris la peine de la tester.
Voici le fichier de test
https://www.cjoint.com/c/EIsoEN816Ly
Par contre, il se peut que tu n'obtiennes pas le résultat attendu.
Par exemple, je ne vois aucun séparateur ";" dans la première ligne. Le traitement parait donc inutile.
A+
Tu peux te douter qu'avant d'envoyer une proposition j'ai pris la peine de la tester.
Voici le fichier de test
https://www.cjoint.com/c/EIsoEN816Ly
Par contre, il se peut que tu n'obtiennes pas le résultat attendu.
Par exemple, je ne vois aucun séparateur ";" dans la première ligne. Le traitement parait donc inutile.
A+
Merci Gyrus pour tes retours, j'ai essayé tes codes. De la journée, je n'ai fais que des tests, mais je n'ai jamais eu de cours de VBA, j'ai toujours utilisé des codes que j'ai trouvé en essayant de les adapter à mes fichiers. Jusqu'à aujourd'hui ça marchait bien.
En effet, j'ai pas obtenu le résultat que j'attendais, au fait les cellules à éclater sont les cellules de la colonne H du fichier, toutes les lignes ne contiennent pas ";" mais c'est quand le point virgule apparaît que le collapse est nécessaire.
En effet, j'ai pas obtenu le résultat que j'attendais, au fait les cellules à éclater sont les cellules de la colonne H du fichier, toutes les lignes ne contiennent pas ";" mais c'est quand le point virgule apparaît que le collapse est nécessaire.
Merci pour ta réponse mais je ne comprends pas ce que tu veux dire.
Ce que je voudrais faire c'est répartir les données d'une seule cellule(cellule de la colonne H) de la colonne sur des lignes distinctes et dupliquer avec les données des colonnes. Et des lignes on a un nombre illimité non?