Tableau de synthèse / validation
Bonjour,
Je dois avouer rencontrer quelques difficultés pour le formuler mon besoin (et donc pour vérifier si une solution existe ici ...)...
Voici ce que j'ai en entrée dans un onglet nommé "fournisseurs":
| F1 |
| F2 |
| F3 |
Dans d'autres onglets, j'ai :
Onglet : Société 1
| Activité 1 | F2 |
| Activité 2 | F1, F3 |
| Activité 3 | F3 |
et
Onglet : Société 2
| Activité A | F2 |
| Activité B | F1 |
Le résultat recherché serait :
| Société 1 | Société 2 | |
| F1 | Activité 2 | Activité B |
| F2 | Activité 1 | Activité A |
| F3 | Activité 2, Activité 3 |
Ou si cela est trop complexe ...
| Société 1 | Société 2 | |
| F1 | Vrai | Vrai |
| F2 | Vrai | Vrai |
| F3 | Vrai | Faux |
Une idée ? Une piste ?
Merci pour vos conseils !
Marc
Bonjour
Faisable par PowerQuery intégré à ta version Excel.
Peux-tu joindre un exemple représentatif (notamment noms d'onglets et titres des colonnes)
Bonsoir;
Merci pour votre réponse.
Voici le fichier test demandé.
Je suis intellectuellement très intéressé à découvrir votre proposition.
Merci
Marc
RE
Voici la solution PowerQuery
Tu as le B A BA là http://www.excel-formations.fr/Trucs_astuces/PQ00.php
Si tu ouvres PowerQuery- tu peux voir les étapes de chaque requête à droite avec le détail dans la barre de formule et en cliquant sur le petit rouage
Si tu coinces sur une étape, reposte pour l'explication
Merci ... Mais cela coince. Après quelques heures de recherches infructueuses .... voici mes questions.
1) En réalité, j'ai plusieurs fournisseurs pour chaque activité que j'ai nommée dans nouvel exemple : F_Principal F_secondaire F_Alternatif. Je dois donc, en préalable les fusionner dans une seule liste avec un séparateur (comma) entre chaque valeur .... (j'y parviens, mais avec quelques "comma" superflus !!!
2) Je passe de l'interface "menu" à l'éditeur avec des succès divers .... n'y-a-t-il une approche plus élégante ?
3) Je note dans votre réponse la requête : " #"Fractionner la colonne par délimiteur" = Table.ExpandListColumn(Table.TransformColumns(#"Type modifié", {{"Fournisseurs", Splitter.SplitTextByDelimiter(", ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Fournisseurs"),"
- Ce type de requête est-elle réalisable avec les options disponibles via les menus "power query" ?
- Quelle est la fonction de la section "QuoteStyle.Csv" ?
Merci pour vos bons conseils !
Cordialement,
Marc
Bonjour
Suis pas dispo avant ce soir. Je repasserai + tard
Tout est fait par les options du ruban ou du clic droit : quand tu cliques sur le petit rouage tu retrouves les détails de l'étape
Le découpage des éléments séparés par
, espace
a été fait pour le cas où il y en avait, donc tu peut voir comment c'est paramétré
RE
Attention un tableau structuré ne doit jamais correspondre à des colonnes entières nie de manière générale contenir de lignes vides
Comme il y a 3 colonnes de fournisseurs, sauf à garder leur typologie il faut d'abord décroiser avant de fractionner les cellules qui contiennent plusieurs fournisseurs en autant de lignes
Pour chaque table Société
On sélectionne la colonne Nom de l'activité, clic droit dévipoter les autres colonnes et on modifie en Fournisseur, dans la barre de formule, le titre Valeur
Ensuite on fractionne cette colonne Fournisseur (clic droit) selon le délimiteur (tu n'as pas tes colonnes homogènes, virgule dans un cas et suivi d'un espace dans l'autre...) d'où une étape pour nettoyer les espaces et on ajoute la colonne personnalisée pour identifier la Société source
Ensuite
- l'union de ces 2 tables (Accueil, Nouvelle source, Autre source, Requête vide, Ajouter des requêtes...)
- un tri par Fournisseur, Société, Nom de l'activité
- sélection et Regrouper par (clic droit) Fournisseur, Société en choisissant Toutes les lignes sous le nom de Tabl
- ajout d'une colonne personnalisée, nommée Activités avec la formule
=Table.Column([Tabl],"Nom de l'Activité") qui crée par ligne, la liste correspondante des activités - On déroule la double flèche près du titre Activités, extraire les valeurs et choisir le séparateur
- suppression de la colonne Tabl
- sélection de la colonne Société, Transformer, Pivoter la colonne : colonne de valeurs Activités, ne pas agréger
Sortir par fermer et charger dans, connexion seulement puis, dans le volet de requête clic droit sur la requête de Synthèse, Charger dans, Tableau
Bonjour,
Explications et exemple bien utile pour transposer cette solution vers 'ma' réalité (qui est plus complexe que l'exemple donné). Cela fonctionne reste à essayer de comprendre. Cela est suffisamment motivant que pour se former à power query.
Question complémentaire. L'essentiel des données provient d'un fichier Excel spécifique pour lequel il y a de nombreux contributeurs. Pour inclure une copie des différentes feuilles, j'utilise "= Excel.Workbook(File.ContentscT:\....". Serait-il possible de présenter (ou demander) d'indiquer le nom du fichier source ? Pour l'instant la valeur est encodée "en dur" et j'impose comme préalable un nom et un emplacement W10 fixe alors qu'en réalité chaque utilisateur copiera une version locale de la version publiée sous TEAM et que de nouvelles versions sont produites régulièrement selon les mises à jour des contenus.
En résumé ....
Sous TEAM j'ai : Ficher 1.01; Fichier 1.02; ....
Comme Power Query semble limité dans une utilisation WEB, il est possible d'utiliser la version "poste de travail" d'Excel ... ce qui a comme préalable un téléchargement ...
Mes queries devraient donc pouvoir s'adapter à des fichiers sources dont le nom évolue et des emplacements à la discrétion des utilisateurs
Possible ?
Merci pour votre avis et pour les très utiles conseils !
Marc
Bonjour
Les requêtes que j'ai postées utilisent les tableaux du classeur en cours, donc le nom et le chemin ne sont pas pris en compte.
Si on doit utiliser un classeur externe, il est possible de passer chemin et nom en paramètre (à partir d'une cellule nommée notamment) mais il faut adapter la définition de la source
Exemple avec cellule nommée Fichier : remplacer ce qui est entre "" y compris les "" par
Excel.CurrentWorkbook(){[Name="Fichier"]}[Content][Column1]{0}