Erreur d'enregistrement à partir d'un formulaire
Bonjour à tous,
J'ai besoin de votre concours pour résoudre un message d'enregistrement que j'ai bien ciblé au niveau du code, mais que je n'arrive pas à résoudre après un temps de recherche extrèmement long.
Mon formulaire de saisie "Saisie d'un document" propose de saisir une valeur de main d'oeuvre calculée communément par "Quantité d'heures - Taux horaire".
Je donne la possibilité de valider ces valeurs sous une autre forme de calcul qui est de saisir les "Quantités d'heures ainsi que le montant main d'oeuvre avec calcul cette fois du taux horaire.
Dans cette option je me suis aperçu, que si l'on utilise pour la saisie du montant Main d'oeuvre, le point du pavé numérique il y a un message d'erreur lors de l'enregistrement contrairement à la virgule sur le clavier Alpha.
J'ai ajouté la ligne suivante pour résoudre mon problème du point au lieu de la virgule de la façon suivante :
txtPVMo1.Text = Replace(txtPVMo1.Text, ".", ",")
A partir de cet instant l'enregistrement fonctionne sans message d'erreur, mais il se crée un autre phénomène dans mon formulaire.
Le total marge brute qui est le résultat de ma marge matière et du montant main d'oeuvre, ne totalise pas les centimes de mon montant main d'oeuvre.
A ce stade je sèche...
Si j'arrive à solutionner l'enregistrement, mon montant marge brute total est faux (manque les centimes), si mon formulaire affiche des valeurs correctes, j'ai une erreur d'enregistrement.
La première chose c'est que je ne comprends pas déjà pourquoi il faut que j'ajoute la ligne de code citée plus haut, et éventuellement comment compléter dans mon formulaire mon montant de marge avec les centimes.
Ci-dessous les lignes concernées par mon problème qui se touvent dans le chapitre Ligne Activité 1 et lien de téléchargement pour l'extrait de programme de saisie (C'est juste un extrait de mon programme, il peut s'afficher d'autres messages qu'il n'y a pas lieu de tenir compte.
https://mega.nz/#!VdYkBYAB!o2XhzBTD-2_JXNxl_qwswtHBZtFaxt2vFpULIDKgdks
'Calcul du chapitre Main d'oeuvre
Dim ResultatHeure1 As Double
Dim ResultatTauxMo1 As Double 'Récupère la valeur saisie dans la première hypothèse ou le résultat du calcul dans la deuxième hypothèse
Dim ResultatMO1 As Double 'Variable qui récupère le résultat du calcul nombre d'heures par taux horaire dans la première hypothèse de calcul
Dim ResultatMargeBrute1 As Double
Dim ResultatMargeMat1 As Double
Dim ResultatPVMo1 As Double 'Variable qui récupère le prix de vente MO de la boxe pour calcult du taux horaire dans la deuxième hypothèse de calcul
If Worksheets("Parametres").Range("Critere_Calcul_Mo") = "OUI" Then
'Si paramètre = oui Calcul du prix de vente par la formule Quantité * par Taux horaire
ResultatHeure1 = Val(Me.txtHeureMO1) 'Recupération du nombre d'heures
ResultatTauxMo1 = Val(Me.txtTauxMO1) 'Recupération du taux horaire
ResultatMO1 = ResultatHeure1 * ResultatTauxMo1 'Calcul du montant de la main d'oeuvre
Me.txtPVMo1.Value = ResultatMO1 'Affecttion du montant à la box
Me.txtPVMo1.Value = Format(Me.txtPVMo1.Value, "Standard")
txtPVMo1.Locked = True 'Blocage accès prix de vente Main d'oeuvre
Else 'Si Paramètres égal à non le calcul est Montant main d'oeuvre divisé par le nombre d'heures
txtTauxMO1.BackColor = &HE0E0E0 'On grise la cellule du taux main d'oeuvre
txtPVMo1.BackColor = &HC0FFFF 'On colore en jaune la cellule prix de vente Main d'oeuvre
ResultatHeure1 = Val(Me.txtHeureMO1)
'txtPVMo1.Text = Replace(txtPVMo1.Text, ".", ",") 'Permet de forcer l'affichage par une virgule sinon il y a un message d'erreur à l'enregistrement, le format
'ne semble pas être reconnu. Toutefois si cette ligne est activée, l'enregistrement fonctionne sauf que
'le montant marge brute ne prend pas en compte les centimes du montant MO.
'Je ne comprends pas d'ailleurs pourquoi il faut ajouter cette modification.
'Nous sommes dans l'option du calcul prix de vente main d'oeuvre saisi avec calcul du taux horaire.
'Si dans les paramètres on choisi l'option de calcul du prix de vente calculé par Quantité x Taux horaire
'tout fonctionnne parfaitement bien
ResultatPVMo1 = Val(Me.txtPVMo1)
If ResultatHeure1 <> 0 Then
ResultatTauxMo1 = ResultatPVMo1 / ResultatHeure1
Me.txtTauxMO1.Value = ResultatTauxMo1
ResultatMO1 = ResultatPVMo1 'Cette formule sert à alimenter le calcul de la marge brute totale de la ligne voir chapitre ci-dessous
Else
Me.txtTauxMO1.Value = 0
Me.txtPVMo1.Value = 0 'Evite d'avoir une valeur à vide si les quantités d'heures sont à zéro, sinon il y a un message d'erreur à l'enregistrement
End If
txtTauxMO1.Locked = True
End If
- Messages
- 4'100
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Au lieu de la fonction "Val", utilisez la fonction "CDec" et vous conserverez vos décimales.
Bonjour,
l'utilisation de la fonction Val() convertir bien une chaine de caractères en numérique, mais aussi en entier.
on perd donc les décimales
s'il faut garder ces décimales il faut convertir avec une autre fonction de conversion telle que CDbl() ...
A+
Edit : bonjour thev, désolé!
Si j'utilise la fonction CDBL() OU CDEC() à la place de Val(), j'ai un retour de message d'erreur, je n'ai donc pas compris l'utilisation de cette fonction :
ResultatPVMo1 = CDbl(Me.txtPVMo1)
Pour autant pourriez-vous me dire pourquoi si je ne mets pas cette ligne de code :
txtPVMo1.Text = Replace(txtPVMo1.Text, ".", ",")
j'ai un plantage à la ligne suivante :
ActiveCell.Offset(0, 24).Value = CDbl(Format(Me.txtPVMo1.Value, "# ##0.00"))
Qu'est ce qui peu expliquer que dans la première option de saisie, le "." du pavé numérique ne pose pas de problème et que dans la deuxième option de saisie (Quantité- Montant) l' "." du pavé numérique me pose souci
Je vous remercie pour votre concours....
- Messages
- 4'100
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Si j'utilise la fonction CDBL() OU CDEC() à la place de Val(), j'ai un retour de message d'erreur, je n'ai donc pas compris l'utilisation de cette fonction :
ResultatPVMo1 = CDbl(Me.txtPVMo1)
Il faut d'abord remplacer le "." par la ","
txtPVMo1.Text = Replace(txtPVMo1.Text, ".", ",")
La ligne doit être :
ActiveCell.Offset(0, 24).Value = CDbl(Me.txtPVMo1.Value)
ActiveCell.Offset(0, 24).NumberFormatLocal = "# ##0.00"
Merci pour votre réponse
Remplacer le point par la virgule ça marche, merci pour l'information.
Modifier ActiveCell.Offset(0, 24).Value = CDbl(Me.txtPVMo1.Value)
ActiveCell.Offset(0, 24).NumberFormatLocal = "# ##0.00"
Ca me divise le résultat par cent, je pense que plus exactement ça me tronque les décimales.
J'ai eu l'idée de faire l'opération inverse pour le résultat et de remettre la formule ActivCell en l'état soit :
ResultatPVMo1 = Val(Replace(txtPVMo1.Text, ",", "."))
Tout fonctionne parfaitement bien et bien merci à vous pour votre concours.
Dernier point non majeur, le taux horaire calculé s'affiche avec plein de décimales dans le formulaire, sauriez-vous m'orienter pour un affichage à deux décimales. Ce point n'est pas bloquant, mais plutôt de l’esthétique visuelle.
Bonne journée ou soirée
Bonjour,
Utilises la fonction Round() !
Result = Round(Nombre décimal, nombre de décimales souhaitées)
Bonjour THESE,
J'ai appliqué ta solution qui fonctionne merveilleusement bien. Le sujet est classé.
Je n'avais pas vu ta réponse et j'avais quelque peu laissé tombé.
La présentation est propre à présent.
Merci