XL 2016 Plusieurs info dans une même cellule

Maxinet

XLDnaute Nouveau
Bonjour,
Je récupère des données d'un logiciel mais certaines données sont cumulées dans une seule cellule, j'aurai voulu trouver un moyen de remettre ces données sur plusieurs lignes et sur 2 colonnes.
Le fichier ci-joint sera plus parlant
Si vous avez une solution je prends car là je sèche depuis un moment
Merci à tous, j'ai déjà trouvé des tas d'infos sur le site qui est vraiment bien fait 👍
 

Pièces jointes

  • Test.xlsx
    9.5 KB · Affichages: 8
Solution
Bonjour,
avec Powre Query
Voir PJ


2021-01-13_20-22-20.png


Cordialement

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Maxinet

=>Maxinet
Une solution brute de décoffrage
VB:
Sub test()
Dim t, c As Range
Application.ScreenUpdating = False
For Each c In Selection
t = Split(c, vbLf)
Cells(Rows.Count, "B").End(3)(2).Resize(UBound(t) + 1) = Application.Transpose(t)
Erase t
Next
Columns(2).TextToColumns Destination:=Range("B1"), _
        DataType:=xlDelimited, Other:=True, OtherChar:=":", _
        FieldInfo:=Array(Array(1, 1), Array(2, 1))
End Sub
Tesk OK sur le fichier exemple "nettoyé"
J'ai supprimé ce qu'il y à droite de la colonne A avant de lancer la macro.

EDITION:Bonsoir job75
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir Maxinet,

Voyez le fichier joint et cette macro affectée au bouton :
VB:
Sub Resultat()
Dim tablo, resu(), i&, s, j%, x$, n&, k%
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
ReDim resu(1 To Rows.Count, 1 To 2)
For i = 2 To UBound(tablo)
    s = Split(tablo(i, 1), vbLf)
    For j = 0 To UBound(s)
        x = Trim(s(j))
        If x <> "" Then
            n = n + 1
            k = InStr(x & ":", ":")
            resu(n, 1) = Trim(Left(x, k - 1))
            resu(n, 2) = Trim(Mid(x, k + 1))
        End If
Next j, i
'---restitution---
With Sheets("Résultat")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .[A2] '1ère cellule de destination, à adapter
        If n Then .Resize(n, 2) = resu
        .Offset(n).Resize(Rows.Count - n - .Row + 1, 2).ClearContents 'RAZ en dessous
    End With
    .Activate 'facultatif
End With
End Sub
Edit : bonsoir JM, désolé je ne t'avais pas vu, et bonsoir à R@chid aussi :)

A+
 

Pièces jointes

  • Test(1).xlsm
    20.4 KB · Affichages: 4
Dernière édition:

Maxinet

XLDnaute Nouveau
Trop fort !!
Merci Staple1600, merci Job75, et merci R@chid pour votre aide
Les macros fonctionnent nickel, mais je crois que je vais prendre la solution de R@chid
Je connais mal Power Query mais je vais creuser... ça correspond à quoi le #(lf) ?
 

R@chid

XLDnaute Barbatruc
Re,
Il fallait lire : Tu peux expliquer ce qu'est ce #(If), stp?
NB: je suis pas rendu si déjà je pose mal mes questions autour du PQ.
;)

D'autant plus que Maxinet lui aussi cherche la lumière derrière l'if.
;)
Désolé Staple1600, je ne suis pas devant le PC, connecté sur mon téléphone je n'arrive pas à t'expliquer en te faisant des captures d'écran.
Screenshot_20210113-213224_Chrome.jpg



Tu peux insérer un caractère spécial (voir capture que j'ai faite pour Maxinet).
 

Staple1600

XLDnaute Barbatruc
Re

=>R@chid
J'ai compris en testant ta PJ
Et lisant le code M
(voir mots en bleu)
Enrichi (BBcode):
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Fractionner la colonne par délimiteur" = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Produits", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Produits"),
    #"Fractionner la colonne par délimiteur1" = Table.SplitColumn(#"Fractionner la colonne par délimiteur", "Produits", Splitter.SplitTextByDelimiter("
    #"Espaces supprimés" = Table.TransformColumns(#"Fractionner la colonne par délimiteur1",{{"Produits.1", Text.Trim, type text}}),
    #"Type modifié" = Table.TransformColumnTypes(#"Espaces supprimés",{{"Produits.2", Int64.Type}}),
    #"Lignes filtrées" = Table.SelectRows(#"Type modifié", each not Text.StartsWith([Produits.1], "PAGE")),
    #"Colonnes renommées" = Table.RenameColumns(#"Lignes filtrées",{{"Produits.1", "Produits"}, {"Produits.2", "Nombre"}})
in
    #"Colonnes renommées"
 

soan

XLDnaute Barbatruc
Bonsoir,

ah ben c'est pas #(If) mais #(lf) !

avec L minuscule, pas i majuscule.

lf = line feed = nourrir une ligne = nouvelle ligne

c'est le même que pour le couple CR / LF :

carriage return / line feed

codes Ascii correspondants : #13 / #10
(en notation Turbo Pascal)


soan
 

Staple1600

XLDnaute Barbatruc
Bonsoir,
ah ben c'est pas #(If) mais #(lf) !
avec L minuscule, pas i majuscule.

Euh, cela fait plus de 2 heures que Maxinet et moi-même avons remarqué la chose en allant voir dans les entrailles de PowerQuery (qui hélas n'est pas disponible dans Excel 2007)
Et sans oublier
Re

Ah, c'est pas un if mais un If
[ Chr(108) n'est pas Chr(105) ]
Et lf ca me rappelle vbLf
 

Discussions similaires

Haut Bas