Incrémenter des quantités par ligne jusqu'à une valeur cible globale

Incrémenter des quantités par ligne jusqu'à une valeur cible globale - VB/VBA/VBS - Programmation

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

Reply

Marsh Posté le 23-07-2013 à 15:39:31   

Reply

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

Reply

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 …
 

Reply

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!

Reply

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)

Reply

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!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed