Toutes mes réponses sur les forums
-
AuteurMessages
-
Daniel
ParticipantBonjour Daz971, Le Forum,
Je suppose que tu as du essayer de les additionner avec une simple addition, mais sans plus d’informations sur tes mesures, le contexte ainsi que le modèle de données, il est difficile de te donner une réponse.
Cordialement
Daniel14 juillet 2022 à 22 h 59 min en réponse à : Grouper par identifiant unique avec colonne dates différentes #105739Daniel
ParticipantBonjour Judith, JBruneau, Le Forum,
Avec la requête Power Query ci-dessous on arrive directement au résultat du TCD. Il reste cependant un problème de formatage des dates si plus de 4 rendez-vous possibles.
Voici la requête :
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
#”Type modifié” = Table.TransformColumnTypes(Source,{{“ID”, type text}, {“Date”, type date}}),
#”Lignes groupées” = Table.Group(#”Type modifié”, {“ID”}, {{“AllData”, each _, type table [ID=nullable text, Date=nullable date]}}),
Personnalisé1 = Table.AddColumn(#”Lignes groupées”, “SerialNumber”, each Table.AddIndexColumn([AllData],”SNum”,1,1)),
#”SerialNumber développé” = Table.ExpandTableColumn(Personnalisé1, “SerialNumber”, {“Date”, “SNum”}, {“Date”, “SNum”}),
#”Colonnes supprimées” = Table.RemoveColumns(#”SerialNumber développé”,{“AllData”}),
#”Colonne dynamique” = Table.Pivot(Table.TransformColumnTypes(#”Colonnes supprimées”, {{“SNum”, type text}}, “fr-FR”), List.Distinct(Table.TransformColumnTypes(#”Colonnes supprimées”, {{“SNum”, type text}}, “fr-FR”)[SNum]), “SNum”, “Date”),
#”Type modifié1″ = Table.TransformColumnTypes(#”Colonne dynamique”,{{“1”, type date}, {“2”, type date}, {“3”, type date}, {“4″, type date}})
in
#”Type modifié1”
Cordialement
DanielDaniel
ParticipantBonjour Chantal, Le Forum,
Avez-vous essayé d’ouvrir l’éditeur avancé et de copier le code correspondant aux différentes étapes de votre requête puis de créer une nouvelle requête vide et de coller le code précédemment copié en ouvrant là aussi l’éditeur avancé. Je ne sais pas si cela réglera votre problème, je suis aussi passé de Excel 2016 à Office 365 sans aucun soucis dans mes différentes requêtes.
Cordialement
Daniel3 juin 2022 à 12 h 46 min en réponse à : Power Query – Retrouver la date max selon un critère #104572Daniel
ParticipantBonjour Christophe.mery, Le Forum,
En utilisant la fonction Power query Table.Group, cela réponds à ta demande, voir exempel ci-dessous. Attention, l’étape #”Colonnes supprimées” ne doit pas être reproduite dans ton cas car la colonne Date max n’existe pas dans tes données et comme je suis parti de l’exemple fourni, j’ai oublié de la supprimer avant de faire la requête.
Exemple de requête
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
#”Type modifié” = Table.TransformColumnTypes(Source,{{“ID”, type text}, {“Date”, type datetime}, {“Date max”, type datetime}}),
#”Colonnes supprimées” = Table.RemoveColumns(#”Type modifié”,{“Date max”}),
#”Lignes groupées” = Table.Group(#”Colonnes supprimées”, {“ID”}, {{“Date Max”, each List.Max([Date]), type nullable datetime}, {“AllData”, each _, type table [ID=nullable text, Date=nullable datetime]}}),
#”AllData développé” = Table.ExpandTableColumn(#”Lignes groupées”, “AllData”, {“Date”}, {“Date”}),
#”Colonnes permutées” = Table.ReorderColumns(#”AllData développé”,{“ID”, “Date”, “Date Max”}),
#”Type modifié1″ = Table.TransformColumnTypes(#”Colonnes permutées”,{{“Date”, type date}, {“Date Max”, type date}})
in
#”Type modifié1″En espérant avoir pu apporter une réponse à ta demande ou tout au moins te mettre sur une piste de recherche.
Cordialement
Daniel9 mai 2022 à 11 h 33 min en réponse à : Promouvoir ligne en en-tête autre que la ligne 1 et + #103833Daniel
ParticipantBonjour Patrice, Stéphane,le Forum,
Effectivement, ta réponse répond bien au besoin, exprimé, mais je me pose des questions au sujet d’éventuelles autres analyses qui pourraient survenir.
Exemple : nombre de demandes traitées / nombre de demandes reçues
nombre de demandes reçues pour un type de demande versus le nombre de demandes reçues
Il y a sûrement d’autres exemples possibles, aussi je ne sais pas comment je pourrais répondre à ces questions, alors qu’avoir une colonne contenant (ce que j’ai appelé Produit ou Demandes), devrait permettre d’apporter une réponse aux deux exemples cités.
Pour ma culture personnelle, est-ce possible d’y répondre facilement avec des mesures DAX (que ce soit avec Power BI ou Power Pivot), les deux utilisant le langage DAX. N’étant p)as un spécialiste, je ne dis pas que ma méthode est la meilleure loin de là, on peut certainement faire mieux, mais là je pense que je saurais répondre à mes deux exemples (pas fait de tests, donc à voir)
Stéphane, je me permet de garder ta réponse au cas ou je me retrouverais dans une situation analogue, chaque jour m’éclaire un peu plus sur les différentes possibilités de résoudre un problème.Daniel
8 mai 2022 à 18 h 30 min en réponse à : Promouvoir ligne en en-tête autre que la ligne 1 et + #103824Daniel
ParticipantBonjour Patrice, le Forum,
Je te livre une piste éventuelle qui se rapproche de ce que tu souhaites obtenir.
Je suis parti de la table excel, mais je pense qu’en changeant la source cela devrait fonctionnerlet
Source = Excel.CurrentWorkbook(){[Name=”Campus”]}[Content],
#”Table transposée” = Table.Transpose(Source),
#”En-têtes promus” = Table.PromoteHeaders(#”Table transposée”, [PromoteAllScalars=true]),
#”Rempli vers le bas” = Table.FillDown(#”En-têtes promus”,{“Column1″}),
#”Colonnes renommées” = Table.RenameColumns(#”Rempli vers le bas”,{{“Column1”, “Produit”}, {“Column2”, “Traitement”}}),
#”Supprimer le tableau croisé dynamique des autres colonnes” = Table.UnpivotOtherColumns(#”Colonnes renommées”, {“Produit”, “Traitement”}, “Attribut”, “Valeur”),
#”Colonnes renommées1″ = Table.RenameColumns(#”Supprimer le tableau croisé dynamique des autres colonnes”,{{“Attribut”, “Période”}}),
#”Type modifié2″ = Table.TransformColumnTypes(#”Colonnes renommées1″,{{“Période”, Int64.Type}, {“Valeur”, Int64.Type}})
in
#”Type modifié2″Voici le résultat obtenu (cf pièces jointes)
Espérant que cela t’aidera ç résoudre ton souci
Cordialement
DanielAttachments:
You must be logged in to view attached files.Daniel
ParticipantBonjour s.experton, Le Forum,
Par une mesure comme celle-ci, cela devrait faire le job.
MoyPArticle:=VAR PrixAchat = CALCULATE(sumx(PmPpararticle;PmPpararticle[Quantités]*PmPpararticle[Prix d'achat])) VAR TotQte=CALCULATE(sum(PmPpararticle[Quantités])) RETURN DIVIDE(PrixAchat;TotQte;BLANK())
Il suffit de mettre dans la matrice les produits et cette mesure.
Cordialement
Daniel13 décembre 2021 à 15 h 10 min en réponse à : Créer une table de dimension à partir de plusieurs tables de faits #99825Daniel
ParticipantBonjour lucie.delbarre, Le Forum,
Comme ça et selon ce que j’ai compris, j’aurais tendance à créer ma table de dimension en faisant référence aux requêtes des tables de faits (il peut être possible que les numéros de circulation ne soient pas tous repris dans chacune des tables de faits). Ensuite sur base des ces requêtes, je les ajouterais les unes avec les autres pour n’en faire qu’une (avec toutes les colonnes nécessaires pour décrire les données). Bien entendu on supprimera tous les doublons dans l’avant dernière étape car la dernière sera le type des données.
Espérant vous avoir donné une piste.
Cordialement
Daniel29 novembre 2021 à 12 h 12 min en réponse à : Comment insérer une année variable dans un nom de colonne filtrée? #99523Daniel
ParticipantBonjour Guy, Stéphane, Le Forum,
Content de voir que ton soucis de changement d’année est maintenant réglé.
Bravo à Stéphane pour sa solution, cela m’a permis d’apprendre quelque chose mais surtout de régler élégamment le soucis de Guy et cela est plus important.
Cordialement
Daniel28 novembre 2021 à 17 h 06 min en réponse à : Comment insérer une année variable dans un nom de colonne filtrée? #99501Daniel
ParticipantBonjour Guy92, Le Forum,
Je pense qu’il y a certainement mieux à faire, mais voici ce que je propose
1 – Renommer Foyer 2021 en Foyer
2 – Filtrer sur la colonne Foyer pour exclure les valeurs zéro
3 – Renommer la colonne Foyer en Foyer 2021
Bien entendu à la place de 2021, on se servira du ParamAnneeNlet Source = Excel.CurrentWorkbook(){[Name="Tbl_TypeImmo"]}[Content], #"Type modifié" = Table.TransformColumnTypes(Source,{{"Foyer "& ParamAnneeN, Int64.Type}, {"Logement "&ParamAnneeN, Int64.Type}, {"Garage "& ParamAnneeN, Int64.Type}}), #"Colonnes supprimées" = Table.RemoveColumns(#"Type modifié",{"Logement "& ParamAnneeN, "Garage "& ParamAnneeN}), #"Colonnes renommées" = Table.RenameColumns(#"Colonnes supprimées",{{"Foyer " & ParamAnneeN, "Foyer"}}), #"Lignes filtrées1" = Table.SelectRows(#"Colonnes renommées", each ([Foyer] <> 0)), #"Colonnes renommées1" = Table.RenameColumns(#"Lignes filtrées1",{{"Foyer", "Foyer " & ParamAnneeN}}) in #"Colonnes renommées1"
En espérant que cela te donnera des pistes de solutions.
Cordialement
DanielDaniel
ParticipantBonjour Pierrot1234, Le Forum,
Mesure à essayer et à tester, il y a surement plus simple, mais elle donne le résultat escomptée
Mesure = VAR Test = IF( SELECTEDVALUE('Table'[SOUSCATEGORIE])="Divers", 1,0) RETURN SWITCH(Test, 1,CALCULATE(SUM('Table'[MONTANT]),ALL('Table'[SOUSCATEGORIE])), 0,CALCULATE(SUM('Table'[MONTANT])))
Cordialement
DanielDaniel
ParticipantBonjour Fabien, Le Forum,
Voilà ce que je propose comme solution
1 – Création d’une requête par source de données (Internet, Devis, Commande). Dans chaque requête, ajouter une colonne Origine info ayant pour valeur Internet ou Devis ou Commande en fonction de la source de données.let Source = Excel.CurrentWorkbook(){[Name="tDevis"]}[Content], AjoutColonneOrigineInfo = Table.AddColumn(Source, "Origine info", each "Devis"), ModificationTypeDonnees = Table.TransformColumnTypes(AjoutColonneOrigineInfo,{{"Prospect", type text}, {"Produit", type text}, {"Origine info", type text}}) in ModificationTypeDonnees
2 – Menu Accueil, ajouter des requêtes, ajouter les requêtes comme étant nouvelles et choisir les trois requêtes créées précédemment.
3 – Sur la nouvelle requête, cliquer sur les colonnes Prospect et Produit en garant la touche Ctrl appuyée et dans le menu Transformer cliquez sur Regrouper par. Dans la fenêtre, donner un nom à la colonne et choisir comme Opération, Toutes les lignes, cela va créer une nouvelle colonne sous forme de table, en cliquant sur une ligne dans la zone blanche on peut voir en bas de l’écran, les différentes valeurs.
4 – C’est là que cela se complique un peu, vous devez avoir dans la barre de formule, la formule de regroupement que nous allons modifier
Table.Group(Source, {"Prospect", "Produit"}, {{"Nombre", each _, type table [Prospect=nullable text, Produit=nullable text, Origine info=nullable text]}})
doit devenir= Table.Group(#"Lignes groupées", {"Prospect", "Produit"}, {{"Origine", each Text.Combine([Origine info],", ")}})
La table est devenue une colonne reprenant les différentes occurrences pour chaque couple Prospect/Produit.
5 – J’ai préféré garder cette colonne comme telle et en la dupliquant on va pouvoir extraire la dernière occurrence ce qui devrait répondre à votre demande. Cliquez sur la colonne Origine et avec le clic droit choisir Duplication de la colonne
6 – Cliquez sur la nouvelle colonne, par le menu Transformer et l’option Extraire, texte après le délimiteur, vous allez saisir le délimiteur séparant chaque occurrence (dans mon exemple c’est la virgule) et choisir Options avancées A partir de la fin de l’entrée, vous obtiendrez la dernière occurrence (exemple : Internet, Devis, Commande donnera Commande)
= Table.TransformColumns(DuplicationColonneOrigine, {{"Origine - Copier", each (Text.AfterDelimiter(_, <strong>", "</strong>, {0, RelativePosition.FromEnd})), type text}})
Voici le code de la requête :
let Source = Table.Combine({tInternet, tDevis, tCommandes}), GrouperLesLignes = Table.Group(Source, {"Prospect", "Produit"}, {{"Origine", each Text.Combine([Origine info],", ")}}), DuplicationColonneOrigine = Table.DuplicateColumn(GrouperLesLignes, "Origine", "Origine - Copier"), GarderDernièreOccurence = Table.TransformColumns(DuplicationColonneOrigine, {{"Origine - Copier", each (Text.AfterDelimiter(_, ", ", {0, RelativePosition.FromEnd})), type text}}), RenommerColonnes = Table.RenameColumns(GarderDernièreOccurence,{{"Origine - Copier", "Origine info"}}) in RenommerColonnes
Il y a certainement d’autres solutions, mais j’espère vous avoir apporté une solution ou à tout le moins une piste afin de résoudre votre demande
Cordialement
DanielDaniel
ParticipantBonjour Katy, Pierre, le Forum,
Si votre but est de protéger certaines cellules (par défaut les cellules sont toutes protégées, dès que l’on active la protection) mais aussi permettre l’insertion de nouvelles lignes, cela est possible en :
1 – Sélectionnant les cellules servant à la saisie des données et par un clic droit, Format de cellules, onglet Protection, décocher la case Vérouillée
2 – Ensuite par le menu Révision, Protéger la feuille, il suffira de cocher la case Insérer des lignes, et éventuellement de mettre un mot de passe.En espérant avoir pu vous aider.
Cordialement
DanielDaniel
ParticipantBonjour,
La ligne en question n’est là que pour écrire EOF dans la dernière ligne et permettre ainsi de supprimer toutes les lignes inutiles qui ont été générées par les lignes situées avant Sheets(“Metadata”).select.
Appuyer sur la touche F5, cela devrait déclancher la suite du code et régler le soucis pour les fois suivantes, j’ai fait l’essai sur ma version et cela fonctionne.
CordialementDaniel
ParticipantBonjour,
Pas certain que cela soit possible de retrouver les metadonnées d’un fichier Excel ou Word avec Power query, par contre avec une macro Excel, on peut lister les propriétés d’un fichier et les mettre dans un fichier excel et ensuite établir une fusion entre ce fichier et celui contenant les données à importer, cela permettra d’ajouter l’auteur par exemple. Le classeur doit contenir deux feuilles de calcul nommées respectivement “Metadata” et “Files”, la feuille Files contiendra deux résultat de requêtes Power query (voir ci après)Requêtes Power query
Excellet Source = Folder.Files(FolderPath), FilteredRows = Table.SelectRows(Source, each Text.EndsWith([Extension], "xlsx") or Text.EndsWith([Extension], "xls")), RemovedColumns = Table.RemoveColumns(FilteredRows,{"Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Content"}), ReorderedColumns = Table.ReorderColumns(RemovedColumns,{"Folder Path", "Name"}) in ReorderedColumns
Word
let Source = Folder.Files(FolderPath), FilteredRows = Table.SelectRows(Source, each Text.EndsWith([Extension], "docx") or Text.EndsWith([Extension], "doc")), RemovedColumns = Table.RemoveColumns(FilteredRows,{"Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Content"}), ReorderedColumns = Table.ReorderColumns(RemovedColumns,{"Folder Path", "Name"}) in ReorderedColumns
FolderPath est un paramètre contenant le nom du dossier contenant les fichiers à traiter.
Macro pour des fichiers ExcelSub ExtractMetaDataExcelDoc() Dim objExcel As Object Dim strProperty As Object Dim ts As ListObject, intCptLine As Integer, tsRow As Integer, tsCol As Integer Dim wb As Workbook, wsFiles As Worksheet, wsMetaData As Worksheet Application.ScreenUpdating = False 'Application.ScreenUpdating = True Set wb = ActiveWorkbook Set wsFiles = wb.Sheets("Files") Set wsMetaData = wb.Sheets("Metadata") wsFiles.Activate intCptLine = 2 Set ts = Sheets("Files").ListObjects("ExcelFiles") tsRow = ts.Range.Row + 1 tsCol = ts.Range.Column Cells(ts.Range.Row + 1, ts.Range.Column).Select While wsFiles.Cells(tsRow, tsCol).Value <> "" Set objExcel = Workbooks.Open(wsFiles.Cells(tsRow, tsCol).Value & wsFiles.Cells(tsRow, tsCol).Offset(0, 1).Value, False) wsMetaData.Activate Cells(intCptLine, 1).Select 'If Range("A1").End(xlDown).Row = 2 Then Range("A1").End(xlDown).Activate Else Range("A1").End(xlDown).Offset(1, 0).Activate For Each strProperty In objExcel.BuiltinDocumentProperties On Error Resume Next ActiveCell.Value = objExcel.Name If strProperty.Name = "Author" Or strProperty.Name = "Auteur" Then ActiveCell.Offset(0, 1).Value = strProperty.Name ActiveCell.Offset(0, 2).Value = strProperty.Value ActiveCell.Offset(0, 3).Value = Now() intCptLine = intCptLine + 1 Exit For End If ActiveCell.Offset(1, 0).Value.Select Next Workbooks(objExcel.Name).Close False wsFiles.Activate tsRow = tsRow + 1 Cells(tsRow, tsCol).Select Wend Set strProperty = Nothing Sheets("Metadata").Select Range("A1").End(xlDown).Offset(1, 2).Value = "EOF" Range("C1").Select While Selection <> "EOF" Selection.Offset(1, 0).Select If Selection = "" Then Selection.EntireRow.Delete Selection.Offset(-1, 0).Select End If Wend Selection.EntireRow.Delete Range("A1").Select Application.ScreenUpdating = True End Sub
Macro pour des fichiers Word
Sub ExtractMetaDataWordDoc() Dim objWord As Object Dim strProperty As Object Dim objDoc As Object Application.ScreenUpdating = False Set objWord = CreateObject("Word.Application") objWord.Visible = False Sheets("Files").Activate Range("a1").Offset(1, 0).Select While Selection.Value <> "" Set objDoc = objWord.Documents.Open(Selection & Selection.Offset(0, 1).Value) Sheets("Metadata").Activate If Range("A1").End(xlDown).Row = 2 Then Range("A1").End(xlDown).Activate Else Range("A1").End(xlDown).Offset(1, 0).Activate For Each strProperty In objDoc.BuiltinDocumentProperties On Error Resume Next Selection = objDoc.Name If strProperty.Name = "Author" Or strProperty.Name = "Auteur" Then Selection.Offset(0, 1) = strProperty.Name Selection.Offset(0, 2) = strProperty.Value Selection.Offset(0, 3) = Now() End If Selection.Offset(1, 0).Select Next objDoc.Close Sheets("Files").Activate Selection.Offset(1, 0).Select Wend objWord.Quit Set objWord = Nothing Set objDoc = Nothing Set strProperty = Nothing Sheets("Metadata").Select Range("A1").End(xlDown).Offset(1, 2).Value = "EOF" Range("C1").Select While Selection <> "EOF" Selection.Offset(1, 0).Select If Selection = "" Then Selection.EntireRow.Delete Selection.Offset(-1, 0).Select End If Wend Selection.EntireRow.Delete Range("A1").Select Application.ScreenUpdating = True End Sub
En espérant que cela vous aidera à résoudre votre problème.
Cordialement -
AuteurMessages