Incrémenter une valeur VBA

17gestion-stock.zip (71.25 Ko)

bonjour,

je voudrais avoir un peu d'aide sur mon projet,

c'est un éditeur de stock le seul problème comme vous allez le voire, dès que je fait une entré dans mon stock sa incrémente pas si la référence et identique ainsi que la marque.

Se que je voudrais si possible, c'est que si le produit existe déja et que je veux faire une entrée de 20 par exemple sa les rajoutes déjà au produit existant en modifiant la date, et non crée dans une ligne différente. Tout cela en pouvant garder la possibilité de rajouter un produit tout nouveau .

merci de votre aide

Bonjour et bienvenue sur le forum,

Je te propose de modifier le code de ton bouton Validation de l'userform USF_C.

Comme ceci:

Private Sub B_Valid_Click()
With Sheets("MIF")

ligne = Application.Match(Me.ComboBox1.Value, .[A:A], 0)
If IsError(ligne) Then
   '--- ref non trouvée va en fin de formulaire
   ligne = .[a65000].End(xlUp).Row + 1
   '--- Transfert Formulaire dans MIF
   .Cells(ligne, "A") = Me.ComboBox1
   .Cells(ligne, "B") = CDbl(Me.TextBox1)
   .Cells(ligne, "C") = UCase(Me.ComboBox2) 'met en majuscules
   .Cells(ligne, "D") = Me.ComboBox3
   .Cells(ligne, "G") = Date
   Call initialise
Else
    ligne = .[C:C].Find(Me.ComboBox2.Value).Row
   '--- ref trouvée ajoute à la réf
   .Cells(ligne, 2) = CDbl(Me.TextBox1) + .Cells(ligne, 2) 'ajoute la quantité
   .Cells(ligne, 3) = UCase(Me.ComboBox2) 'met en majuscules
   .Cells(ligne, 7) = Date
   Call initialise
End If

End With
End Sub

@+

ddetp88

Kévin,

En fait je viens de faire des tests et il se trouve que ma réponse est incomplète.

Il faut ajouter un test sur la marque et sur la ligne de la référence.

Voici le nouveau fichier avec le code corrigé.

Private Sub B_Valid_Click()
    With Sheets("MIF")
        ligne = Application.Match(Me.ComboBox1.Value, .[A:A], 0)
        If IsError(ligne) Then
           '--- ref non trouvée va en fin de formulaire
           ligne = .[a65000].End(xlUp).Row + 1
           '--- Transfert Formulaire dans MIF
           .Cells(ligne, "A") = Me.ComboBox1
           .Cells(ligne, "B") = CDbl(Me.TextBox1)
           .Cells(ligne, "C") = UCase(Me.ComboBox2) 'met en majuscules
           .Cells(ligne, "D") = Me.ComboBox3
           .Cells(ligne, "G") = Date
           Call initialise
        ElseIf .Cells(ligne, "C").Value = UCase(Me.ComboBox2.Value) Then
           '--- ref trouvée ajoute à la réf
           .Cells(ligne, "B") = CDbl(Me.TextBox1) + .Cells(ligne, 2) 'ajoute la quantité
           .Cells(ligne, "C") = UCase(Me.ComboBox2) 'met en majuscules
           .Cells(ligne, "G") = Date
           Call initialise
        Else
           '--- Marque non trouvée va en fin de formulaire
           ligne = .[a65000].End(xlUp).Row + 1
           '--- Transfert Formulaire dans MIF
           .Cells(ligne, "A") = Me.ComboBox1
           .Cells(ligne, "B") = CDbl(Me.TextBox1)
           .Cells(ligne, "C") = UCase(Me.ComboBox2) 'met en majuscules
           .Cells(ligne, "D") = Me.ComboBox3
           .Cells(ligne, "G") = Date
           Call initialise
        End If

    End With
End Sub

A bientôt

ddetp88

Bonjour ,

je te remercie C'est un bon début sa ^^ mais le souci es que si je rajoute une lettre a la référence bha sa marche plus.

