Je vous joint 2 fichiers un qui contient le code vba à optimiser et l'autre je pense le début de code pour optimiser
J'ai besoin de votre aide car comme vous le verrez dans le code il faut que je teste tous les lignes et au moment ou il n'y a plus de sous il s'arrête et met la valeur en couleur mais j'en suis pas encore à là et ca je peux le faire.
En fait je cherche à l'optimiser avec un tant que je pense mais je bloque à un endroit au moment de faire le calcul et de le mettre dans la case parce que j'arrive très bien à le mettre en message box
s= salaire ; f= forecast=prevision ; r= ce qui a pu être attribuer
Et en rest il faut que j'ai s-f
Bonsoir Lusane,
Vraiment pas tout compris.
While "s" > "f" c'est à dire tant que January salary sera > à un forecast.
C'est toujours le cas non ? En plus je n'ai pas compris vos valeurs en F6:F9. A quoi correspondent elles ?
Ce que j'ai tenté de comprendre :
On a un apport de salaire, tant que le reste est >0 on défalque les dépenses et on stoppe quand tout le salaire est dépensé.
Un essai en PJ avec calcul du reste à dépenser. Quand le reste est <0 on stoppe.
VB:
Sub Test2()
Application.ScreenUpdating = False
DL = Range("D65500").End(xlUp).Row
JanuarySalary = Range("D2")
For L = 6 To DL
If Cells(L, "D") <> "" Then
If Cells(L, "D") < JanuarySalary Then Cells(L, "E") = Cells(L, "D")
If Cells(L, "E") = Cells(L, "D") Then Cells(L, "F") = JanuarySalary - Application.Sum(Range("D6:D" & L))
If Cells(L, "F") < 0 Then
Cells(L, "E") = ""
Cells(L, "F") = ""
Exit For
End If
End If
Next L
End Sub
Bonsoir Lusane,
Vraiment pas tout compris.
While "s" > "f" c'est à dire tant que January salary sera > à un forecast.
C'est toujours le cas non ? En plus je n'ai pas compris vos valeurs en F6:F9. A quoi correspondent elles ?
Ce que j'ai tenté de comprendre :
On a un apport de salaire, tant que le reste est >0 on défalque les dépenses et on stoppe quand tout le salaire est dépensé.
Un essai en PJ avec calcul du reste à dépenser. Quand le reste est <0 on stoppe.
VB:
Sub Test2()
Application.ScreenUpdating = False
DL = Range("D65500").End(xlUp).Row
JanuarySalary = Range("D2")
For L = 6 To DL
If Cells(L, "D") <> "" Then
If Cells(L, "D") < JanuarySalary Then Cells(L, "E") = Cells(L, "D")
If Cells(L, "E") = Cells(L, "D") Then Cells(L, "F") = JanuarySalary - Application.Sum(Range("D6:D" & L))
If Cells(L, "F") < 0 Then
Cells(L, "E") = ""
Cells(L, "F") = ""
Exit For
End If
End If
Next L
End Sub
donc cela donne dernière ligne occupée de la colonne F, soit 5
( qui est le titre puisque la colonne F est vide )
Déjà l'erreur est pour "Interger" pour "Integer". Mais même en rectifiant, vous faites ensuite :
Code:
Dim dernR As Integer
dernR = Cells(DernL, "F").Value
comme DernL vaut 5, et qu'en F5 vous avez "Rest" alors dernR vaut "Rest" donc pas un integer. D'où l'erreur de compatibilité.
Donc si le but est d'avoir la dernière valeur de la colonne F, en numérique alors essayez :
Code:
Dim dernR As Integer
If DernL > 5 Then dernR = Cells(DernL, "F") Else dernR = 0
Ensuite je n'ai pas analysé, mais au moins ça ne bogue plus.