XL 2016 Plusieurs info dans une même cellule

  • Initiateur de la discussion Initiateur de la discussion Maxinet
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Solution
Bonjour,
avec Powre Query
Voir PJ


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


Cordialement
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:
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

Dernière édition:
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) ?
 
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).
 
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"
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour