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. 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
    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. 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. 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. 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. 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 !