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