Consolidation de tableau

Bonjour,

Je me posais une question, j'ai un tableau qui pour une date donnée et un milestone récupère quel item est concerné.

J'ai utilisé une fonction DECALER pour arriver à avoir le résultat, sauf, que je voulais savoir si il y avait possibilité de venir retranscrire dans la même cellule tous les ITEMs concernés.

Je vous joint le tableau pour mieux comprendre.

Merci d'avance pour vos idées.

19consolidation.xlsx (10.39 Ko)

Bonjour,

il est beaucoup plus facile de consolider si les dates sont mises en colonne A et les données juste à droite

Date-Milestones (en numérique)

P.

Je vais tester sur la feuille Matrice. Par contre sur la feuille milestones je peux pas la changer, je reçois les données brut tel quel...

Mais c'est vrai que ça peux changer la perspective de calcul merci de l'infos, je me repenche dessus

bonjour

salut Patrick

ça ressemble à un TCD au départ et à un TCD à l'arrivée

1/ on dépivote le 1er onglet (données récupérer des données à partir d'un tableau, puis dépivoter les colonnes)

2 /on crée un TCD (note que j'additionne les nombres

15consolidation.xlsx (23.78 Ko)

Hello JMD et les autres...

je pensais que tu l'aurais fait en vba, mais finalement oui le tcd est la solution la plus rapide à concevoir et je n'y ai pas pensé dans cette présentation de départ

Par contre je n'ai pas compris ta phrase:

1/ on dépivote le 1er onglet (données récupérer des données à partir d'un tableau, puis dépivoter les colonnes)

P.

re

Patrick,

partant d'un tableau qui ressemble à un TC, on crée une vraie table de données

magique

un tuto

https://www.youtube.com/watch?v=Kbu5RkUo6-k

ou bien dans Power Query, on peut aussi sélectionner les colonnes à ne pas pivoter et clic droit "dépivoter les autres colonnes"

Ok

Merci, je me coucherai moins idiot encore

J'ai 2016 mais pas encore installé ce truc qui semble être très puissant

P.

re

Power Query doit être enseigné après les TCD et avant les formules du genre =A1+A2

c'est bien plus puissant que tu ne le penses

j'en apprends tous les jours

On est bien d'accord

La même chose était faisable en VBA mais il faut tout écrire et ce n'est pas dynamique comme PQ ...

C'est rapide, faut un peu essayer, mais vu le nombre de tableaux mal conçus qu'on nous montre ici, la chose va servir encore ..

P.

re

VBA peut tout faire

quand on programme en ayant l'image d'un papier à cases lorsqu'on regarde une feuille Excel, alors on pense VBA. Mais Excel possède tellement de fonctions qui permettent de faire de l'informatique sans singer le papier. Et bien plus puissantes.

il FAUT enseigner, sur le forum comme ailleurs, les Tableaux, les TCD et Power Query et Power BI. Ce sont des fonctions d'Excel (ou des extensions si tu veux). Et non des palliatifs.

bon dév.

Bonjour Patrick et jmd,

Je suis plus parti sur du VBA car plus simple pour automatiser les mises à jours et celà me permet de mieux exploiter les résultats.

Le truc il me manque juste une loop, en gros je loop sur les colonnes de la feuille Matrice, sur les lignes de cette même feuille. Le truc faudrait que entre ces deux loop boucler sur les colonnes de la feuilles milestones.

Je test plein de forme de loop mais je dois avoir un bug de vision...

Il est possible d'imbriquer plusieurs loop sur des feuilles différerntes pour faire correspondre les recherches ?

'--------------------------------------------------------------------------------------------------------------------------
'Variable
'--------------------------------------------------------------------------------------------------------------------------
Dim i As Integer
Dim Z As Integer
Dim Y As Integer
Dim x As Integer
Dim DrLigne As Integer
'--------------------------------------------------------------------------------------------------------------------------
'If milestones are compliant with date, fill the tab and merge result
'--------------------------------------------------------------------------------------------------------------------------
    DrLigne = Sheets("Milestones").Range("A" & Rows.Count).End(xlUp).Row
    With Sheets("Matrice")
    For i = 2 To 5 'boucle sur les colonnes B à E
        For Z = 2 To DrLigne 'boucle sur les lignes de 2 à la derniere ref inscrite dans la colonne B
            If Sheets("Milestones").Cells(Z, i) = Sheets("Matrice").Cells(1, Z) Then
                For Y = 1 To 1 Step 2 'boucle sur les lignes 2 et 4
                    For x = 2 To 5 'boucle sur les colonnes de B à E
                        If Sheets("Milestones").Cells(1, i) = Sheets("Matrice").Cells(Y, x) Then
                            If Sheets("Matrice").Cells(Y + 1, x) <> "" Then
                                Sheets("Matrice").Cells(Y + 1, x) = Sheets("Milestones").Cells(Y + 1, x) & Chr(10) & Sheets("Milestones").Cells(Z, 1)
                            Else
                                Sheets("Matrice").Cells(Y + 1, x) = Sheets("Milestones").Cells(Z, 1)
                            End If
                        End If
                    Next x
                Next Y
            End If
        Next Z
    Next i
    End With

Merci encore pour vos retours

13consolidation.zip (16.33 Ko)

Bonjour,

pas trop le temps mais je pense qu'il faudrait travailler avec un tableau et ou dictionnaire , mais dans ton code ceci est bizarre:

For Y = 1 To 1 Step 2 'boucle sur les lignes 2 et 4 ----> 1 to 1 ?

P.

Bonsoir à tous,

A tester :

Option Explicit
Sub ventile()
Dim a, i As Long, j As Long, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    a = Sheets("Milestones").[a1].CurrentRegion.Value2
    For j = 2 To UBound(a, 2)
        For i = 2 To UBound(a, 1)
            If Not IsEmpty(a(i, j)) Then
                If Not dico.exists(a(1, j)) Then
                    Set dico(a(1, j)) = CreateObject("Scripting.Dictionary")
                End If
                dico(a(1, j))(a(i, j)) = dico(a(1, j))(a(i, j)) & _
                                         IIf(dico(a(1, j))(a(i, j)) <> "", "|", "") & a(i, 1)
            End If
        Next
    Next
    Application.ScreenUpdating = False
    With Sheets("matrice").[a1].CurrentRegion
        With .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
            .ClearContents
            .NumberFormat = "@"
        End With
        For i = 2 To .Rows.Count
            If dico.exists(.Cells(i, 1).Value) Then
                For j = 2 To .Columns.Count
                    If dico(.Cells(i, 1).Value).exists(.Cells(1, j).Value2) Then
                        .Cells(i, j).Value = dico(.Cells(i, 1).Value)(.Cells(1, j).Value2)
                    End If
                Next
            End If
        Next
    End With
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub

Le code réaménagé, c'est mieux ainsi :

Option Explicit
Sub ventile()
Dim a, i As Long, j As Long, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    a = Sheets("Milestones").[a1].CurrentRegion.Value2
    For j = 2 To UBound(a, 2)
        Set dico(a(1, j)) = CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            If Not IsEmpty(a(i, j)) Then
                dico(a(1, j))(a(i, j)) = dico(a(1, j))(a(i, j)) & _
                        IIf(dico(a(1, j))(a(i, j)) <> "", Chr(10), "") & a(i, 1)
            End If
        Next
    Next
    Application.ScreenUpdating = False
    With Sheets("matrice").[a1].CurrentRegion
        With .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
            .ClearContents
            .NumberFormat = "@"
        End With
        For i = 2 To .Rows.Count
            If dico.exists(.Cells(i, 1).Value) Then
                If dico.Item(.Cells(i, 1).Value).Count > 0 Then
                    For j = 2 To .Columns.Count
                        If dico(.Cells(i, 1).Value).exists(.Cells(1, j).Value2) Then
                            .Cells(i, j).Value = dico(.Cells(i, 1).Value)(.Cells(1, j).Value2)
                        End If
                    Next
                End If
            End If
        Next
    End With
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub

klin89

Hello tous , Klin89

Je pensais , Klin89, que tu allais regrouper ça en 3 colonnes Item-Attribut-Date pour permettre ensuite de faire un TCD

P.

Bonjour Klin89 et Patrick,

J'étais partie sur une imbrication de loop qui me donne rien, mon problème c'est la gestion de feuille.

Merci beaucoup de votre aide, ça marche nickel

Rechercher des sujets similaires à "consolidation tableau"