Power Query Fonction personnalisée - Texte selon chaîne de caractère

  • Initiateur de la discussion Initiateur de la discussion Jclybi
  • 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 !

Jclybi

XLDnaute Nouveau
Bonjour,
Je souhaiterais créer une fonction personnalisée qui à partir du contenu d'une chaine de caractère remplace le texte.
La colonne A contient le mot VIR, le mot VIREMENT est inscrit dans la nouvelle colonne.

J'ai testé quelque chose mais cela ne fonctionne pas.
Merci pour votre aide.

(MyText as text)=>
let
ListNatureOP=
{
{"VIR","VIREMENT"},
{"PVLT","PRELEVEMENT"},
{"ESPECES","RETRAIT BANCAIRE"},
{"RETRAIT","RETRAIT BANCAIRE"},
}
in
Text.Contains(List.ReplaceMatchingItems(Text.ToList(MyText), ListNatureOP))
 
Bonsoir le fil

@Jclybi
Comme ceci, cela fonctionne
Voir test ci-dessous
la fonction
PowerQuery:
MyText as text) =>
let
    Replacements = [
        VIR = "VIREMENT",
        PVLT = "PRELEVEMENT",
        ESPECES = "RETRAIT BANCAIRE",
        RETRAIT = "RETRAIT BANCAIRE"
    ],
    ReplacedText = Text.Combine(
        List.Transform(
            Text.Split(MyText, " "),
            each Record.FieldOrDefault(Replacements, _, _)
        ), 
        " "
    )
in
    ReplacedText
La requête
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"DATAS", type text}}),
    #"Fonction personnalisée appelée" = Table.AddColumn(#"Type modifié", "Requête1", each Requête1([DATAS]))
in
    #"Fonction personnalisée appelée"
PQ_Remplacer.PNG
 
Bonsoir le fil

@Jclybi
Comme ceci, cela fonctionne
Voir test ci-dessous
la fonction
PowerQuery:
MyText as text) =>
let
    Replacements = [
        VIR = "VIREMENT",
        PVLT = "PRELEVEMENT",
        ESPECES = "RETRAIT BANCAIRE",
        RETRAIT = "RETRAIT BANCAIRE"
    ],
    ReplacedText = Text.Combine(
        List.Transform(
            Text.Split(MyText, " "),
            each Record.FieldOrDefault(Replacements, _, _)
        ),
        " "
    )
in
    ReplacedText
La requête
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"DATAS", type text}}),
    #"Fonction personnalisée appelée" = Table.AddColumn(#"Type modifié", "Requête1", each Requête1([DATAS]))
in
    #"Fonction personnalisée appelée"
Regarde la pièce jointe 1215142
Bonsoir,
Je vous remercie pour votre réponse.
Cependant, je me suis mal exprimé.
Dans la colonne A, mes données peuvent être "VIRT M.X 15/03/2025". Je souhaite un fonction qui analyse cette colonne. et si celle-ci contient VIR OU VIREMENT OU ESPECES, il soit retournée la valeur "VIREMENT", PRELEVEMENT ou ESPECES.

Merci pour votre aide.
Bonne soirée.
 
Re

Test OK avec ces modifs
Code:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau3"]}[Content],
    A = Table.TransformColumnTypes(Source,{{"DONNEES", type text}}),
    B = Table.AddColumn(A, "fx_REMPLACER (2)", each #"fx_REMPLACER (2)"([DONNEES]))
in
    B
la fonction
Code:
(MyText as text) =>
let
    Replacements = [
        VIR = "VIREMENT",
        PVLT = "PRELEVEMENT",
        ESPECES = "RETRAIT BANCAIRE",
        RET = "RETRAIT BANCAIRE"
    ],
    FirstWord = Text.BeforeDelimiter(MyText, " "),
    ReplacedText = if Record.HasFields(Replacements, FirstWord) 
                   then Record.Field(Replacements, FirstWord) 
                   else MyText
in
    ReplacedText
ESSAI2..PNG
 
Re

@Jclybi
Ci-dessous code M pour test [les données de test sont créées par PQ]
( à copier dans une requête vide)
Code:
let
    A = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCvMMUvDVi1AwNI3RNzCO0TcyMDJVitWBSABlIhUMLNFkXIMDXJ1dgxUcnZwVQOJIUgFhPiEKrm7uHp5eEBMNkSSDXEMUfH1dFaKiQNpAOjHMc3FVMDRHMjIWAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [DONNEES_TEST = _t]),
    B = Table.AddColumn(A, "RESULTAT_FINAL", each fx_REMPLACER_B([DONNEES_TEST]))
in
    B
Et la fonction personnalisée, que j'ai nommée fx_REMPLACER_B
Code:
(MyText as text) =>
let
    Replacements = [
        VIR = "VIREMENT",
        PVLT = "PRELEVEMENT",
        ESPECES = "RETRAIT BANCAIRE",
        RET = "RETRAIT BANCAIRE"
    ],
    FirstWord = Text.BeforeDelimiter(MyText, " "),
    ReplacedText = if Record.HasFields(Replacements, FirstWord)
                   then Record.Field(Replacements, FirstWord)
                   else MyText
in
    ReplacedText
Résultat obtenu
ESSAI_3.PNG
 
Bonjour,
Merci beaucoup pour votre aide.
Cependant, quelles fonctions peut-on utiliser pour indiquer si le texte est contenu dans la colonne ?
exemple VIRBAT BATIMENT => contient VIR donc cela renvoie VIREMENT (cf fichier d'exemple).

Cordialement,
 

Pièces jointes

Bonjour Jclybi, Staple, le forum,

Tu peux tester avec cette onction :
PowerQuery:
(t as text) as nullable text => List.Accumulate({{"PVLT", "PRELEVEMENT"}, {"VIR", "VIREMENT"}, {"ESPECES", "RETRAIT BANCAIRE"}, {"RET", "RETRAIT BANCAIRE"}}, null, (s, c) => s ?? (if Text.Contains(t, c{0}) then c{1} else null))

A+
 
- 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