Gestion de stock et vente Soustraire des quantités dans une cellules en VBA

Bonjour à tous

Novice niveau -12 dans le vba je rencontre un souci avec mon fichier.

Je tente tant bien que mal de me créer une gestion des stocks et des ventes.

Je rencontre un souci, je chercher à décrémenter un nombre dans une cellule en passant par un userform, mais je ne sais pas du tout comment faire cela.

Quand je rentre une quantité dans mon userform ajoutRecette je voudrais qu'il soustrait cette quantité dans le stock.

Je joint un fichier pour plus de compréhension.

Merci

171stock2-test.xlsm (217.06 Ko)

Bonjour,

Voici un code à placer dans un module normal :

Sub MajStock()

With AjoutRecette
    For Each ctrl In .Controls
        If ctrl.Name Like "cboRef*" Then
            if ctrl <> "" then
                num = Replace(ctrl.Name, "cboRef", "")
                lig = Application.Match(ctrl, Range("TStock[SKU]"), 0)
                Range("TStock[QTS vendu]")(lig) = Range("TStock[QTS vendu]")(lig) + .Controls("txtQts" & num).Value
                Range("TStock[Qts en stock]")(lig) = Range("TStock[Qts en stock]")(lig) - .Controls("txtQts" & num).Value
                If Range("TStock[Qts en stock]")(lig) = 0 Then Range("TStock[En stock]")(lig) = "Vendu"
            end if
        End If
    Next ctrl
End With

End Sub

et à exécuter au clic Ajouter, donc dans la macro btnajouter_click, on y appelle cette macro :

Private Sub btnAjouter_Click()
'Ajouter au recettes
'Affiche un message si l'id n'ai pas référencer
    If txtID.Value = "" Then
    MsgBox "Pas d'ID référencé"
Exit Sub
End If

Call MajStock

Je n'ai pas testé mais je pense que ça devrait aller. Sinon, il faudra bien contrôler vos noms de colonnes impliquées.

Cdlt,

Bonjour à tous,

@3GB > 3 coquilles ...

1 - Range("STtock[En stock]")(lig) > une simple inversion de lettre > TStock ...

2 - .Controls(txtQts & num).Value > il manque les guillemets > .Controls("txtQts" & num).Value ...

3 - il n'y a pas de contrôle des "QTS En stock" qui peuvent passer en négatif ...

Du gros boulot en perspective ...

Note : En feuille "Stock" > le tableau porte bien le nom "TStock" > mais les données ont été écrites sous le tableau et non dedans ...

ric

Bonjour

Un grand merci à vous 2, cela fonctionne très bien avec la correction de ric.

J'ai une autres question :D

Je vends en général un produit par client, mais il arrive parfois que je vende 2 ou 3 référence différentes.

Je souhaiterais ajouter une ligne dans recette pour chaque produit différent vendu au même client tout en gardant les infos du client c'est à dire si un client m'achète 3 articles différents, j'ai 3 lignes avec les mêmes information ID, mois N°facture, adresse, mail, etc mais les informations concernant les produits REF, Nom Produits, Quantités, Prix changerais.

Je joint le fichier mis à jour.

Encore un grand merci pour votre aide.

86stock2-test2.xlsm (226.55 Ko)

Bonjour à tous,

Merci Ric, j'édite mon code tout de suite... Comme j'ai dit, je n'ai pas testé, notamment parce que les données étaient en-dessous du tableau comme tu l'as fait remarquer...

Pour les stocks négatifs, c'est une bonne remarque à laquelle j'ai pensé. Mais je pense que ce problème doit se gérer en amont, notamment lors d'un changement sur une des textbox txtQts...

Cdlt,

Bonjour à tous

Je reviens vers vous car j'ai une autre demande.

Via mon userform AjoutRecette, j'essaie d'ajouter plusieurs lignes si il y a une valeur dans la combox et si il y en a pas on ajoute rien.

J'ai tenté l'expérience avec ce bout de code

 If cboRef2 <> "" Then
             Me.cboRef2.Value = ""
        Else
            Me.cboRef2.Value = Sheets("Recettes").Range("X" & ligne).Offset(1, 0) = cboRef2
        End If

mais j'ai une erreur d'exécution qui apparait. Et je ne sais pas du tout comment la régler.

Le but recherché est, si je vend plusieurs articles différent au même client, il faut que je puisse les ajouter à ma feuille Recettes, mais il faudrait que je recopie aussi c'est info et coordonnées.

En gros si je vends 10 articles à un client sur la même facture il y aura 10 fois la même ref, numéro de facture, date d'achat etc, seul les infos des articles changes à savoir ref, Nom du produit, quantités et prix changerons.

Je joint un fichier pour plus de compréhension.

107stock2-test3.xlsm (117.31 Ko)

Merci pour tout

Cordialement

Bonjour,

Je n'ai pas regardé le fichier pour l'instant mais je peux déjà dire que la principale erreur tient dans la double égalité sur la ligne sur Else.

Voici un essai, à titre d'exemple et à contrôler et le cas échéant adapter à vos références :

for j = 1 to 10 '10 nombre de cbobox comme ça (pour chaque ligne de qté de l'UF)
    if Me.controls("TxtQts" & j).value > 0 and Me.controls("cboRef" & j).value <> "" then 'si cbx non vide et qté non nulle
        with sheets("Recettes") 'avec feuille recettes
            dl = .cells(.rows.count, "X").end(xlup).row 'dernière ligne
            for i = 1 to Me.controls("TxtQts" & j).value 'autant de fois que de qté à la ligne j
                .Range("X" & dl + i).value = Me.controls("cboRef" & j).value 'dern ligne + i de X vaut valeur de cbx
            next i
        end with
    end if
next ctrl

Cdlt,

Bonjour

Merci pour votre réponse rapide.

J'ai modifié la fin du script ou j'ai mis un "j" après next .

Cela fonctionne, mais il me rajoute que les références des mes articles et pas le reste

Il faudrait qu'il duplique la ligne juste en modifiant les ref, nom produits, qts et prix

Cordialement

En effet, il indique que la ligne que vous aviez mis au départ mais maintenant, ce sera plus simple en partant de ce modèle de rajouter les autres lignes je pense.

Les infos liées aux produits (multiples pour une seule recette) doivent être reportées de la même manière (les valeurs dépendent de j) mais en adaptant le nom du contrôle. Les infos "uniques" sont à répéter mais leur valeur ne dépend pas de j. D'ailleurs, je mets le code à jour car la seconde boucle est une erreur :

for j = 1 to 10 '10 nombre de cbobox comme ça (pour chaque ligne de qté de l'UF)
    if Me.controls("TxtQts" & j).value > 0 and Me.controls("cboRef" & j).value <> "" then 'si cbx non vide et qté non nulle
        with sheets("Recettes") 'avec feuille recettes
            dl = .cells(.rows.count, "X").end(xlup).row 'dernière ligne
            .Range("X" & dl + 1).value = Me.controls("cboRef" & j).value '<<< valeur renvoyée dépend de j
            .range("??" & dl + 1).value = Me.nomducontrolefixe.value '<<< valeur renvoyée fixe, ne dépend pas de j
        end with
    end if
next j

Voilà, il suffit de mettre autant de lignes que nécessaire et d'indiquer les bonnes lettres de colonnes.

Cdlt,

Rechercher des sujets similaires à "gestion stock vente soustraire quantites vba"