Code VBA Calcul avec 2 variables

Résolu/Fermé
XxlloW Messages postés 5 Date d'inscription lundi 5 janvier 2015 Statut Membre Dernière intervention 6 janvier 2015 - Modifié par pijaku le 5/01/2015 à 13:29
XxlloW Messages postés 5 Date d'inscription lundi 5 janvier 2015 Statut Membre Dernière intervention 6 janvier 2015 - 6 janv. 2015 à 16:59
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.
A voir également:

7 réponses

ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
5 janv. 2015 à 15:16
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
0
XxlloW Messages postés 5 Date d'inscription lundi 5 janvier 2015 Statut Membre Dernière intervention 6 janvier 2015
Modifié par XxlloW le 5/01/2015 à 18:25
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.
0
XxlloW Messages postés 5 Date d'inscription lundi 5 janvier 2015 Statut Membre Dernière intervention 6 janvier 2015
5 janv. 2015 à 19:03
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.
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
5 janv. 2015 à 20:06
Désolé, mais je t'avais précisé au format excel 2003
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0
XxlloW Messages postés 5 Date d'inscription lundi 5 janvier 2015 Statut Membre Dernière intervention 6 janvier 2015
6 janv. 2015 à 16:50
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.
0
XxlloW Messages postés 5 Date d'inscription lundi 5 janvier 2015 Statut Membre Dernière intervention 6 janvier 2015
6 janv. 2015 à 16:59
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 !
0