après si je garde la même référence mais change la marque sa ne crée pas une autre ligne sa écrase la réf. et dernier petit point si je change de dépôt sa écrase aussi la ref.

mais en tout merci , moi je me pencher sur un "si ref=recherche, marque = marque et que dispo = dispo alors on ajoute à la quantité sinon on créé une nouvelle ligne. tout en mettant a jours la date "

bref sa fait un an que je fait plus de vba et j'ai perdu pas mal d'acquis ... je mis remet donc a fond

Bonjour Kévin,

En fait tu vas devoir fournir des explications supplémentaires.

Dans l'onglet base tu as tes:

  • produits avec la référence en première colonne
  • fournisseurs (marque du produit je pense) en deuxième colonne
  • dépôt ou stock en troisième colonne.

Ces données alimentent tes différents combobox.

Comme ton userform est conçu, tu peux pour une même référence modifier le fournisseur (combobox2). Est-ce bien normal?

Tu peux aussi modifier la colonne "Disponible" en dépôt ou en stock avec le combobox3. Est-ce bien normal?

Tout cela m'interroge quant au bon fonctionnement du fichier que tu as nommé gestion de stock.

Ne faudrait-il pas plutôt des labels en remplacement des combobox 2 et 3?

Ensuite, tu dis:

après si je garde la même référence mais change la marque sa ne crée pas une autre ligne sa écrase la réf. et dernier petit point si je change de dépôt sa écrase aussi la ref.

D'après les tests que je viens de faire, une nouvelle ligne se créait.

cordialement

ddetp88

Bonjour,

se fichier n'est que la premier version la nouvelle je peux pas la mettre le fichier es trop lourd...

en faite je peux pas faire une base de produit comme sa a la main car il y aura plus de 500 ref différente se que je voudrais c'est que dans mif tous se mette bien et s'agrémente sans faire de doublons et apres dans ma nouvelle version l'onglet base ajoute au fur et a mesure les ref mais aussi sans doublons .

Le bouton valide à garder le même code tous le reste sa marche c'est juste quand je fait une entrer de produit ou le problème se pose...

j'ai penser a sa moi :

 Private Sub B_Valid_Click()
    With Sheets("MIF")
        ligne = Application.Match(Me.ComboBox1.Value, .[A:A], 0) And Application.Match(Me.ComboBox2.Value, .[C:C], 0) And Application.Match(Me.ComboBox3.Value, .[D:D], 0)
        If IsError(ligne) Then
          '--- ref non trouvée va en fin de formulaire
          ligne = .[a65000].End(xlUp).Row + 1
           '--- Transfert Formulaire dans MIF
           .Cells(ligne, "A") = Me.ComboBox1
           .Cells(ligne, "B") = CDbl(Me.TextBox1)
           .Cells(ligne, "C") = UCase(Me.ComboBox2) 'met en majuscules
           .Cells(ligne, "D") = Me.ComboBox3
           .Cells(ligne, "G") = Date
           Call initialise

        Else: .Cells(ligne, "C").Value = UCase(Me.ComboBox2.Value)
           '--- ref trouvée ajoute à la réf
           .Cells(ligne, "B") = CDbl(Me.TextBox1) + .Cells(ligne, 2) 'ajoute la quantité
           .Cells(ligne, "C") = UCase(Me.ComboBox2) 'met en majuscules
           .Cells(ligne, "G") = Date
           .Cells(ligne, "D").Value = UCase(Me.ComboBox3.Value)
           Call initialise

        End If

     

mais sa marche pas

Je viens de me pencher dessus et se script marche le mieux :

