Microsoft 365 Aide fonction tant que vba

lusano

XLDnaute Junior
Bonsoir à tous,

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


Comptant sur vous,
Merci d'avance
 

Pièces jointes

  • test.xlsm
    23.2 KB · Affichages: 3
  • test vba.docx
    12.3 KB · Affichages: 2
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
Sinon expliquez clairement le but.
 

Pièces jointes

  • test (12).xlsm
    17.8 KB · Affichages: 1

lusano

XLDnaute Junior
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
Sinon expliquez clairement le but.
Super merci !!
Je vais essayer de fignoler par moi même ☻
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lusano,
Sinon expliquez clairement le but.
Si le but n'est pas atteint, peut être qu'une explication précise permettrait de rendre plus clair le problème.
Je vais essayer de fignoler par moi même
Ca peut vouloir dire :
- Ca marche à peu près, je vais finaliser.
- Ca marche pas du tout, je vais me débrouillais seul.
:)
 

lusano

XLDnaute Junior
J'ai besoin de votre j'ai un soucis d'incompatibilité et je ne comprends pas d'ou il vient
Bonjour Lusano,

Si le but n'est pas atteint, peut être qu'une explication précise permettrait de rendre plus clair le problème.

Ca peut vouloir dire :
- Ca marche à peu près, je vais finaliser.
- Ca marche pas du tout, je vais me débrouillais seul.
:)
J'ai un soucis d'incompatibilité et je ne comprends pas d'où il vient
Merci d'avance ☺
 

Pièces jointes

  • test (12).xlsm
    25.9 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Rien compris à votre code.
Vous faites :
VB:
DernL = Cells(Rows.Count, "F").End(xlUp).Row
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. :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD

Discussions similaires

Réponses
21
Affichages
290

Statistiques des forums

Discussions
312 215
Messages
2 086 319
Membres
103 177
dernier inscrit
grizly