Comptage nb de produits commandé

Bonjour,

J'ai besoin de votre aide précieuse :-)

Je vais essayer d'être le plus clair possible ^^ j'ai un classeur Excel pour chaque client qui passe commande (voir ci-joint Commandes Nicolas.xls et Commandes Sébastien.xls)

Chacun ont commandé des produits et certains sont les mêmes comme dans mon exemple, Nicolas a commandé 6 Baby Confiture abricot calisson et Sébastien en a commandé 2.

Ce que je souhaiterais c'est un classeur Excel à part qui me compte le nombre de produits pour tous les clients. Toujours pour mon exemple le fichier compterai donc "8 Baby Confiture abricot calisson" au total

Il me faut juste deux colonnes avec l'intitulé, ici "Baby Confiture abricot calisson" et le nombre de produits ici, 8

Et à chaque fois que je créé un classeur pour un client (dans le même dossier) cela s’incrémente dans le fichier

Si vous pouviez me donner un coup de pouce ça serait vraiment sympa svp :) :)

Merci par avance

Bonjour

Ce que je souhaiterais c'est un classeur Excel à part qui me compte le nombre de produits pour tous les clients. Toujours pour mon exemple le fichier compterai donc "8 Baby Confiture abricot calisson" au total

Cela va devenir assez compliqué quand vous allez avoir un nombre grandissant de fichiers. Je vous conseille de faire un seul fichier qui reprend comme vous l'avez fait la liste des produits et une feuille par client. Ensuite une feuille qui vous donne le résultat attendu.

Votre avis ?

Merci Dan pour ta réponse :-)

Du coup imaginons que j'ai un seul classeur et avec à l'intérieur un onglet par client comme tu me le conseilles, comment est-ce que je peux avoir un onglet qui va me compter et récapituler tous les produits commandés avec leur quantité totale ?

merci encore :))

Bonjour Nicodemars, bonjour le forum,

En pièce jointe une proposition. Copie dans le même dossier que les classeurs Comandes-.... N'ouvre que ce fichier et clique sur le bouton...

Le code :

Private Sub CommandButton1_Click()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim F As String 'déclare la variable F (Fichier)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TP() As Variant 'déclare la variable TP (Tableau des Produits)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("MAJ") 'définit l'onglet destination OD
CA = CD.Path & "\" 'définit le chemin d'accès CA
Set D = CreateObject("Scripting.dictionary") 'd;efinit le dictionnaire D
F = Dir(CA & "*.xlsx") 'définit le premier fichier F avec l'extension .xlxs dans le dossier ayant CA comme chemin d'accès
OD.Range("D2") = Format(Date, "dddd dd/mm/yyyy") 'écrrit la date en D2 de l'onglet destination
OD.Range("A2").CurrentRegion.Offset(1, 0).ClearContents 'efface les anciennes données de l'onglet destination
Do While F <> "" 'boucle tant qu'il existe des fichiers F
    Set CS = Workbooks.Open(CA & F) 'définit le classeur source en l'ouvrant
    Set OS = CS.Worksheets(2) 'définit l'onglet source
    TV = OS.Range("C23:P44") 'définit le tableau des valeurs
    For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs YTV
        If TV(I, 1) <> "" Then 'condition 1 : si la donnée ligne I colonne 1 de TV n'est pas vide
            If Not D.exists(TV(I, 4)) Then 'condition 2 : si le produit n'esiste pas dans le dictionnaire D
                D(TV(I, 4)) = "" 'ajoute le produit au dictionnaire D
                K = K + 1 'incrémente la varaible K
                ReDim Preserve TP(1 To 2, 1 To K) 'redimensionne le tableau des produits TP (2 lignes, K colonnes)
                TP(1, K) = TV(I, 4) 'récupère dans la ligne 1 de TL la donnée en colonne 4 de TV (le produit)
                TP(2, K) = TV(I, 3) 'récupère dans la ligne 2 de TL la donnée en colonne 3 de TV (la quantité)
            Else 'sinon
                For J = 1 To UBound(TP, 2) 'boucle 2 : sur tous les élements du tableau des produits TP
                    'si l'élément en ligne 1 de TP est égale à la donnée ligne I colonne 4 de TV (même produit)
                    'ajoute la quantité à la quantité existente, sort de la boucle
                    If TP(1, J) = TV(I, 4) Then TP(2, J) = TP(2, J) + TV(I, 3): Exit For
                Next J 'prochain élément de la boucle 2
            End If 'fin de la condition 2
        End If 'fin de la condition 1
    Next I 'prichaine ligne de la boucle 1
    CS.Close False 'ferme le classeur source sans enregistrer
    F = Dir 'd;efinit le prochain fichier F avec l'extension .xlxs dans le dossier ayant CA comme chemin d'accès
Loop 'boucle
OD.Range("A3").Resize(K, 2).Value = Application.Transpose(TP) 'renvoie le tableau TP transposé dans A3 redimensionnée de l'onglet OS
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
MsgBox "Traitement des données terminé !" 'message
End Sub

Le fichier :

12recap.xlsm (23.25 Ko)

[Édition]

Bonjour Dan, je n'avais pas rafraîchi...

Est-ce que vous connaissez les clients à l'avance ou pouvez vous en ajouter de nouveaux. On peut dupliquer la feuille Liste produit en conservant les colonnes A et B, puis ajouter les clients en ligne 1 à partir de la la colonne C. Là il serait simple de récupérer les infos dont vous avez besoin.

Edit : Voyez ce que Thautheme propose

Hello ThauThème !!

MERCI BEAUCOUP C'EST PARFAIT ouffff !!:)

Très bonne soirée!!

Rechercher des sujets similaires à "comptage produits commande"