erreur fonction condition langage M

Accueil – Le CFO masqué Forums Power Query erreur fonction condition langage M

Mots-clés : 

  • Ce sujet contient 8 réponses, 3 participants et a été mis à jour pour la dernière fois par deltacta, le il y a 1 année et 7 mois.
9 sujets de 1 à 9 (sur un total de 9)
  • Auteur
    Articles
  • #106492
    deltacta
    Participant

     Bonjour 

    J’ai un problème a le code M je ne suis pas doué pour les Expression de langage M ,mais 

    de base le code est sensé faire et remplacé ma formule dans la colonne E Cellule E2 a E40 

    SI.CONDITIONS(GAUCHE($D2;3)=”sol”;”SOL”;GAUCHE($D2;3)=”PAP”;”PAP”;$D2>0;”GARE”);””)

    dans un exemple de donné comme suite. 

    Emplacement  résultat
    9 GARE
    sol15 SOL
    PAP PAP

    Le code M suivant est censé faire comme la formule mais j’ai une erreur:

    let
    Source = () => let
    Source = Excel.CurrentWorkbook(){[Name=”gareorigine”]}[Content],
    Test = Table.AddColumn(Source,
    “gareN”,
    each let
    deb= Text.Start([Valeur],3),
    rep= try if deb=”SOL” or deb=”PAP” then deb else if Text.Length(deb)>0 then “GARE” else null otherwise null
    in
    rep)
    in
    Test
    in
    Source

    • Ce sujet a été modifié le il y a 1 année et 8 mois par deltacta. Raison: Oops le fichier!
    • Ce sujet a été modifié le il y a 1 année et 8 mois par deltacta. Raison: fichier
    Attachments:
    You must be logged in to view attached files.
    #106497
    Stéphane Lorin
    Participant

    Bonjour
    Je n’ai pas Excel sous la main, je n’ai donc pas ouvert la pièce jointe
    Quelques remarques cependant à la lecture du code

    Je ne vois pas l’intérêt d’une fonction

    Ensuite Power Query est sensible à la casse donc SOL est différent de sol

    Avez vous typé votre colonne en texte ? Si “any” le 9 sera aligné à droite et vous aurez une erreur avec Text.Lenght

    Pourquoi pas un enchaînement de trois if then else ?

    Stéphane

    #106499
    Stéphane Lorin
    Participant

    Bonjour

    Voici une proposition de code M

    let
    Source = Excel.CurrentWorkbook(){[Name=”gareorigine”]}[Content],
    Type_text = Table.TransformColumnTypes(Source,{{“Emplacement”, type text}}),
    Condition = Table.AddColumn(Type_text, “gareN”, each
    if Text.StartsWith([Emplacement],”sol”) then “SOL” else
    if Text.StartsWith([Emplacement],”PAP”) then “PAP” else
    if Text.Length([Emplacement]) > 0 then “GARE” else null)
    in
    Condition

    Stéphane

    #106500
    deltacta
    Participant

    Bonjour
    Merci Pour votre Réponse , pour répondre a votre première question ”Oui a la base toute est sous Format Texte Sol10;10;et PAP. Toute est en TXT.
    JE Joins une copy d’écran
    -Mon code se limite juste a des transformations puis a un chargement dans une feuille nommé gareorigine et au bout de ce tableau j’ai une formule Excel, qui fais le reste.

    Cordialement

    Attachments:
    You must be logged in to view attached files.
    #106507
    Daniel
    Participant

    Bonjour Deltacta, Stephane, Le Forum,

    Si j’ai bien compris les valeurs numériques doivent êtes transformées en “GARE” et les autres valeurs on doit prendre les trois premiers caractères et les transformés en Majuscules, si c’est bien cela le code suivant fera le job.

    Début du code de la requête
    let
    Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
    #”Type modifié” = Table.TransformColumnTypes(Source,{{“Data”, type any}, {“Result visé”, type text}}),
    #”Personnalisée ajoutée” = Table.AddColumn(#”Type modifié”, “Result Power Query”, each if Value.Type([Data])=Number.Type then “GARE” else Text.Upper(Text.Start([Data],3)))
    in
    #”Personnalisée ajoutée”
    Fin du code de la requête

    Cordialement
    Daniel

    #106508
    Daniel
    Participant

    Bonjour Deltacta, Stephane, Le Forum,

    Autre façon de faire, si l’on accepte que les données de la colonne d’origine soient directement modifiées, l’utilisation de la fonction Table.TransformColumns fait aussi le job avec les mêmes fonctions de transformations et de test.

    = Table.TransformColumns( #”Personnalisée ajoutée”, {{“Data”, each if Value.Type(_)=Number.Type then “GARE” else Text.Upper(Text.Start(_,3))}})

    Cordialement
    Daniel

    #106635
    deltacta
    Participant

    Bonjour Daniel et vous tous
    Oui ma formule en E dit si PAP alors PAP ,ci chiffre alors Gare si sol10 alors gauche extrait les 3 première lettre.
    La colonne D est variable.
    Pour l’instant j’ai cette formule en E qui fais le Taf, mais j’aurais aimer trouver la même chose dans PowQY.

    Attachments:
    You must be logged in to view attached files.
    #106727
    Daniel
    Participant

    Bonjour Deltacta, Le Forum,
    Alors puisque j’ai bien compris, ma proposition fait ce que tu souhaites reproduire depuis Excel mais en Power Query.
    Value.Type([Data]) retourne le type de données contenue dans la colonne D, exemple : SOL10 est de type Text, 10 est de type numérique
    Number.Type correspond à une valeur numérique
    donc si la colonne D contient 10 : Value.Type([Data])=Number.Type retourne TRUE, d’ou le IF Value.Type([Data])=Number.Type then “GARE” else (cas des valeurs texte)Text.Upper(Text.Start(_,3))
    Text.Start prend les trois premiers caractères de la chaîne de texte contenu dans la colonne D et Text.Upper les passent en majuscules.
    Espérant avoir pu t’aider à résoudre ton problème.
    Cordialement
    Daniel

    #106730
    deltacta
    Participant

    bonjour a tous.
    Merci pour votre intérêt, j’ai une piste déniché dans un autre forum avec l’aide d’un utilisateur aussi doué que vous.
    voici ce qui m’a été proposé ,qui fonctionne aussi a 99% .
    if Text.Start(Text.Lower([Emplacement]), 3) = “sol” then “SOL”
    else if Text.Start(Text.Lower([Emplacement]), 3) = “pap” then “PAP”
    else if Number.From([Emplacement]) > 0 then “GARE”
    else [Emplacement] .

    Mais il arrive que dans ma colonne D j’ai un type de donné ex:(8et9)ou(8&9)
    je cherche encore une solution.
    avec if texte contain “” et Character FromNumber.
    cordialement.

9 sujets de 1 à 9 (sur un total de 9)
  • Vous devez être connecté pour répondre à ce sujet.