Code VBA Calcul avec 2 variables

Résolu
Bonjour à tous,

J'ai un petit soucis quant à l'utilisation de Macro VBA, en effet je manipule Excel plutôt bien mais suis totalement débutant dans l'utilisation de VBA.

J'aimerai effectuer une tâche particulière mais n'arrive pas à la mettre en pratique, je vous expose mon problème le plus clairement possible.

J'ai un tableau à 6 colonnes et j'aimerai effectuer une macro afin d'effectuer un calcul avec variable(s) (2 je pense).

Je vous expose mon code existant qui ne fonctionne que sur une ligne (ici la deuxième), et mon soucis serait de faire ce même calcul mais sur plusieurs lignes (environ 30 aujourd'hui qui risque d'augmenter dans les jours à venir)
Sub calcul_achat_net()
    Dim var As Integer
    Dim var2 As Integer
    If Cells(2, 1) < Cells(2, 2) Then
     var2 = Cells(2, 3)
        Do Until var + var2 >= Cells(2, 6)
            var = var + Cells(2, 4)
        Loop
    End If
    If Cells(2, 1) >= Cells(2, 2) Then
        Cells(2, 7) = 0
    End If
    Cells(2, 7) = var + var2
End Sub

Pour résumé mon calcul ci dessus :
Si A2 < B2 alors var2 = C2
Donc faire le calcul suivant jusqu'à ce que var + var2 = F2
var = var + D2
SI A2 >= B2 alors G2 = 0

G2 = var + var 2

PS : la colonne E n'est pas utilisé

J'aimerai donc faire ce calcul pour une trentaine de ligne environ mais je ne sais pas comment m'y prendre, je ne sais pas si il vous faut plus de détail pour essayer de m'aider, mais si vous avez besoin d'informations supplémentaire je peux vous les fournir.

En espérant avoir été clair, je vous remercie pour l'aider que vous m'apporterez.

Cordialement.

7 réponses

  1. Après l'essai tout va pour le mieux, en effet si par malheur la colonne A était supérieur à la B la colonne F prenait tout d'abord la valeur 0 puis re-basculé sur la dernière valeur connu de var + var 2, c'est vrai que ça parait logique !

    Merci pour m'avoir aidé je vous en suis très reconnaissant.

    Le sujet est à présent Résolu donc je le signal.

    Encore merci à vous et bonne continuation !
    1. Oups désolé en effet je n'avais pas fais attention, je vais vérifier le code de quent et si le problème persiste ou même si il est résolu je le signalerai.

      En tout cas merci.
      1. bonjour,
        l'erreur vient du fait que tu dois remettre les variables var et var2 à 0 à chaque début de boucles sinon elles conservent leur valeur :

        Const lideb = 2
        Const lifin = 7
        Sub calcul_achat_net()
        'Définition des variables
        Dim var As Integer
        Dim var2 As Integer
        Dim Li As Long
        'Boucle à répéter
        For Li = lideb To lifin
        var = 0
        var2 = 0
        If Cells(Li, 1) < Cells(Li, 2) Then
        var2 = Cells(Li, 3)
        Do Until var + var2 >= Cells(Li, 6)
        var = var + Cells(Li, 4)
        Loop
        End If
        If Cells(Li, 1) >= Cells(Li, 2) Then
        Cells(Li, 7) = 0
        End If
        Cells(Li, 7) = var + var2
        Next Li
        End Sub
        1. Add : https://www.cjoint.com/?0Afs00M5N0o

          J'ai créé l'équivalent de mon tableau pour te le transmettre.

          Je t'explique globalement la situation :
          - J'ai un stock restant de plusieurs ingrédients (Colonne A)
          - J'ai un stock minimum à avoir (Colonne B)
          - J'ai un minimum établi à acheter en cas de besoin. (Colonne C)
          - Lorsque j'achète, je dois acheter la quantité minimum puis X fois les lots (en colonne D afin d'atteindre mon stock minimum)
          - J'ai mon Besoin brut (en colonne F) qui me sert de base à dépasser lors de l'achat.

          Donc ça se passe globalement comme suis :
          - Si Colonne A > B, aucun besoin d'acheter.
          - Si Colonne A < B, Quantité minimum à acheter + si besoin X lot en plus afin que la quantité à commander soit supérieur ou égale au besoin brut.

          En espérant avoir été clair, je te remercie. Je suis toujours à disposition pour répondre à une de tes questions.
          1. Je te remercie pour ta solution, je vais la tester au plus vite et je te tiendrai au courant du résultat si il correspond à mon besoin.
            J'ai globalement compris le principe de ton code, mais n'ayant vraiment aucune base de code j'ai un peu chercher comment sortir le code que j'avais fait ci-dessus.

            Je ne peux malheureusement pas transmettre mon tableau car il contient des informations confidentielles, sinon pour vous faciliter la tâche je te l'aurais transmis sans hésiter.

            En tout cas merci pour ta réponse.
            1. Bonjour

              si ton code fonctionne correctement sur la ligne 2, il suffit de remplacer 2 par une varaible et de boucler sur cette variable

              const lideb = 2
              const lifin = 30

              Sub calcul_achat_net()
              Dim var As Integer
              Dim var2 As Integer
              Dim li as long
              for li = lideb to lifin
              If Cells(li, 1) < Cells(li, 2) Then
              var2 = Cells(li, 3)
              Do Until var + var2 >= Cells(li, 6)
              var = var + Cells(li, 4)
              Loop
              End If
              If Cells(li, 1) >= Cells(li, 2) Then
              Cells(li, 7) = 0
              End If
              Cells(li, 7) = var + var2
              Next li
              End Sub


              RQ1. Cells(li,7) vaudra toujours var+var2 et jamais 0
              RQ2. si lifin doit évoluer tu dis
              DQ3. si ça ne correspond pas à ce que tu veux, peux tu envoyer une partie de ton classeur au format excel 2003 su cjoint.com et joindre le lien obtenu à ton prochain message

              Cdlmnt