XL 2016 Créer une matrice de possibilité

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Tom33700

XLDnaute Nouveau
Bonjour,

Je dispose d'un tableau de 10 colonnes.
Chaque colonnes contient les valeurs possibles que la colonne peut contenir. Cela me sert de liste pour la validation des données d'un autre onglet.
Selon les cas, j'ai entre 3 et 4 lignes par colonne.

Comment pourrais-je créer en automatique une matrice regroupant TOUTES les combinaisons possibles? Chaque lignes rerésentant donc une combinaison...

Par avance merci pour vos retours!
 

Pièces jointes

Re-bonjour, bonjour @Cousinhub,

@Tom33700 :
Si tu commences avec PowerQuery, et en complément des infos données par @Cousinhub, tu peux aussi regarder les exemple de problématiques sur excel-formations.fr ainsi que les différentes leçons de Pierre Fauconnier.

@Cousinhub :

Effectivement, il y a une bonne différence de performances... c'est pas forcément évident de comprendre comment fonctionne le moteur de PowerQuery...
On peut néanmoins retrouver un niveau de performances acceptable sur l'exemple du post #4 en ajoutant un buffer au niveau de la source :
PowerQuery:
let
    Source = Table.Buffer(Excel.CurrentWorkbook(){[Name="Tab_ListeValeurs"]}[Content]),
    Combinaisons =
        let
            listColumns = List.Buffer(Table.ColumnNames(Source)),
            MergeValues = Table.FromColumns(List.Transform(listColumns, each {List.RemoveNulls(Table.Column(Source, _))}), listColumns)
        in
            List.Accumulate(List.Reverse(listColumns), MergeValues, (state, current) => Table.ExpandListColumn(state, current))
in
    Combinaisons


Je fais ça (uniquement pour les exemples, afin de fournir un jeu de données) avec cette fonction :
PowerQuery:
let

    EncodeSourceTable = (table as table) as text =>
        let
            TableColumnsNames = Table.ColumnNames(table),
            NewColumnName = Text.Combine(TableColumnsNames) & "_",
            ToLists = Table.RenameColumns(Table.SelectColumns(Table.AddColumn(table, NewColumnName, each Record.ToList(_)), {NewColumnName}), {NewColumnName, "List"})[List],
            BinaryTxt = Binary.ToText(Binary.Compress(Json.FromValue(ToLists), Compression.Deflate), BinaryEncoding.Base64),
            ColumnsTxt = Text.Combine(List.Transform(TableColumnsNames, each _ & " = _t"), ", "),
            TxtRes = "Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText(""" & BinaryTxt & """, BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [" & ColumnsTxt & "])"
        in
            TxtRes

in
    EncodeSourceTable

Elle prend en entrée la table de données à "convertir en json" et retourne la chaine de caractère attendue : Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText(….
Regarde la pièce jointe 1192279
Il suffit alors de la copier pour la mettre dans une étape.

A+
Merci beaucoup à tous les 2 pour ces infos!
Je pense que je vais regarder de plus près cet outil!
Bonne soirée!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
22
Affichages
656
Retour