Extraction de données

Bonjour,

Ma demande est difficile (pour moi) donc je comprendrai que personne ne se penche dessus mais je tente quand même car malgré plusieurs jours de tentative, je sèche...

J'ai une feuille "nomenclature" qui définit quels composant il faut pour faire 1 produit.
J'ai une feuille "Ordre de fabrication" qui me dit quels sont les produits que je dois réaliser et à quelle date.

Dans ma dernière feuille je souhaite avoir, par date, combien de sous ensemble vont être consommés.

Il faut savoir que les données de la feuille "Ordre de fabrication" vont être mise à jour à chaque fois (copier coller précédée d'une extraction SAP)

J'espère avoir été clair, mon fichier en PJ est un exemple avec les données qu'il me faudrait sur la feuille "consommation".

Merci d'avance si vous vous penchez sur mon cas.

Cordialement

Nathan

Bonjour,

Un début de réponse adaptée ?

Réalisé avec Récupérer et transformer (Power Query) et un TCD (tableau croisé dynamique).

A te relire.

Cdlt.

Bonjour,

Sub conso()
Dim conso As Object, cle As Variant
    NM = Sheets("Nomenclature").Range("A1").CurrentRegion.Value
    OF = Sheets("Ordre de fabrication").Range("A1").CurrentRegion.Value
    Set conso = CreateObject("Scripting.Dictionary")
    For i = 2 To UBound(NM)
        For j = 2 To UBound(OF)
            If NM(i, 1) = OF(j, 1) Then conso(OF(j, 3) * 1 & "|" & NM(i, 3)) = conso(OF(j, 3) * 1 & "|" & NM(i, 3)) + OF(j, 2) * NM(i, 4)
        Next
    Next
    With Sheets("Consommation")
        .Range("A1").CurrentRegion.Offset(1, 0).ClearContents
        i = 1
        For Each cle In conso.keys
            i = i + 1
            .Cells(i, 1) = Split(cle, "|")(0)
            .Cells(i, 2) = Split(cle, "|")(1)
            .Cells(i, 3) = conso(cle)
        Next
    End With
    ActiveWorkbook.Worksheets("Consommation").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Consommation").Sort.SortFields.Add Key:=Range("A2:A" & i), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Consommation").Sort.SortFields.Add Key:=Range("B2:B" & i), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Consommation").Sort
        .SetRange Range("A1:C" & i)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Bonjour Jean-Eric

j'étais en train de travailler sur une solution classique VBA

Wow merci à vous deux. Les deux sont très efficace mais je vais privilégier le VBA au POWER QUERY que je ne manipule quasiment jamais...

Je vais adapter ça à mon fichier,

Mille merci !

Nathan BOUVIER

Merci, mais investis toi dans PowerQ pour l'avenir ...

N'oublie pas de clore le sujet !

Bonjour,

je me permets de reprendre ce post car cela concerne le même fichier.

Dites moi si il faut plutôt que j'en recréer un.

J'ai parfaitement adapté le code à mon fichier cependant je voudrait rajouter l'heure dans l'extraction mais je ne le comprends pas assez pour le modifier, tout ce que j'essaye se termine par un échec.

Je vous remets le fichier de Steelson (que je remercie encore) avec la colonne "heure" rajouté dans la feuille "OF"

Je vous remercie d'avance

Nathan

Sub conso()
Dim conso As Object, cle As Variant
    NM = Sheets("Nomenclature").Range("A1").CurrentRegion.Value
    OF = Sheets("Ordre de fabrication").Range("A1").CurrentRegion.Value
    Set conso = CreateObject("Scripting.Dictionary")
    For i = 2 To UBound(NM)
        For j = 2 To UBound(OF)
            If NM(i, 1) = OF(j, 1) Then conso(OF(j, 3) & "|" & OF(j, 4) & "|" & NM(i, 3)) = conso(OF(j, 3) & "|" & OF(j, 4) & "|" & NM(i, 3)) + OF(j, 2) * NM(i, 4)
        Next
    Next
    With Sheets("Consommation")
        .Range("A1").CurrentRegion.Offset(1, 0).ClearContents
        i = 1
        For Each cle In conso.keys
            i = i + 1
            .Cells(i, 1) = Split(cle, "|")(0)
            .Cells(i, 2) = Split(cle, "|")(1) * 1
            .Cells(i, 3) = Split(cle, "|")(2)
            .Cells(i, 4) = conso(cle)
        Next
    End With

End Sub

Merci bcp je n'aurais jamais trouvé solo.

Cdlt

Nathan

Rechercher des sujets similaires à "extraction donnees"