Incrémenter des quantités par ligne jusqu'à une valeur cible globale - VB/VBA/VBS - Programmation
Marsh Posté le 24-07-2013 à 11:15:31
Salut,
Je n'ai pas très bien compris ta demande mais pourquoi ne pas utiliser simplement une formule pour tes Qr ?
Si j'ai bien compris, tu devrais avoir Qr = Taux Cible x Qi
Marsh Posté le 24-07-2013 à 16:42:09
Bonjour Takama13,
c'est exactement la réponse obtenue sur un autre forum !
Mais au lieu de faire l'effort d'y continuer, il a préféré tenter sa chance ici; c'est pourquoi je le zappe ici …
Marsh Posté le 25-07-2013 à 15:09:50
J'ai préféré tenter ma chance ici compte tenu de la teneur des réponses que l'on m'a données sur l'autre forum! (En gros je sais pas expliquer et je suis tp nul pour espérer coder)
Qr = Taux Cible * Qi peut marcher dans certains cas mais pas dans tous : sur certaines lignes (références) Qd peut être égale à 0 par conséquent Qr = 0 également. Il faut donc compenser sur les autres lignes.
Voilà j'essaie juste d'obtenir de l'aide ou des conseils de gens plus expérimentés que moi dans ce domaine. Désolé si j'explique mal ou si ce n'est pas très clair!
Marsh Posté le 25-07-2013 à 15:21:47
Suffit juste de rajouter un "SI" alors dans ta formule.
Un truc du genre (à adapter avec les références exactes) :
=SI(Qd=0;0;Qr = Taux Cible * Qi)
Marsh Posté le 26-07-2013 à 18:33:42
Merci Takama13! J'avais effectivement exploré cette piste mais cela pose un problème
Taux Cible du thème 50%
Theme Ref Qi Qd Qr taux obtenu à la ref
1 A 20 15 10 50%
1 B 30 20 15 50%
1 C 50 0 0 0%
...
Taux au thème = (10+15+0)/(20+30+50) = 31,25% donc < Taux Cible. Je cherche un moyen dans ce cas là de "compenser" sur les autres refs pour atteindre mon taux au thème de 50% (même si je n'ai plus 50% sur chaque ref...)
Bref effectivement c'est un peu flou mais je vais partir sur cette idée, et j'ajusterai à la main pour les exceptions.
Merci en tt cas Takama13 d'avoir pris le temps de me répondre!
Marsh Posté le 23-07-2013 à 15:39:31
Bonjour à tous!
Etant débutant en Macros Excel, je sollicite votre grande expertise et vos conseils avisés!
Voilà ma situation, nous avons :
> un thème (T1, T2, ...) en colonne A
> une référence (R1, R2,...) en colonne B
=> Un thème a plusieurs références mais une référence a un seul thème unique
> une quantité "disponible" (Qd) par référence en colonne C
> une quantité à renseigner (Qr) par mes soins en colonne D (Qr<=Qd)
> une quantité initiale fixe (Qi) en colonne F
> un taux cible par thème fixé à la semaine
> un taux réel par référence calculé après chaque modification de Qr en colonne E (Qr / Qi)
> un taux réel par thème calculé après chaque modification de Qr en cellule E422 pour le T1, E423 pour le T2 etc... (Somme des Qr / Somme des Qi)
Chaque semaine, pour les lignes avec une Qd>0, je dois renseigner manuellement les Qr jusqu'à ce que le taux réel par thème = taux cible (renseigné via un UserForm).
En gros, je renseigne une Qr et je checke le taux réel.
S'il n'est pas égal au taux cible je renseigne une autre Qr ou j'augmente cette Qr. Je recheck le taux réel.
Ainsi de suite jusqu'à ce que le taux réel = taux cible
Par conséquent j'aimerais automatiser cela :
rentrer un taux cible via un userform
lancer une boucle qui affecte des Qr puis qui les modifie d'un certain pas (+1 me parait bien) jusqu'à ce que le taux réel par thème = taux cible
J'ai donc fait cela mais c'est apparemment un très mauvais code...(qui en plus ne fonctionne pas)...Je pense à repartir de zéro ou même continuer mes manips manuelles sauf si vous pouvez m'aiguiller vers la lumière!
Merci!
Xavier
Private Sub CommandButton1_Click()
Dim a, l, Min As Integer
Dim TauxCible As Double
UserForm4.Hide
'Test de la valeur entrée dans le userform
If IsNumeric(UserForm4.TextBox2.Value) = False Then
Select Case MsgBox("Le taux indiqué n'est pas un nombre", vbRetryCancel, "Message d'erreur" )
Case vbRetry
UserForm4.Show
Case vbCancel
UserForm4.Hide
End Select
Else
TauxCible = UserForm4.TextBox2.Value
End If
Min = 10
l = 5
a = 9
line1:
If Range("BB425" ).Value <= TauxCible Then
If Range("AY" & l).Value >= 10 Then
If Range("BA" & l).Value > 0 Then
Range("AZ" & l).Value = 10
Range("AZ" & l).Value = Range("AZ" & l).Value + 1
Application.ScreenUpdating = True
l = l + 1
If l < 10 Then
GoTo line1
Else: GoTo line2
End If
Else: l = l + 1
If l < 10 Then
GoTo line1
Else: GoTo line2
End If
End If
End If
Else
MsgBox "Oups", vbExclamation, "Attention"
End If
l = 5
line2:
If Range("BB425" ).Value <= TauxCible Then
If Range("BA" & l).Value = a Then
Range("AY" & l).Value = Range("AZ" & l).Value
Application.ScreenUpdating = True
l = l + 1
If l < 10 Then
GoTo line2
Else:
a = a - 1
GoTo line2
End If
End If
Else
MsgBox "Oups 2", vbExclamation, "Attention"
End If
'Test pour vérifier que la qté basculée n'excède pas la qté disponible
If Range("BA" & l).Value < 0 Then
Range("AZ" & l).Value = Range("AZ" & l).Value + Range("BA" & l).Value
End If
End Sub