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

excel1 excel2 excel3

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

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....

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.

formulairedecimales

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

Rechercher des sujets similaires à "erreur enregistrement partir formulaire"