Recapitulatifs commandes fiches recettes VBA

Bonjour à tous,

Je travail en cuisine pour un traiteur, nous avons plusieur fiches techniques et j aimerais facilité les commandes en pouvant regrouper en une seule feuilles tous les produits à commander dont nous avons besoin.

Je n'utilise pas les TDC ou consolidations "normale" car toutes nos fiches techniques change à chaques fois donc je n'utilise pas les memes produits.

Je me lance dans mon explixcation, j'espere etre assez clair:

j'aurais aimer si possible que lorsque je clique sur le bouton qui ce trouve dans l'onglet "commandes" que tous les produits qui sont sur les fiches techniques du fichier se rajoute sur le tableau

et que les produits identiques ne soient que sur une ligne et que leur quantités s'additionnent.

j'ai besoin aussi des codes produits et fournisseur apparaissent aussi.

Les nom des onglets et leur nombres changent tout le temps aussi.

Dans le fichier joint seul les parties en vert sont utiles, se sont celles que j ai besoin de retrouver dans le tableau de commande.

J'esperes avoir ete asser clair dans ma demande et que quelqu'un pourra venir a mon aide.

Bonne journée a tous.

Nico

18test-nico.xlsx (71.71 Ko)

Bonjour Nico alias Kalhua

Voici en retour le fichier avec une petite moulinette pour faire le job (je pense)

Le code se moque des noms des onglets, il faut juste que "COMMANDES" reste du même nom ou il faudra le changer dans le code

Mon code est commenter, comme toujours chez moi, j'espère que ce sera compréhensible

A+

Bonsoir

Une autre proposition dans une autre logique que celle de BrunoM45 que je salue

Les deux propositions ne fonctionnent que si à part la feuille "Commades" toutes les autre feuille sont des "recettes"

