Découper un fichier CFONB120 - Concaténer plusieurs lignes en 1

Bonjour,

Je voudrais découper un fichier CFONB120

04Alpha
05Commande15
05Client263
04Béta
05Commande1825
05Client1666
05Adresse 1 impasse
05Brest
04Gamma
05Commande155454304

L'enregistrement commence toujours par 04, et les lignes complémentaires par 05, sachant que le nombre de ligne avec 05 est variable

Résultat attendu : Comment faire pour avoir un seule ligne qui concatène chaque enregistrement sous un fichier Excel ?

1ère lignes = Alapha [Espace] Commande15 [espace] Client263

2ème ligen = Béta [Espace] Commande1825 [Espace] Client166 [Espace] Adresse 1 impasse [Espace] Brest

3ème ligne = Gamma [Espace] Commande1554543

Soit en VBA soit avec power pivot ou autre

Merci pour votre aide

Bonjour à tous,

Tu n'as pas donné ta version d'excel ?

une version en 365

54concat.xlsx (9.78 Ko)

Crdlmt

TIP TOP,

merci DjiDji59430

Des jours de galères enfin résolu

Cdt

DjiDji59430,

Je comprend maintenant pourquoi tu demandais la version d'excel.

Moi c'est 2019, et la fonction FILTRE ne marche qu'avec 365.

Tu aurais une autre solution ?

Cdt

Re

10concat.xlsx (9.84 Ko)

Bonjour Breizh22p, DjiDji59430, le forum,

Un essai par macro......mais il y a certainement mieux à faire...

Option Explicit

Sub Bouton1_Cliquer()
 Dim i%, lig%, derlig%
 Dim plage As Range, c As Range
 Dim rep As String

 Application.ScreenUpdating = False

  With Sheets("Feuil1")
    derlig = .Range("A" & Rows.Count).End(xlUp).Row
   .Range("B:B").ClearContents
    For i = 2 To derlig
      If Left(.Range("A" & i), 2) = "04" Then
       lig = i
        Do While Left(.Range("A" & lig + 1), 2) <> "04" And lig <= derlig
         lig = lig + 1
        Loop
         Set plage = .Range("A" & i & ":A" & lig)
          For Each c In plage
           If c.Value <> "" Then rep = rep & " " & Mid(c.Value, 3)
          Next c
        .Range("B" & .Range("B" & Rows.Count).End(xlUp).Row + 1) = rep
       rep = ""
      End If
    Next i
   .Columns(2).AutoFit
  End With
End Sub
3breizh22p.xlsm (20.05 Ko)

Cordialement,

Bonjour,

Une solution Power Query à adapter !?

Cdlt.

13concat.xlsx (20.04 Ko)
capture d ecran 2021 04 26 091711

Bonjour a tous,

Merci pour votre aide. J'ai tester toutes les solutions, elles fonctionnent toutes, avec une petite préférences pour celle de Jean-Eric.

Cdt

Bonjour,

Jean-Eric, je n'arrive pas à à refaire ta ligne "Regroupées", cette fonction n'existe apparemment pas

Ton champs [Text] coorespond à [Entete] chez moi. J'arrive juste à compter le nombre de ligne.

Comment dois-je opérer ?

let

Source = Csv.Document(File.Contents("F:\REL-DU210617."),[Delimiter=":", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.None]),
#"Premières lignes supprimées" = Table.Skip(Source,1),
#"Fractionner la colonne par position" = Table.SplitColumn(#"Premières lignes supprimées", "Column1", Splitter.SplitTextByPositions({0, 2, 7, 11, 16, 19, 20, 21, 32, 34, 40, 42, 48, 79, 81, 88, 89, 90, 104}), {"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.6", "Column1.7", "Column1.8", "Ops", "Date", "Column1.11", "Column1.12", "Entete", "Column1.14", "Column1.15", "Column1.16", "Column1.17", "Column1.18", "Column1.19"}),
#"Colonne conditionnelle ajoutée" = Table.AddColumn(#"Fractionner la colonne par position", "04 ou 05", each if [Column1.1] = "04" then [Entete] else null),
#"Rempli vers le bas" = Table.FillDown(#"Colonne conditionnelle ajoutée",{"04 ou 05"}),
#"Lignes groupées" = Table.Group(#"Rempli vers le bas", {"04 ou 05"}, {{"Test", each Table.RowCount(_), Int64.Type}})
in
#"Lignes groupées"

Cdt

Bonjour,

Tu ne peux pas faire avec le GUI (interface graphique, ruban).

Une fois le regroupement effectué, il faut modifier manuellement la formule (dans la barre de formule !).

Soit :

#"Lignes groupées" = Table.Group(#"Rempli vers le bas", {"04 ou 05"}, {{"Test", each Text.Combine[([Entete]," "), type text}})

Cdlt.

Rechercher des sujets similaires à "decouper fichier cfonb120 concatener lignes"