Toutes mes réponses sur les forums
-
AuteurMessages
-
e.chevron
ParticipantC’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.
e.chevron
ParticipantEssayez 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 ?).
e.chevron
ParticipantTapez =#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 !
e.chevron
ParticipantRe-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 🙂
e.chevron
ParticipantBonjour 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.
e.chevron
ParticipantC’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.
e.chevron
ParticipantBonjour 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.e.chevron
ParticipantPunaise !!!!!!
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 fonctionDateTime.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.
-
AuteurMessages