Problème VLOOKUP ET SUMIF

Bonjour,

Je suis actuellement en train de créer un fichier de gestion des stocks. Dans ce fichier, j’ai deux feuilles : l’une (JOURNAL STOCKS) contenant une colonne avec liste déroulante, ainsi que deux colonnes : une pour les entrées en stock et l’autre pour les sorties. Chaque fois qu’un mouvement est effectué, je rajoute une ligne et entre le détail de ce mouvement.

Sur la seconde feuille excel (ETAT DES STOCKS), on retrouve un état des stocks général, je m’explique : sur une première colonne on retrouve tous les références, puis dans deux autres colonnes on retrouve la somme de toutes les entrées ainsi que toutes les sorties effectuées sur chaque référence. Enfin dans une dernière colonne, je fais la somme des entrées et sorties pour avoir l’état du stock de chaque référence.

Le souci est là, lors de l’ajout d’un mouvement dans JOURNAL STOCKS, le code fonctionne parfaitement, et la somme de tous les mouvements se fait bien dans la feuille ETAT DES STOCKS. Néanmoins je me suis aperçu que si je supprimais un mouvement, la somme des mouvements de la référence ne se mettait pas à jour (pour illustrer cela, si je fais deux entrées de 10 articles sur une référence et que je supprime une entrée, la somme sera toujours de 20 dans ETAT DES STOCKS).

J’ai essayé et essayé mais cela ne marche toujours pas, je m’en remet donc à vous pour obtenir une solution.

Voici le code pour les sorties, je m'adapterai pour le reste:

Sub Somme_Sorties() 'SOMMESI

'Déclaration des variables
Dim DerLigne As Long
Dim nbval As Integer
Dim référence

'Définition des variables
l = 6
nbval = Application.CountA(Worksheets("ETAT DES STOCKS").Range("Référence_Stocks"))

'Trouver la dernière cellule non-vide de la colonne des sorties de stock
DerLigne = Worksheets("JOURNAL STOCKS").Cells(65536, 5).End(xlUp).Row

    'Pour i jusqu'au nombre total de référence
    For i = 1 To nbval
        référence = Application.VLookup(Worksheets("ETAT DES STOCKS").Cells(l, 1).Value, _
        Worksheets("JOURNAL STOCKS").Range("B:B" & DerLigne), 1, False)
                    'Si la rechercheV de la variable référence ne donne rien alors on met 0 en stock et on passe à la ligne du dessous
                    If IsError(référence) Then
                         Worksheets("ETAT DES STOCKS").Cells(l, 5).Value = 0
                         l = l + 1
                         'Si la référence est présente
                         Else
                            'SUMIF pour faire la somme des entrées ayant des références identiques
                            Worksheets("ETAT DES STOCKS").Cells(l, 5) = Application.WorksheetFunction.SumIf(Worksheets("JOURNAL STOCKS").Range("Plage_Journal_Stocks_Sorties"), _
                            Worksheets("ETAT DES STOCKS").Cells(l, 1).Value, Worksheets("JOURNAL STOCKS").Range("E7:E" & DerLigne))
                            l = l + 1
                    End If
    Next i

End Sub

Merci d'avance de votre aide.

PS : Le problème ne vient pas du calcul automatique (F9).

Bonjour,

merci de mettre un fichier (ou un extrait de fichier) dans lequel tu peux reproduire ton problème. Comment est définie la plage Plage_Journal_Stocks_Sorties ?

Bonjour, merci de ton aide, au lieu de me tourner les pouces en attendant les réponses j'ai tenté une ultime solution qui à cette fois-ci marché.

En fait je suis passé par un bouton pour actualiser en cas de suppression de valeur.

Mon cas était bien spécifique mais je joint quand même le code au cas où :

Sub Somme_Sorties() 'SOMMESI

'Déclaration des variables
Dim DerLigne As Long
Dim nbval As Integer
Dim référence

'Définition des variables
l = 6
nbval = Application.CountA(Worksheets("ETAT DES STOCKS").Range("Référence_Stocks"))

'Trouver la dernière cellule non-vide de la colonne des sorties de stock
DerLigne = Worksheets("JOURNAL STOCKS").Cells(65536, 5).End(xlUp).Row

    'Pour i jusqu'au nombre total de référence
    For i = 1 To nbval
        If IsError(Application.VLookup(Worksheets("ETAT DES STOCKS").Cells(l, 1).Value, _
        Worksheets("JOURNAL STOCKS").Range("B:B"), 1, False)) Then
            Worksheets("ETAT DES STOCKS").Cells(l, 5).Value = 0
            l = l + 1
            Else
                Worksheets("ETAT DES STOCKS").Cells(l, 5) = Application.WorksheetFunction.SumIf(Worksheets("JOURNAL STOCKS").Range("Plage_Journal_Stocks_Entrées"), _
                Worksheets("ETAT DES STOCKS").Cells(l, 1).Value, Worksheets("JOURNAL STOCKS").Range("E7:E" & DerLigne))
                l = l + 1
        End If

    Next i

End Sub
Rechercher des sujets similaires à "probleme vlookup sumif"