Private Sub B_Valid_Click()
        With Sheets("MIF")
        ligne = Application.Match(Me.ComboBox2.Value, .[A:A], 0)
        If IsError(ligne) Then
           '--- ref non trouvée va en fin de formulaire
           ligne = .[a65000].End(xlUp).Row + 1
           .Cells(ligne, "A") = Me.ComboBox1
           .Cells(ligne, "B") = CDbl(Me.TextBox1)
           .Cells(ligne, "C") = UCase(Me.ComboBox2)
           .Cells(ligne, "D") = Me.ComboBox3
           .Cells(ligne, "G") = Date
           Call initialise
        Else: .Cells(ligne, "C").Value = UCase(Me.ComboBox2.Value)
               .Cells(ligne, "B") = CDbl(Me.TextBox1) + .Cells(ligne, 2) 'ajoute la quantité
               .Cells(ligne, "C") = UCase(Me.ComboBox2) 'met en majuscules
               .Cells(ligne, "G") = Date
           Call initialise

        End If

    End With
End Sub   

la le stock se rajoute bien si la réf es identique mais alors qu'il faudrait que sa rajoute au stock que si la ref plus la marque + la dispo soit identique a la recherche

pour info j ai changer sa pour éviter de faire des doublon et avoir une et supprimer la base qui sera désormais mif

Private Sub UserForm_Initialize()

Me.ComboBox1.RowSource = "MIF!A2:A" & Sheets("MIF").[a65000].End(xlUp).Row

Me.ComboBox2.RowSource = "MIF!B2:B" & Sheets("MIF").[a65000].End(xlUp).Row

Me.ComboBox3.RowSource = "MIF!C2:C" & Sheets("MIF").[a65000].End(xlUp).Row

End Sub

        ligne = Application.Match(Me.ComboBox1.Value, .[A:A], 0) And Application.Match(Me.ComboBox2.Value, .[C:C], 0) And Application.Match(Me.ComboBox3.Value, .[D:D], 0)

ne peut pas fonctionner puisque match va donner le numéro de ligne de la 1ère référence correspondante.

Je te propose une autre solution avec une boucle.

En revanche il faut tester sur ton fichier original car si les lignes sont nombreuses, la durée de la macro risque de s'allonger.

Il faudra passer par des tableaux à ce moment là.

Private Sub B_Valid_Click()

With Sheets("MIF")
    ligne = 2

    Do While .Cells(ligne, "A") <> ""
        If .Cells(ligne, "A").Value = Me.ComboBox1.Value _
        And .Cells(ligne, "C").Value = UCase(Me.ComboBox2.Value) _
        And .Cells(ligne, "D") = Me.ComboBox3.Value Then
            '--- ref trouvée ajoute à la réf
           .Cells(ligne, "B") = CDbl(Me.TextBox1) + .Cells(ligne, 2).Value 'ajoute la quantité
           .Cells(ligne, "G") = Date
           Call initialise
           Unload Me
           Exit Sub
        End If
        ligne = ligne + 1
    Loop

    If ligne = .[a65000].End(xlUp).Row + 1 Then
'--- Marque non trouvée va en fin de formulaire
       '--- Transfert Formulaire dans MIF
       .Cells(ligne, "A") = Me.ComboBox1
       .Cells(ligne, "B") = CDbl(Me.TextBox1)
       .Cells(ligne, "C") = UCase(Me.ComboBox2) 'met en majuscules
       .Cells(ligne, "D") = Me.ComboBox3
       .Cells(ligne, "G") = Date
       Unload Me
       Call initialise
    End If
End With
End Sub

Cordialement

ah super merci

du coup je comprend pas pourquoi tu dis ligne=2 tu a mis ligne comme sa ?

ou tu aurai très bien pu mettre boucle=2 car c'est biens se qu'il définis le nombre de boucle ?

j'ai repris la variable ligne que tu utilises depuis le début.

L'astuce étant d'utiliser la même variable partout.

Content que tu sois satisfait.

Cordialement

ddetp88

Dac

connais tu un formule exel pour suprimé automatiquement les doublons ?car je copie automatiquement les référence du tableau dans une colonne et je voudrais m'en servir comme petite basse pur éviter 'avoir plusieurs fois la mémé ref dans ma box .

comme tu as excel 2010 va dans le menu données/supprimer les doublons.

Si tu veux bien, il faut relancer un nouveau fil dès lors que la question n'a plus rien à voir avec la question de base.

@+

Rechercher des sujets similaires à "incrementer valeur vba"