Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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"
 
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
 
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
 
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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…