Critere en fonction d'une colonne power query
Bonjour,
Je souhaiterais savoir si cela est possible d'indiqué 1 à chaque fois q'un critère est vérifier mais dans la 1ère ligne en dessous du critère
Je met en PJ ce que je souhaite, j'ai essayer des petites choses mais cela n'a rien donner
Dans mon exmple je veux qu'a chaque fois le mot "Date" est trouvé alors on met 1 en dessous sinon 0
Merci d'avance
Bonjour,
Merci mais bon j'ai mis un exemple trop simple
Je met en PJ mon exmple complet au moins si il y a une solution je pourrais l'utiliser
Je veux toujours 1 sur la 1ère ligne en dessous du critère "Date" mais adans la colonne fusionné il y a beaucoup plus de donnés
Merci d'avance
Hello,
Je n'ai rien changé à la requête ... Juste adapter la taille de ton tableau
@+
Bonjour à tous !
Une autre approche Power Query ?
let
Source = Excel.CurrentWorkbook(){[Name="tSource"]}[Content],
Traitt = let
a=List.Buffer(Source[Fusionné]),
n=List.Count(a),
r=List.Generate(
()=>[c=0,v=0],
each [c]<n,
each [c=[c]+1, v= if a{c-1}="Date" then 1 else 0],
each [v]
)
in r
in
Traitt
Bonjour JFL,
Ta méthode est parfaite par contre je voudrais mettre ton code dans le miens au niveau de "CRITERE" avec ce que j'ai mis javais presque tout sauf les dâtes
let
dossierPDF=let
S = (Paramètre1 as binary) => let
in
Pdf.Tables(Paramètre1, [Implementation="1.3"])
in S,
Source = Folder.Files(Excel.CurrentWorkbook(){[Name="DOSSIERWATERLOGIC"]}[Content]{0}[Column1]),
#"filtre PDF" = Table.SelectRows(Source, each ([Extension] = ".pdf")),
#"Filtre fichiers" = Table.SelectRows(#"filtre PDF", each [Attributes]?[Hidden]? <> true),
Transform = Table.AddColumn(#"Filtre fichiers", "transf table", each DOSSIERWATERLOGIC([Content])),
#"transf table développé" = Table.ExpandTableColumn(Transform, "transf table", {"Id", "Name", "Kind", "Data"}, {"Id", "Name.1", "Kind", "Data"}),
#"Data développé" = Table.ExpandTableColumn(#"transf table développé", "Data", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16"}),
#"Colonnes fusionnées" = Table.CombineColumns(Table.TransformColumnTypes(#"Data développé", {{"Column13", type text}, {"Column14", type text}, {"Column15", type text}, {"Column16", type text}}, "fr-FR"),{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Fusionné"),
#"Autres colonnes supprimées" = Table.SelectColumns(#"Colonnes fusionnées",{"Name", "Kind", "Fusionné"}),
NBCAR = Table.AddColumn(#"Autres colonnes supprimées", "NBCAR", each Text.Length([Fusionné])),
CRITERE = Table.AddColumn(NBCAR, "CRITERE", each if Text.Contains([Fusionné], "Annulation") then 1 else if (Text.Contains([Fusionné], "L00") and Text.Length([Fusionné]) = 53) then 1 else if (Text.Contains([Fusionné], "L00") and Text.Length([Fusionné]) = 8) then 1 else if (Text.Contains([Fusionné], "CRN") and Text.Length([Fusionné]) = 11) then 1 else if Text.Contains([Fusionné], "Total € TTC") then 1 else if (Text.Contains([Fusionné], "Total EUR TTC") and Text.Length([Fusionné]) > 14) then 1 else if (Text.Contains([Fusionné], "Facture N°") and Text.Length([Fusionné]) = 83) then 1 else if (Text.Contains([Fusionné], "/ 2023") and Text.Length([Fusionné]) < 13) then 1 else 0),
#"Lignes filtrées" = Table.SelectRows(CRITERE, each ([CRITERE] = 1)),
#"Colonnes fusionnées1" = Table.CombineColumns(#"Lignes filtrées",{"Name", "Fusionné"},Combiner.CombineTextByDelimiter("//", QuoteStyle.None),"Fusionné.1"),
#"Doublons supprimés" = Table.Distinct(#"Colonnes fusionnées1", {"Fusionné.1"}),
Traitement = Table.AddColumn(#"Doublons supprimés", "Résultat", each let
a=Text.AfterDelimiter([Fusionné.1],"//")
in if Text.StartsWith (a,"Total") then Text.AfterDelimiter(a,"TTC")
else if Text.StartsWith (a,"Facture") then Text.BetweenDelimiters(a,"N°","sur")
else if Text.StartsWith (a,"BIC") then Text.AfterDelimiter(a,"at:")
else if Text.Contains(a, "Annulation") then "Annulation" & Text.BetweenDelimiters(a, "Annulation", "suite")
else a),
#"Epuration Traitement" = Table.SelectRows(Traitement, each Text.Length([Résultat]) <= 28),
#"Valeur remplacée" = Table.ReplaceValue(#"Epuration Traitement"," ","",Replacer.ReplaceText,{"Résultat"}),
#"Colonne conditionnelle ajoutée" = Table.AddColumn(#"Valeur remplacée", "TRI ETIQUETTE", each if Text.Contains([Résultat], "Annulation") then 53 else if Text.Contains([Résultat], "CRN") then 83 else if Text.Contains([Résultat], "L00") then 53 else [NBCAR]),
#"Fractionner la colonne par délimiteur" = Table.SplitColumn(#"Colonne conditionnelle ajoutée", "Fusionné.1", Splitter.SplitTextByDelimiter(".pdf", QuoteStyle.Csv), {"Fusionné.1.1", "Fusionné.1.2"}),
#"Lignes triées" = Table.Sort(#"Fractionner la colonne par délimiteur",{{"Fusionné.1.1", Order.Ascending}, {"TRI ETIQUETTE", Order.Ascending}}),
Résultat = List.Split(#"Lignes triées"[Résultat],4),
Final = Table.FromRows(Résultat,{"DATE PIECE","MONTANT","CONTRAT","N° FACTURE"}),
#"Doublons supprimés1" = Table.Distinct(Final, {"N° FACTURE"})
in
#"Doublons supprimés1"Merci d'avance pour ton aide
Bonjour à tous de nouveau !
Partant de votre classeur exemple, j'ai ajouté une ligne de commande (Étape "Final") pour intégrer la liste "Critère" à la table source.
Code de la requête (à adapter !) :
let
Source = Excel.CurrentWorkbook(){[Name="tSource"]}[Content],
Traitt = let
a=List.Buffer(Source[Fusionné]),
n=List.Count(a),
r=List.Generate(
()=>[c=0,v=0],
each [c]<n,
each [c=[c]+1, v= if a{c-1}="Date" then 1 else 0],
each [v]
)
in r,
Final = Table.FromColumns( Table.ToColumns(Source) & {Traitt},Table.ColumnNames(Source) & {"Critère"})
in
FinalBonjour JFL,
Merci c'est parfait je vais essayer de comprendre et d'adapter
Merci encore et merci aussi a BAROUTE78 pour ta proposition
Cordialement,