Toutes mes réponses sur les forums

15 sujets de 106 à 120 (sur un total de 121)
  • Auteur
    Messages
  • en réponse à : Additionner des mesures #105769
    Daniel
    Participant

    Bonjour 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
    Daniel

    en réponse à : Grouper par identifiant unique avec colonne dates différentes #105739
    Daniel
    Participant

    Bonjour 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
    Daniel

    en réponse à : requête créée avec une version antérieure #105380
    Daniel
    Participant

    Bonjour 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
    Daniel

    en réponse à : Power Query – Retrouver la date max selon un critère #104572
    Daniel
    Participant

    Bonjour 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
    Daniel

    en réponse à : Promouvoir ligne en en-tête autre que la ligne 1 et + #103833
    Daniel
    Participant

    Bonjour 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

    en réponse à : Promouvoir ligne en en-tête autre que la ligne 1 et + #103824
    Daniel
    Participant

    Bonjour 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 fonctionner

    let
    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
    Daniel

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Prix moyen pondéré #99917
    Daniel
    Participant

    Bonjour 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
    Daniel

    en réponse à : Créer une table de dimension à partir de plusieurs tables de faits #99825
    Daniel
    Participant

    Bonjour 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
    Daniel

    en réponse à : Comment insérer une année variable dans un nom de colonne filtrée? #99523
    Daniel
    Participant

    Bonjour 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
    Daniel

    en réponse à : Comment insérer une année variable dans un nom de colonne filtrée? #99501
    Daniel
    Participant

    Bonjour 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 ParamAnneeN

    
    let
        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
    Daniel

    en réponse à : Mesure #99189
    Daniel
    Participant

    Bonjour 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
    Daniel

    en réponse à : Construire une table à partir d’autres tables #99184
    Daniel
    Participant

    Bonjour 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
    Daniel

    en réponse à : Protéger une partie d’un tableau #99130
    Daniel
    Participant

    Bonjour 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
    Daniel

    en réponse à : AJOUTER LE NOM DE L’AUTEUR D’UN FICHIER #98805
    Daniel
    Participant

    Bonjour,

    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.
    Cordialement

    en réponse à : AJOUTER LE NOM DE L’AUTEUR D’UN FICHIER #98675
    Daniel
    Participant

    Bonjour,
    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
    Excel

    let
        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 Excel

    
    Sub 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

15 sujets de 106 à 120 (sur un total de 121)