Variétés stagnantes

Bonjour

S'il vous plaît, aidez-moi si vous le pouvez

Il existe une feuille de démonstration pour un aperçu du travail requis. Je souhaite connaître les éléments statiques et mobiles pour chaque magasin, comme indiqué dans le code.

Il y a un problème dans le code qui n'affiche pas les éléments stagnants

Cela passe par la validité du mouvement du produit et de la quantité

Sub FindStagnantItems()
    Dim ws As Worksheet, wsOutput As Worksheet
    Dim lastRow As Long, i As Long
    Dim item As String, category As String, lastMovementDate As Date
    Dim stagnantItemsByCategory As Object
    Dim warehouseNames As Variant
    Dim stagnantPeriod As Integer
    Dim totalStagnantItemsByCategory As Object

' ' Définir la période au bout de laquelle l'article est considéré comme stagnant

    stagnantPeriod = 90

' ' Précisez les noms des feuilles de calcul qui représentent les magasins
    warehouseNames = Array("Magasin principal", "Branche 1")

' 'Créer un dictionnaire pour stocker les éléments stagnants par classification
    Set stagnantItemsByCategory = CreateObject("Scripting.Dictionary")
    Set totalStagnantItemsByCategory = CreateObject("Scripting.Dictionary")
'' Répétez le processus pour chaque magasin
    For Each warehouseName In warehouseNames

        On Error Resume Next
Set ws = ThisWorkbook.Sheets(warehouseName)
If Err.Number <> 0 Then
    MsgBox "'Une erreur s'est produite lors de l'accès à la feuille de calcul: " & Err.Description
    Exit Sub
End If
On Error GoTo 0

        lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

'' Rechercher les articles en rupture de stock dans le magasin actuel
        For i = 2 To lastRow
            item = ws.Cells(i, 1).Value
            category = ws.Cells(i, 4).Value
            lastMovementDate = ws.Cells(i, 3).Value

            If DateDiff("d", lastMovementDate, Date) > stagnantPeriod Then
                If Not stagnantItemsByCategory.Exists(category) Then
                    stagnantItemsByCategory.Add category, New Collection
                End If
                stagnantItemsByCategory(category).Add item

' 'Calculer le total des articles dormants pour chaque catégorie
                If Not totalStagnantItemsByCategory.Exists(category) Then
                    totalStagnantItemsByCategory.Add category, 1
                Else
                    totalStagnantItemsByCategory(category) = totalStagnantItemsByCategory(category) + 1
                End If
            End If
        Next i
    Next warehouseName

'' Créer une nouvelle feuille de calcul pour afficher les résultats
    Set wsOutput = Worksheets.Add
    wsOutput.Name = "Variétés dormantes"
    wsOutput.Range("A1").Value = "Classification"
    wsOutput.Range("B1").Value = "Nombre d'éléments stagnants"

'' Afficher les résultats
    Dim categoryName As Variant
    Dim currentRow As Long
    currentRow = 2
    For Each categoryName In totalStagnantItemsByCategory.Keys
        wsOutput.Cells(currentRow, 1).Value = categoryName
        wsOutput.Cells(currentRow, 2).Value = totalStagnantItemsByCategory(categoryName)
        currentRow = currentRow + 1
    Next categoryName
End Sub

Bonjour,

C'est assez compliqué de comprendre votre code sans explications sur le projet/le fonctionnement voulu.

Si au moins vous pourriez fournir une feuille des résultats attendus, car en soi la macro fonctionne sans bugs de ce que j'ai pu tester. Moi après l'exécution, sur votre exemple, j'obtiens ceci :

image

Avec comme feuille de départ :

image

J'ai remis en G le calcul de datediff. On voit dans le code que vous filtrez pour ajouter dans vos dictionnaires uniquement les lignes vérifiant datediff > 90. On obtient donc bien le résultat voulu : Branche 1 : 2 éléments stagnants. (et Magasin principal : 0).

Pour info, je pense que vous n'avez pas besoin de 2 dictionnaires. Puisque stagnantItemsByCategory contient des Collections, on peut simplement récupérer le nombre d'éléments dans la collection avec stagnantItemsByCategory(category).Count.

Donc veuillez préciser le résultat attendu svp. Le code a un fonctionnement qui suit la logique indiquée.

Rechercher des sujets similaires à "varietes stagnantes"