Somme prod d'une ligne combinée avec recherchev

Bonjour,

Cela fait qq semaines que je bute sur ce fichier, je désespère !

J'aimerai pouvoir afficher dans la feuille resultat le cout de chaque requete (comme expliqué dans la feuille resultat, le détail du calcul)

Fichier excel exemple en PJ, il faut bien imaginer que demain je peux avoir 10 comme 100 types de données donc tout doit être modulable...

Il me faudrait donc un bouton avec une macro qui permette de faire ses calculs.

Je reste disponible pour suivre cela,

42classeurt.xlsx (15.25 Ko)

Bonjour,

Une proposition à étudier.

Cdlt.

45classeurt.xlsm (37.05 Ko)

Bonjour,

Merci de votre reponse,

Cependant, après avoir testé la macro et en ajoutant mes "vrais données", cela bloque sur la ligne de code :

rCell.Resize(UBound(Arr, 2), 6).Value = Application.Transpose(Arr) , j'ai une erreur de type 13

NB: J'ai environ 1000 requetes(en alphanumériques) et une 40ene de produits .

Re,

Tu as joint un classeur. Est ce que ma proposition répond à la question posée ?

La question est fermée et la réponse est oui ou non.

Maintenant, si dans ton vrai classeur, avec tes vraies données, cela ne fonctionne pas , cela signifie que tu as mal formulé ta demande !

Et comment fait on pour la suite ?

Cdlt.

Effectivement la réponse répond à la question , je suis d'accord avec toi.

Pour éviter de rendre le fichier trop lourd et fastidieux, je l'avais simplifier au maximum comme tu l'as pu le constater .

Je peux mettre donc en PJ mon "vrai" fichier ?

Re,

Tu as une alternative.

Tu adaptes la procédure à tes besoins ou tu joins un nouveau fichier représentatif de tes vraies données.

Mais je pense que tu vas opter pour le second choix.

Cdlt.

Bonjour @ tous,

une autre par formule matricielle et champs dynamiques nommés dans le gestionnaire de noms.

Voir PJ

24louyotj.xlsx (15.92 Ko)

@ + +

Bonjour,

Merci pour ton retour Rachid, mais je ne peux faire avec les formules avancées, j'ai déjà essayé le support est trop lourd .

En PJ mon fichier Jean Eric, effectivement je choisis la deuxième option.

Fichier ici :

Bonjour,

Ci-dessous, la procédure modifiée.

Cdlt.

Option Explicit
Option Private Module

Public Sub ConsolidateData()
Dim wb As Workbook
Dim ws As Worksheet, wsCost As Worksheet, wsResult As Worksheet
Dim tblResult As ListObject
Dim tbl, Arr(), V
Dim I As Long, J As Long, k As Long, lCol As Long
Dim rngCost As Range, rCell As Range

    Application.ScreenUpdating = False

    Set wb = ActiveWorkbook
    Set wsCost = wb.Worksheets("Coût")
    Set rngCost = wsCost.ListObjects(1).Range
    Set wsResult = wb.Worksheets("Résultat")
    Set tblResult = wsResult.ListObjects(1)

    With tblResult
        If Not .DataBodyRange Is Nothing Then _
           .DataBodyRange.Delete
        Set rCell = .InsertRowRange.Cells(1)
    End With

    k = 0: lCol = 2

    For Each ws In wb.Worksheets
        If ws.Name <> wsCost.Name And ws.Name <> wsResult.Name Then
            tbl = ws.ListObjects(1).Range.Value
            For I = 2 To UBound(tbl, 1)
                For J = 2 To UBound(tbl, 2)
                    If tbl(I, J) <> vbNullString Then
                        ReDim Preserve Arr(6, k + 1)
                        Arr(0, k) = ws.Name     'Nom feuille
                        Arr(1, k) = tbl(I, 1)   'Requête
                        Arr(2, k) = tbl(1, J)   'Produit
                        Arr(3, k) = tbl(I, J)   'Quantité
                        V = Application.WorksheetFunction. _
                            VLookup(tbl(1, J), rngCost, lCol, 0)   'Coût
                        If IsError(V) Then
                            Arr(4, k) = "": Arr(5, k) = ""
                        Else
                            Arr(4, k) = V: Arr(5, k) = tbl(I, J) * V    'Coût total
                        End If
                        k = k + 1
                    End If
                Next J
            Next I
        End If
        lCol = lCol + 1
    Next ws

    rCell.Resize(UBound(Arr, 2), 6).Value = Application.Transpose(Arr)
    wsResult.PivotTables(1).PivotCache.Refresh

    Erase Arr()
    Set rCell = Nothing: Set rngCost = Nothing
    Set tblResult = Nothing
    Set wsResult = Nothing: Set wsCost = Nothing
    Set wb = Nothing

End Sub

Merci Jean Eric,

Cela fonctionnne parfaitement

Rechercher des sujets similaires à "somme prod ligne combinee recherchev"