Extraire des données d'une liste

Bonjour,

J'ai un tableau qui constitue une base de données.
Dans ce tableau, j'ai plusieurs colonnes dont "Catégorie" et "Valeur".
Chaque ligne a donc une catégorie et une valeur associées.
Les catégories apparaissent dans un ordre aléatoire.

J'aimerais extraire toutes les valeurs associées à une catégorie.
L'objectif final étant d'avoir un tableau qui résume les valeurs par catégorie et de voir l'évolution des données. Avec un nuage de points par exemple.

Il y a quelques temps, pour un problème similaire, j'avais mixé INDEX(), EQUIV() et DECALER() en travaillant en deux colonnes : la valeur du décalage d'un côté (colonnes J à M dans l'exemple) et l'extraction de la valeur de l'autre (colonnes E à H dans l'exemple).

Dans le cas présent, je dois traiter beaucoup plus de catégories. J'aimerais donc savoir s'il y a un moyen plus simple de récupérer ces valeurs.
L'idée est entre autre de se défaire de la hauteur du décalage (30 dans l'exemple).

j'en profite pour demander :
- quand on utilise une colonne de TCD dans une formule, comment fait-on pour la figer (comme "$" pour une case) ?
Lorsque j'étends la formule vers la droite, la formule change de colonne du TCD. Souvent j'utilise INDIRECT("Tableau[Colonne]") mais cette solution n'est pas idéale.
- dans l'exemple, avez-vous une idée pour tracer le nuage de points par catégorie ?

Merci

7classeur11.xlsx (12.55 Ko)

Bonjour,

Avec Excel 365 :

K11 : =TRANSPOSE(TRIER(UNIQUE(Tableau1[Type])))
K12 : =FILTRE(Tableau1[Valeur];Tableau1[Type]=K11;"")

Cdlt

10classeur11.xlsx (14.51 Ko)

Bonjour à tous,

@Jean-Eric, Par curiosité, sauriez-vous s'il est possible d'obtenir un résultat avec PowerQuery ? Je pensais mais je n'y arrive pas .. Je m'arrête au regroupement avec création de table et pivot mais après impossible de dérouler les tables.

cdlt,

Re,

Un exemple Power Query.

Cdlt.

8classeur11.xlsx (22.41 Ko)
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    GroupedRows = Table.Group(Source, {"Type"}, {{"GroupedRows", each _, type table [Type=text, Valeur=number]}}),
    AddedIndex = Table.AddColumn(GroupedRows, "Personnalisé", each Table.AddIndexColumn([GroupedRows],"Index",1,1,Int64.Type)),
    ExpandedData = Table.ExpandTableColumn(AddedIndex, "Personnalisé", {"Valeur", "Index"}, {"Valeur", "Index"}),
    SortedRows = Table.Sort(ExpandedData,{{"Type", Order.Ascending}}),
    RemovedColumns1 = Table.RemoveColumns(SortedRows,{"GroupedRows"}),
    PivotedColumn = Table.Pivot(RemovedColumns1, List.Distinct(RemovedColumns1[Type]), "Type", "Valeur"),
    RemovedColumns2 = Table.RemoveColumns(PivotedColumn,{"Index"})
in
    RemovedColumns2

Bonsoir,

Merci beaucoup ! Toujours cette fameuse fonction INDEX qui me pose tant de soucis car je ne sais jamais à quel moment l'utiliser grrrr.

Il va falloir que j'aille l'étudier.

Passez une bonne soirée !

Merci, je ne connaissais pas ces fonctions.
Avez-vous une astuce pour figer la colonne du TCD dans la formule ?

Re,

Je ne comprends pas !?

Avez-vous une astuce pour figer la colonne du TCD dans la formule ?
=FILTRE(Tableau1[Valeur];Tableau1[Type]=K11;"")

En mettant cette formule en K12 et en la tirant vers la droite, les colonnes "Tableau1[valeur]" et "Tableau1[Type]" se décalent.
Je cherche l'équivalent du "$" (par exemple $A:$A pour éviter le décalage vers la droite dans une formule).
Avec INDIRECT("Tableau1[Valeur]") ça fonctionne mais ce n'est pas flexible.

Re,

Fais un copier-coller !?

Cdlt.

Pas d'autre solution donc..
Merci

Bonsoir,

Si. Par POWER QUERY comme l'a démontré Jean-Eric dans ce que je lui ai demandé, peut être plus simple à utiliser.

Bonne soirée.

Je ne connais pas Power Query, mais c'est noté. Merci.

Bizarre, j'ai dû passer à côté d'un truc vraiment important parce que ça m'a paru trop simple de reproduire ce tableau avec un nombre de Types variables.

5classeur11.xlsm (26.41 Ko)

Bonjour à tous,

Voici un essai tardif pour faire un peu la promotion du dictionary où on part d'un tableau structuré nommé liste pour en obtenir un nouveau :

Sub transpo()

Set dico = CreateObject("Scripting.dictionary")
With Range("Liste")
    ReDim temp(1 To .Rows.Count + 1, 1 To .Rows.Count) 'nv tableau (dimensions maximales)
    t = .Value
    For i = 1 To .Rows.Count
        If Not dico.exists(t(i, 1)) Then 'si la clé n'existe pas cad si le type n'a jamais été rencontré
            n = n + 1 'nouvelle colonne
            dico(t(i, 1)) = n 'clé créée et associée au numero de colonne
            temp(1, n) = t(i, 1) 'nvl entete (de la nouvelle colonne)
        End If
        Col = dico(t(i, 1)) 'colonne de destination (reprise à partir de la clé)
        For j = 2 To UBound(t) + 1
            If temp(j, Col) = "" Then 'dès qu'un item est vide
                temp(j, Col) = t(i, 2) 'on le remplit
                maxdim = Application.max(maxdim, j) 'on met à jour notre dimension maximale (ligne) pour le collage à venir
                Exit For
            End If
        Next j
    Next i
End With
With Range("K3").Resize(maxdim, n)
    .Value = temp
    .Parent.ListObjects.Add(Source:=.Cells).Name = "Carre"
End With

End Sub
3classeur11.xlsm (26.44 Ko)

PS : Pour bloquer les références aux colonnes d'un tableau, il faut faire ceci :

=FILTRE(Tableau1[[Valeur]:[Valeur]];Tableau1[[Type]:[Type]]=K11;"")

Cdlt,

Rechercher des sujets similaires à "extraire donnees liste"