Mise à plat d'un "semblant" de TCD

Bonjour,

J'ai un problème que je voudrais vous soumettre car je n'arrive pas, malgré mes essais, à aboutir.

On me fournit des fichiers excel qui ressemblent à des tableaux croisés dynamiques mais qui n'en sont pas. En fait des tableaux avec abscisses et ordonnées et des valeurs qui croisent chaque jonction.

Je voudrais remettre ces tableaux sous forme de liste à plat, càd un tableau de 3 colonnes avec en 1ère colonne la liste des ordonnées, en deuxième colonne la liste des abscisses et en troisième colonne la valeur au croisement de chaque cas.

J'ai fait quelques tests avec la fonction de collage spécial / transposer les valeurs mais lorsque j'essaye d'automatiser la chose je suis très vite arrêté par mes maigres connaissances. En effet, les fichiers qu'on me fournit n'ont que rarement le même nombre de lignes et de colonnes.

Je me dis donc qu'il me faudrait une macro qui sache récupérer le nombre de lignes à traiter pour faire une première boucle puis que dans cette boucle on ait le nombre de colonnes et que pour chaque ligne on aille copier avec transposition le libellé de la colonne puis les valeurs contenues dans chaque cellule de la ligne en cours. Facile à expliquer mais je ne sais absolument pas faire.

J'ai créé un petit exemple très simple dans un fichier excel que je joins (seulement 3 lignes et 3 colonnes dans le tableau) et j'ai mis en dessous le résultat escompté que j'ai fait... manuellement.

Les tableaux que j'ai à traiter font parfois plusieurs centaines de lignes pour 15 à 30 colonnes... une automatisation me rendrait vraiment beaucoup service.

Si certains d'entre vous pensent pouvoir m'aider, je les en remercie par avance.

Bien à vous,

Eric

21tcd-vs-flat.xlsx (8.99 Ko)

Bonjour

Cela se fait en 4 clics avec PowerQuery intégré à Excel

Si la source évolue, actualiser par Données, Actualiser Tout

Principe ici : http://www.excel-formations.fr/Trucs_astuces/PQ02.php

Bonjour Chris78,

Mais c'est fantastique !!! quelle quiche de ne pas avoir trouvé cet outil plus tôt...

... je cours essayer et je reviens avec le résultat de mes tests.

Merci, merci, merci

Bon, ce n'est pas gagné. Power Query n'est pas installé sur ma machine et vu que c'est pro je ne peux pas le faire moi-même...

Dur dur...

Eric

Bonjour,

Si ta version Excel est bien 2016, Power Query est natif.

Voir Données, Récupérer et transformer (des données).

Cdlt.

Non, version excel 2010... j'ai demandé une installation.

J'attends une réponse.

merci pour vos aides.

Eric

Bonjour,

en attendant, si ça peut te permettre d'avancer :

Sub aplatir()
    Dim datas, result(), lig As Long, col As Long, lig2 As Long
    datas = [A2].CurrentRegion.Value
    ReDim result(1 To (UBound(datas, 1) - 1) * (UBound(datas, 2) - 1) + 1, 1 To 3)
    result(1, 1) = Split(datas(1, 1), " / ")(0)
    result(1, 2) = Split(datas(1, 1), " / ")(1)
    result(1, 3) = "Valeur"
    lig2 = 1
    For lig = 2 To UBound(datas)
        For col = 2 To UBound(datas, 2)
            lig2 = lig2 + 1
            result(lig2, 1) = datas(lig, 1)
            result(lig2, 2) = datas(1, col)
            result(lig2, 3) = datas(lig, col)
        Next col
    Next lig
    With Sheets("Feuil2")
        .[A1].Resize(UBound(result), 3) = result
        .Select
    End With
End Sub

Le titre des 2 premières colonnes est récupéré dans A2, avec " / " les séparant.

Résultat dans Feuil2 existante.

eric

9tcd-vs-flat.xlsm (19.44 Ko)

Bonjour,

J'ai réussi à me faire installer PowerQuery sur ma machine. Le résultat est parfait avec 4 clics

Un grand merci à Eriiic qui, comme il le dit, m'a permis vraiment d'avancer avec quelques lignes de code

Les deux méthodes fonctionnent je n'ai plus qu'à me décider sur celle que je vais conserver.

Encore merci à vous

Eric

Rechercher des sujets similaires à "mise plat semblant tcd"