11test-nico-v1.xlsm (84.45 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Option Explicit

Dim f As Worksheet, tablo, tabloR(), dico As Object
Dim i&, j&, k&, derln&, derlnR&, derCol&, qte!

Sub BoutonPourRecapitulatif()

    Set dico = CreateObject("Scripting.Dictionary")
    derlnR = 0
    For Each f In Worksheets
        If f.Name <> ActiveSheet.Name And f.Range("A16").Value = "Code E.A.N." Then
            derlnR = derlnR + f.Range("E" & Rows.Count).End(xlUp).Row
        End If
    Next f

    derCol = Cells(10, Columns.Count).End(xlToLeft).Column
    ReDim tabloR(1 To derlnR, 1 To Cells(10, Columns.Count).End(xlToLeft).Column)

    k = 0
    For Each f In Worksheets
        If f.Name <> ActiveSheet.Name And f.Range("A16").Value = "Code E.A.N." Then
            derln = f.Range("E" & Rows.Count).End(xlUp).Row
            tablo = f.Range(f.Cells(17, 1), f.Cells(derln, derCol))
            For i = 1 To UBound(tablo, 1)
                If tablo(i, 1) <> "" Then
                    If dico.exists(tablo(i, 1)) Then
                        qte = IIf(tablo(i, UBound(tablo, 2)) = "", 0, tablo(i, UBound(tablo, 2)))
                        dico(tablo(i, 1)) = dico(tablo(i, 1)) + qte
                    Else
                        dico(tablo(i, 1)) = tablo(i, UBound(tablo, 2))
                        For j = 1 To derCol - 1
                            tabloR(k + 1, j) = tablo(i, j)
                        Next j
                        k = k + 1
                    End If
                End If
            Next i
        End If
        Erase tablo
    Next f
    Range("A11").CurrentRegion.Offset(1, 0).ClearContents
    Range("A11").Resize(UBound(tabloR, 1), UBound(tabloR, 2)) = tabloR
    Range("G11").Resize(dico.Count, 1) = Application.Transpose(dico.items)
End Sub

Bye !

Bonjour messieurs,

yal_excel et GMB vos codes fonctionne très bien, un grand merci pour ce retour rapide ca va m'être d'une grande aide.

BrunoM45 je ne comprend pas trop mais lorsque je clique sur le bouton toutes les données disparaisse et des chiffres apparaissent tout en haut de la page.

capture2

Petite question, le nombre de feuilles dans le classeur, n'est pas important, je veux dire si j 'ai une vingtaine de feuille ca fonctionnera pareil?

Tant que les feuilles autres que commandes sont des feuilles recettes ça marche. S'il devait y avoir d'autres feuilles il faudrait adopter une convention de nommage pour s'y retrouver mais ça ne serait pas un gros problème.

Non il n' y aura que des des recettes dans ces classeurs.

Encore un grand merci à tous les trois pour l'aide, vous aller me faire gagner un temps fou car selon certains évènement je peux avoir jusqu'à une 25 30 recettes différentes et il fallait que je les pointe une par une et tout reporter à la main pour chaque produits.

Je vais passer le post en résolu, mais je voudrais bien comprendre pourquoi le code de BrunoM45 ne fonctionne pas chez moi .

Bonne journée

Bonjour à tous

@Kalhua, désolé, j'ai laissé une coquille de dernière minute (pas de test) sur cette ligne

If dLig > 10 Then ShtCde.Range("A1:G" & dLig).ClearContents

Il ne faut pas effacer à partir de A1, mais de A11

A+

SUPER!!! Effectivement ca fonctionne mieux

Je me répète mais encore une fois un grand merci.

Bonjour à tous,

On peut demander des explications sur le code ici ?

D'abord c'est quoi ce dc ou dico

Set dico = CreateObject("Scripting.Dictionary")

Ensuite c'est quoi tablo (i, 1) et tablo (i,2). Pour moi ce sont les entêtes des 2 premiéres colonnes.

           tablo = f.Range(f.Cells(17, 1), f.Cells(derln, derCol))
            For i = 1 To UBound(tablo, 1)
                If tablo(i, 1) <> "" Then
                    If dico.exists(tablo(i, 1)) Then
                        qte = IIf(tablo(i, UBound(tablo, 2)) = "", 0, tablo(i, UBound(tablo, 2)))
                        dico(tablo(i, 1)) = dico(tablo(i, 1)) + qte
                    Else
                        dico(tablo(i, 1)) = tablo(i, UBound(tablo, 2))

Merci

@Fronck

Bonjour

Quand on écrit dans une macro :

tablo = f.Range(f.Cells(17, 1), f.Cells(derln, derCol))

on met dans une variable dite justement ‘’Variable tableau’’, l’ensemble des connées que contient une plage de cellules sur une feuille de calcul.

L’intérêt est qu’ensuite, en se référant à ce tableau et non plus aux cellules de la plage qui lui correspond, le code s’effectue beaucoup plus vite puisque les données sont toutes stockées en mémoire vive de l’ordi et il n’y a plus la perte de temps due à la lecture ou l'écriture sur la feuille de calcul.

Set dico = CreateObject("Scripting.Dictionary")

Cette instruction permet de créer un dictionnaire qu’on peut nommer ''dico'' ou du nom que l’on veut.

Dans les instructions suivantes, on va mettre dans ce dictionnaire des données (clés) qui auront la particularité d’y être uniques, même si on y ajoute des données qui y existent déjà. C’est particulièrement intéressant pour obtenir une liste sans doublon.

A noter que la fonction ‘’Dictionnaire’’ n’existe pas sur les version Excel pour MAC

OK ?

Bye !

Ok, et tablo(i,1) et tablo(i,2) ?

Tablo(i,1) represente la valeur qu’il y a à la ligne i colonne 1 dans la plage que represente la variable tablo et tablo(i,2) la valeur qu’il y a à la ligne i colonne 2 de ce même tablo.

Bye !

Rechercher des sujets similaires à "recapitulatifs commandes fiches recettes vba"