Exercice avec fonctions
Bonjour le forum,
Dans le cadre d'un exercice vba dans mon école nous devons :
Concevoir une procédure qui calcule la paie selon les spécifications suivantes :
a. Le nombre d’heures travaillé est lu en B1.
b. Le salaire horaire est lu en B2.
c. Le salaire horaire est majoré de 50 % pour toute heure travaillée au-delà de la 35e
heure.
d. Le salaire brut est affiché en B3.
e. La retenue d’impôt et les prélèvements sociaux correspondent à 48% du salaire brut
pour un travail de moins de 35 heures. Dans le but de favoriser un partage du travail,
l’excédent à 35 heures est imposé à 73%.
f. Le salaire net est affiché en B4.
Voila ce que j'ai fait :
"Option Explicit
Function CalculeEcheance(nbheures As Long, salairehoraire As Long, salairebrut As Long, retenuimpot As Long, salairenet As Long) As Long
End Function
Sub paie()
Dim nbheures As Long
Dim salairehoraire As Long
Dim salairebrut As Long
Dim retenuimpot As Long
Dim salairenet As Long
nbheures = Range("B1").Value
salairehoraire = Range("B2").Value
salairebrut = Range("B3").Value
retenuimpot = Range("B5").Value
salairenet = Range("B4").Value
nbheures -35 * salairebrut * 1, 50 + nbheures * salairehoraire = salairebrut
salairebrut * 0,48 = retenuimpot
nbheures -35 * retenuimpot * 0.73 = salairenet
End SubVoici une image de la vue excel :
Le problème que cela ne fonctionne pas mais je pense que c'est parce que j'ai mal utilisé la fonction. Pouvez-vous me venir en aide svp ?
Je vous met le fichier excel en pièces jointes. Merci par avance,
Bonsoir,
Je ne sais pas si la meilleure solution est de faire les devoirs à ta place...
Si on vous a posé cette question, c'est que ça a été vu en cours, non?
Bref, peut-être qu'une personne bien intentionnée va te donner la solution, mais est-ce que cela te sera profitable?
Bon courage
Bonjour, merci pour votre retour. Comme vous avez pu le voir, j’ai essayé de faire l’exercice mais je n’y suis pas parvenu. J’aimerais juste comprendre l’erreur dans mon code. Et en plus c’est un exercice qui est censé nous entraîner pour un partiel, d’où l’intérêt que je comprenne mes erreurs.
Bonne soirée,
Bonjour,
Comme le dit Cousin on ne peut pas faire les devoirs pour vous. Il vous appartient de savoir ce qu'est une variable et à quoi elle sert. Vous les avez bien déclarées mais ça se gâte pour leur définition. Vous attribuez la bonne valeur aux variables
nbheures = Range("B1").Value
salairehoraire = Range("B2").Value
puisque vous leur attribuez la valeur inscrite dans chacune des cellules. Avec ces boîtes (variables) dans lesquelles on place des informations on peut faire des calculs.
Pour ce qui est de la variable salairebrut en faisant comme vous faites vous lui attribuez la valeur 0 puisqu'il n'y a rien du tout en cellule "B3".
Je ne suis pas un balaise du VBA mais à mon avis c'est à ce moment que vous commencer à faire l'erreur. Il faut connaître la définition du "Salaire brut". D'après vous comment pouvez-vous le calculer car la valeur du salaire brut ne viendra que d'un calcul. Et il faudra le calculer avec les deux premières variables.
Je ne vous ai pas donner la solution mais j'essaie de vous guider dans votre réflexion.
Il y a un autre problème important. Lorsqu'on définit une valeur à un variable on doit faire variable = calcul et non pas calcul = variable.
Dans votre code j'ai vraiment l'impression que vous utilisez la formule calcul = variable ce qui ne convient pas.
Si je me trompe j'aimerai que quelqu'un rectifie ma réflexion.
Je pense qu'il est possible d'aider Ovale619 de cette manière.
Bonjour,
Premièrement, vous avez une macro CalculeEcheance qui est vide et n’appelle rien et n’est pas appelée. A quoi sert-elle ?
Pour la macro paie()
Au moment où vous lisez ces cellules, elles sont vides, cela ne sert donc à rien
salairebrut = Range("B3").Value
retenuimpot = Range("B5").Value
salairenet = Range("B4").ValueEnsuite, vous inverser vos affectations variables
nbheures -35 * salairebrut * 1, 50 + nbheures * salairehoraire = salairebrut
salairebrut * 0,48 = retenuimpot
nbheures -35 * retenuimpot * 0.73 = salairenetLa bonne méthode, dans votre cas, c’est, le nom de la variable, suivi du symbole d’affectation (=) suivi de la valeur a affecter ou le calcul, bien sûr :
nomVariable = Calcul à effectué
Enfin, comme il s’agit d’un développement procédural, vous devez effectuer les choses les unes après les autres, ici, à l’issue de vos calculs, vous ne les affichez pas.
Et je ne saurais que vous conseiller, puisque vous débutez dans la programmation, de prendre immédiatement les bonnes habitudes de nommer correctement vos variables pour accroître la lisibilité de votre code, soit en utilisant le camelCase, soit le snake_case, à vous de choisir, mais c’est un conseil, et n’hésitez pas, non plus, à commenter votre code.
Pour vous mettre sur la piste, voici un début de code que vous pourriez utiliser et compléter.
Sub paie()
Dim nbHeures As Integer
Dim salaireHoraire As Integer
Dim heuresNormales As Byte
Dim heuresSup As Integer
Dim salaireBrut As Integer
nbHeures = Range("B1")
salaireHoraire = Range("B2")
heuresNormales = 0
heuresSup = 0
salaireBrut = 0
' Nous vérifions si le nombre d'heures prestées est
' supérieur à 35, si tel est le cas, nous bornons
' le nombre d'heure à 35, sinon, nous récupérons la
' totalité des heures.
If nbHeures > 35 Then
heuresNormales = 35
heuresSup = nbHeures - 35
Else
heuresNormales = nbHeures
heuresSup = 0
End If
' Nous calculons le salaire brut et l'affichons dans la cellule B3
salaireBrut = (heuresNormales * salaireHoraire) + (heuresSup * (salaireHoraire * 1.5))
Range("B3").Value = Format(salaireBrut, "0,00")
End subBien sur, vous pourriez, pour pratiquer, découper votre code à l'aide de petites fonctions, par exemple :
repartitionHeures() ' Pour repartir les heures en heuresNormales et en heuresSupp
calculSalaireBrut()
calculRetenues()
calculSalaireNet()
...
Cordialement
Merci à tous, j'ai finalement réussi à rendre mon code fonctionnel. Je vous remercie pour votre aide précieuse.
Bonne soirée à vous,