Microsoft 365 Modifier un tableau pour reporting

cyrjou9185

XLDnaute Nouveau
Bonjour amis Excelleurs :)

Je me permets de vous solliciter concernant un problème pour le moment insoluble avec mes connaissances en Excel.

Je vous présente le cas:

J'ai un tableau de 2 colonnes et de plus de 30 000 lignes.

- En colonne A j'ai un numéro de dossier au format nombre.
- En colonne B j'ai les maladies dont souffres un panel de clients.

Pour un dossier, je peux avoir plusieurs occurrences qui font autant de lignes que de maladies.

L'idée est de pouvoir transformer/ regrouper pour obtenir le résultat suivant:

1 ligne avec en colonne A le numéro du dossier et sur les autres colonnes autant de colonnes que de maladies.

Pour illustrer,

Départ:

Numéro DossierMaladie
12Asthme
12Obésité
12Épilepsie
14Anxiété
14Insomnie
15Dépression


L'idée est d'avoir ceci:

Numéro de dossierMaladie 1Maladie 2Maladie 3
12AsthmeObésitéEpilepsie
14AnxiétéInsomnie
15Dépression

Pourriez-vous m'indiquer comment obtenir ce résultat en traitant les 30 000 lignes ?

Merci d'avance de votre aide
 

chris

XLDnaute Barbatruc
Bonjour

2 solutions ci-joint :
  1. une à base de formules mais avec autant de lignes cela risque de ramer
  2. l'autre basée sur une requête PowerQuery à actualiser d'un clic droit sur le tableau de résultats quand la source évolue
 

Pièces jointes

  • Mladies.xlsx
    21.2 KB · Affichages: 8
Dernière édition:

alexga78

XLDnaute Occasionnel
Bonsoir à tous,
Juste pour le fun une autre proposition par power query.
Très curieux de connaitre le temps de traitement de 30000 lignes.

PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Maladies"]}[Content],
    ColName = Table.ColumnNames(Source),
    #"Grouped Rows" = Table.Group(Source, ColName{0}, {{ColName{1}, each let
x = List.Distinct(Table.ToList(Table.SelectColumns(_,ColName{1}))) in Text.Combine(x,"-")}, {"Count", each List.Count(List.Distinct(_))}}),
    ColName2 = List.Transform({1..List.Max(#"Grouped Rows"[Count])}, each "Maladie " & Text.From(_)),
    #"Split Column by Delimiter" = Table.SplitColumn(Table.SelectColumns(#"Grouped Rows",ColName), ColName{1}, Splitter.SplitTextByDelimiter("-"), ColName2)
in
    #"Split Column by Delimiter"
 
Dernière édition:

alexga78

XLDnaute Occasionnel
bonsoir à tous,

et par macro ?

VB:
Sub Macro_vs_PQ()

Set dico = CreateObject("Scripting.Dictionary")
Dim t: t = Timer

Application.ScreenUpdating = False


With Sheets("Feuil1")
Dim tablo()
tablo = .Range("A1:B" & .Cells(Rows.Count, 1).End(xlUp).Row).Value

Dim i As Long: For i = LBound(tablo) To UBound(tablo)
dico(tablo(i, 1)) = dico(tablo(i, 1)) & tablo(i, 2) & ","
Next i

.Range("D1").Resize(dico.Count) = Application.Transpose(dico.keys)
.Range("E1").Resize(dico.Count) = Application.Transpose(dico.items)
.Range("E1").Resize(dico.Count).TextToColumns comma:=True

For i = 0 To .Range("D1").CurrentRegion.Columns.Count - 2
.Range("E1").Offset(, i) = "Maladie " & i + 1
Next i

End With

Application.ScreenUpdating = True

 
MsgBox Timer - t
Set dico = Nothing
Erase tablo
End Sub
 
Dernière édition:

Discussions similaires

Réponses
0
Affichages
979
Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
312 207
Messages
2 086 252
Membres
103 166
dernier inscrit
ZAHRAA