Toutes mes réponses sur les forums

8 sujets de 1 à 8 (sur un total de 8)
  • Auteur
    Messages
  • en réponse à : Variable représentant une requête #95261
    e.chevron
    Participant

    C’est aussi avec cet ouvrage que j’ai débuté il y a quelques mois.
    Je le trouve extrêmement bien fait, j’y ai appris et compris énormément de choses sur PowerQuery, mais je n’avais pas vu ce point.
    Ca m’incite à le reprendre plus en détails, et ceci dit en passant, je le conseille à tout utilisateur de cet outil, qu’il soit débutant ou confirmé.

    Quant au blog, je le découvre grâce à vous et je sens que je vais y passer quelque temps 😉

    Encore merci, en espérant que notre échange puisse aussi profiter à d’autres.

    en réponse à : Variable représentant une requête #95234
    e.chevron
    Participant

    Essayez de modifier un paramètre dans Fichier/Option et paramètres/Option de requête/confidentialité

    Après avoir suivi ce conseil, et sans résultat apparent, j’ai consulté l’aide sur les paramètres de confidentialité et j’ai lu que ceux liés à la source de données (et non à la requête) pouvaient avoir un impact sur le fonctionnement global des requêtes.

    Ceux de mon classeur étaient sur “Aucun”. Je les ai juste revalidés et tout est rentré dans l’ordre.
    J’ai rétabli les paramètres de confidentialité des requêtes sur l’option “Combiner les données en fonction des paramètres de confidentialité de chaque fichier”, ce qui n’a pas altéré le fonctionnement de mes requêtes.

    Je vais donc profiter de votre piste et creuser cette histoire d’options PowerQuery.

    Encore merci à vous pour votre aide précieuse, en espérant pouvoir vous renvoyer l’ascenseur un de ces quatre (en VBA peut-être ?).

    en réponse à : Variable représentant une requête #95233
    e.chevron
    Participant

    Tapez =#shared dans une requête vide et vous pourrez la voir en entier (pas loin de 1000 lignes)

    Wahoooooo !!!!

    Mais pourquoi on ne trouve pas cette astuce partout ?
    C’est juste énorme, ça semble donner accès à toutes les fonctions et à leur aide locale en Français, plus tout le contenu du projet !
    C’est juste énorme !

    Encore un grand merci !

    en réponse à : Variable représentant une requête #95229
    e.chevron
    Participant

    Re-bonjour Laurent.

    En fin de compte, votre solution fonctionne parfaitement dans le code lui-même, mais j’obtiens du coup l’erreur suivante dans plusieurs requêtes du même projet :
    Formula.Firewall : Requête « Calendrier » (étape « Source ») référence Requête « qrySaisie » (étape « Table Triée »), qui ne fait pas partie du texte de sa formule.

    qrySaisie est une requête important et traitant une table locale tableSaisieFacturation. Elle est la requête principale du projet et sert de source ou est rattachée à plusieurs autres.
    L’étape “Table Triée” est la dernière de cette requête.

    Calendrier est le résultat de l’appel à la fonction fxGenererCalendrier, un générateur de calendrier du même type que celui intégré dans Power Pivot sur lequel je travaille et pour lequel vous venez de m’aider.
    Les bornes de cette requête Calendrier se fondent sur les dates de qrySaisie, via cette fonction fxGenererCalendrier.

    Les requêtes dans lesquelles se produit l’erreur sont toutes celles qui se réfèrent à qrySaisie dans leur étape Source.

    L’erreur ne se produit plus et l’ensemble du projet fonctionne à nouveau lorsqu’au lieu de passer en paramètre de la fonction fxGenererCalendrier la requête qrySaisie, je passe sa source tableSaisieFacturation.

    Voici l’extrait du code (dont vous êtes du coup co-auteur) qui permet de passer en paramètre soit une table soit une requête :

            // Connexion à la table/requête source, ou aux tables/requêtes sources s'il y en a 2
            lstSourceDebut = if optSourceEstTypeRequete then 
    							Expression.Evaluate(strNomSource1, #shared)
    						 else
    							Excel.CurrentWorkbook(){[Name=strNomSource1]}[Content],
            lstSourceFin = if optSourceEstTypeRequete then 
    							Expression.Evaluate(strNomSource2, #shared)
    						 else
    							Excel.CurrentWorkbook(){[Name=strNomSource2]}[Content],

    et voici les premières lignes d’une requête dépendante, jusqu’à l’étape qui provoque l’erreur en question :

    Let
        Aujourdhui = DateTime.Date(DateTime.LocalNow()),
    
        Source = qrySaisie,
        #"Fusion qryTva" = Table.NestedJoin(Source, {"Date"}, qryTva, {"Date"}, "qryTva", JoinKind.LeftOuter),

    Note : la requête fusionnée qryTva fonctionne très bien, sans doute parce qu’elle se fonde sur une table locale et non sur qrySaisie.

    D’avance merci pour votre retour 🙂

    en réponse à : Variable représentant une requête #95227
    e.chevron
    Participant

    Bonjour Stéphane, et un grand merci pour cette réponse qui me permet de résoudre mon problème, et que je n’aurais sans doute pas trouvé seul.

    J’avoue cependant, même après lecture de ce que j’ai pu trouver sur le web, avoir du mal à comprendre le #shared dans l’expression…

    Encore un grand merci pour vos réponses toujours pertinentes.

    en réponse à : Passer une étape en paramètre d’une fonction #94224
    e.chevron
    Participant

    C’est bien ce que j’avais cru comprendre.
    En tout cas ça éclaircit bien les choses, et je t’en remercie beaucoup.

    Ca servira sans doute à d’autres 😉

    Bonne continuation.

    en réponse à : Passer une étape en paramètre d’une fonction #94219
    e.chevron
    Participant

    Bonjour Stéphane, et merci pour cette réponse rapide.
    .
    Mon fichier est une usine avec laquelle je gère depuis plus de 10 ans les aspects financier et BPF (Bilan Pédagogique et Financier) de mon activité de formateur.
    Ce n’est pas le côté confidentiel qui me dérange, il ne me faudrait que quelques minutes pour le rendre anonyme, mais son volume et sa complexité.
    J’ai entrepris son évolution par l’utilisation de Power Query et Pivot à la fois pour l’optimiser et m’aguerrir à l’utilisation de ces outils pour lesquels la demande de formations s’amplifie (je suis formateur Office et VBA).
    .
    Bref, mes 30 ans de VBA m’aident pas mal à comprendre M, mais il reste néanmoins quelques syntaxes qui me restent mystérieuses, dont celle que vous utilisez dans votre proposition et qui va directement dans la direction que j’aurais justement adoptée en VBA : récupérer simplement une valeur en fonction d’une variable.
    .
    Du coup, j’ai pu analyser votre proposition et en tirer ceci :

    Soit une requête tableKm :

    • [Trajet] text
    • [Distance] Int64

    La fonction personnalisée suivante me permet bien de récupérer la valeur voulue dans la table via un comportement semblable à celui d’un RECHERCHEX() :

    let fxDistanceTrajet = (CodeTrajet as text) =>
        let
            Resultat = tableKm{[Trajet=CodeTrajet]}[Distance]
        in
            Resultat
    in fxDistanceTrajet

    .
    .
    En revanche, l’utilisation des double-crochets me pose problème, et je ne comprends carrément pas la structure de tablekm{[Depart= [Lieu1]],[Arrivee= [Etape1]] }[Distance]
    .
    En terme de structure, et si je reprends la formule Resultat = tableKm{[Trajet=CodeTrajet]}[Distance], j’entends :
    .
    Résultat = TABLE{[Champ=Paramètre]}[Champ à récupérer]
    .
    Pourriez-vous développer de la même manière la structure de vos deux propositions ?
    .
    En vous remerciant pour votre aide fournie et celle à venir, bien cordialement,
    Eric.

    en réponse à : Impossible de convertir DateTime.LocalNow #94165
    e.chevron
    Participant

    Punaise !!!!!!
    La double parenthèse !!!!

    Bonjour Daniel, et merci pour cette correction.

    Pour celles et ceux qui rencontreraient le même problème et qui n’auraient pas compris la correction :
    DateTime.LocalNow représente la fonction en tant que telle
    DateTime.LocalNow() représente le résultat de ladite fonction

    DateTime.Date(DateTime.LocalNow) ne fonctionne pas car DateTime.Date ne sait pas traiter la fonction, il ne peut traiter que le résultat de la fonction, donc :
    DateTime.Date(DateTime.LocalNow())

    Il en sera évidemment de même pour toute autre fonction : lorsqu’on veut traiter le résultat d’une fonction, il faut obligatoirement l’affubler de ses parenthèses, qu’il y ait ou non quelque-chose à l’intérieur.

    Encore merci Daniel pour m’avoir mis sur la piste.

8 sujets de 1 à 8 (sur un total de 8)