Problématique de macro/VBA

Bonjour à tous,

Je fais appel à vos compétences si précieuses...

Le projet est de pouvoir faire un -1 sur la feuille "BASE" (ou plus selon stock consommé) sur le stock lorsqu'on valide une quantité négative et faire un +1 (ou plus) sur la feuille "BASE" lorsqu'on valide une quantité positive.

La feuille "Logs" sert simplement d'historique.

Il faudrait enfaite que la valeur dans la feuille "BASE" s'incrémente ou se décrémente en fonction des saisies.

14projet-stock-v2.zip (31.98 Ko)

J'ai quelque peu modifié ma demande. C'est plus simple et clair à résoudre je pense.

Bonjour,

proposition de correction

Option Explicit

Sub NouvelleSaisie()
    Dim Cel, c As Range, qté As Double, ref As String

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    For Each Cel In Array("c4", "c5")
        If IsEmpty(Range(Cel).Value) Then
            Range(Cel).Activate
            MsgBox ("Champ  " & ActiveCell.Offset(0, -1) & "  Obligatoire")
            Exit Sub
        End If
    Next Cel
    ActiveSheet.Unprotect
    ref = [C4].Text
    qté = [C5]
    Range("Saisie").Copy
    With Sheets("Logs")
        .Range("A65536").End(xlUp)(2) _
                .PasteSpecial Paste:=xlPasteValues, Transpose:=True
    End With

    With Sheets("BASE")
        Set c = .[B:B].Find(ref, LookIn:=xlValues, lookat:=xlWhole)
        If c Is Nothing Then
            MsgBox "Ref inconnue dans BASE"
        Else
            .Cells(c.Row, "I") = .Cells(c.Row, "I") - qté
        End If
    End With
    Application.CutCopyMode = False
    Range("c4:c5").ClearContents
    Range("c4").Activate
    Application.EnableEvents = False
End Sub
13projet-stock-v2.zip (32.12 Ko)

Merci pour ton aide !

C'est effectivement ce que je cherche.

Néanmoins, que la quantité saisie soit positive ou négative, la quantité dans "Base" se décrémente toujours en négatif.

Bonjour,

comme tu as écrit ta formule, elle s'incrémente quand tu mets une quantité négative et se décrémente quand tu mets une quantité positive.

pour avoir un comportement plus "normal"

remplace cette formule

.Cells(c.Row, "I") = .Cells(c.Row, "I") - qté

par ceci

.Cells(c.Row, "I") = .Cells(c.Row, "I") + qté

dans le classeur modifié que je t'ai proposé.

OK ! C'était bien ca, merveilleux !

Dernière question, cette fois via la feuille "Logs"

J'aimerais y ajouter une date à chaque saisie. La date du jour naturellement et de manière automatique.

Bonjour,

modification de la partie log

Range("Saisie").Copy
    With Sheets("Logs").Range("A65536").End(xlUp)(2)
                .PasteSpecial Paste:=xlPasteValues, Transpose:=True
                .Offset(, 4) = Date
    End With

Magnifique ! merci milles fois !

J'en profite, puisque je bloque sur le dernier module que je souhaite ajouter; à savoir la saisie d'une nouvelle référence en base.

J'ai déjà crée l'userform, tenté d'y associer les fonctions permettant d'ajouter une ligne dans la feuille "BASE", mais rien n'y fait.

J'arrive seulement à y ajouter la date en colonne A (de manière automatisé), mais pas le reste des lignes...

D'avance, merci.

Rechercher des sujets similaires à "problematique macro vba"