Microsoft 365 Userform Actualisation de calcul

eric72

XLDnaute Accro
Bonjour,
J'ai un userform nommé "UsfProduit" dans lequel j'aimerais qu'à chaque changement de prix de revient d'une catégorie, exemple plante ou pot ou plaque etc...
La textbox "CoutRevient" recalcul automatiquement le code suivant en sachant que toutes les catégories ne sont pas obligatoirement remplies à chaque fois.

Private Sub PRPlante_Change()
On Error Resume Next
PRPlante.Value = Format(PRPlante.Value, "0.000 €")
With CoutRevient
.Value = 0
.Value = Format(CDbl(PrixAchatPlante) + (CDbl(PrixAchatPlante) * CDbl(TransPlante)) + CDbl(PrixPot) + (CDbl(PrixPlaque) / CDbl(NbPlantePlaque)) _
+ (CDbl(TxtCoutHrMO) * CDbl(TxtTempsMO)) + CDbl(PrixChromo) + CDbl(PrixEntourage) + CDbl(PrixEtiquette) + CDbl(PrixCdt) + CDbl(TxtSoie) + CDbl(TxtCordelette) + _
CDbl(TxtEtiquetteCarton) + CDbl(Mousseline) + CDbl(Kraft) + CDbl(DsSmith) + CDbl(TxtPrixAccessoire) + (CDbl(PoidsPlante) * CDbl(PrixKgPlante)), "0,00 €")
End With
End Sub
Voilà 3 heures que j'essaie un peu tout et je ne m'en sors pas!!!
Merci beaucoup pour votre aide une nouvelle fois.
Eric
 

Pièces jointes

  • Fiche Produit TEST.xlsm
    342.8 KB · Affichages: 7

fanfan38

XLDnaute Barbatruc
Bonjour
Il y a beaucoup d'erreur dans tes macros
Si tu mets un "on error resume next"
à la fin de la macro tu dois mettre un "on error goto 0" (zéro)
si tu mets 0 dans un textbox il ne faut pas mettre if textbox=0 mais
if textbox="0" et si tu as mis format(textbox,"0.00 €") tu dois mettre
if textbox="0.00 €"
Pour ton problème pourquoi faire ce calcul
il faut mieux mettre
VB:
Sub prixrevient()
  Dim A As Double, B As Double, C As Double, D As Double, E As Double, F As Double
  Dim G As Double, H As Double, I As Double, J As Double, K As Double
  If Me.PRPlante <> "0" Then A = CDbl(Me.PRPlante)
  If Me.PRPot <> "0" Then B = CDbl(Me.PRPot)
  If Me.PRPlaque <> "0" Then C = CDbl(Me.PRPlaque)
  If Me.TxtPrMO <> "0" Then D = CDbl(Me.TxtPrMO)
  If Me.PRChromo <> "0" Then E = CDbl(Me.PRChromo)
  If Me.PREntourage <> "0" Then F = CDbl(Me.PREntourage)
  If Me.PREtiquette <> "0" Then G = CDbl(Me.PREtiquette)
  If Me.PRCdt <> "0" Then H = CDbl(Me.PRCdt)
  If Me.PREmballage <> "0" Then I = CDbl(Me.PREmballage)
  If Me.PRAccess <> "0" Then J = CDbl(Me.PRAccess)
  If Me.PRTransport <> "0" Then K = CDbl(Me.PRTransport)
  Me.CoutRevient.Value = Format(A + B + C + D + E + F + G + H + I + J + K, "0.000€")
End Sub
et dans les macros des prix de revient
Code:
Private Sub PRPlante_Change()
If Me.PRPlante.Value = "0" Then Exit Sub
Me.PRPlante.Value = Format(Me.PRPlante.Value, "0.000 €")
prixrevient
End Sub

A+ François
 

eric72

XLDnaute Accro
Bonjour Fanfan
Merci pour votre réponse mais j'ai essayé pleins de choses c'est pour cela.
Concernant votre solution je vais essayé, par contre dans mon code il y a aussi des divisions, multiplications
et pas forcément avec les Txt "PR", mais aussi avec d'autres Txt, par exemple " (CDbl(PrixAchatPlante) * CDbl(TransPlante))"


Format(CDbl(PrixAchatPlante) +
(CDbl(PrixAchatPlante) * CDbl(TransPlante)) +
CDbl(PrixPot) +
(CDbl(PrixPlaque) / CDbl(NbPlantePlaque)) +
(CDbl(TxtCoutHrMO) * CDbl(TxtTempsMO)) +
CDbl(PrixChromo) +
CDbl(PrixEntourage) +
CDbl(PrixEtiquette) +
CDbl(PrixCdt) +
CDbl(TxtSoie) +
CDbl(TxtCordelette) +
CDbl(TxtEtiquetteCarton) +
CDbl(Mousseline) +
CDbl(Kraft) + C
Dbl(DsSmith) +
CDbl(TxtPrixAccessoire) +
(CDbl(PoidsPlante) * CDbl(PrixKgPlante)), "0,00 €")
J'espère être assez clair
Merci beaucoup
Eric
 

fanfan38

XLDnaute Barbatruc
J'ai vu mais ces divisions et multiplications ont pour but de changer le prix de revient correspondant
Donc on traite une chose à la fois
VB:
Private Sub PrixAchatPlante_change()
  If CoeffPlante <> 0 And TransPlante <> 0 And PrixAchatPlante <> "" Then
    CoeffPlante = 0
    TransPlante = 0
    PRPlante = 0
    Me.PRPlante = (CDec(Me.PrixAchatPlante) * CDec(Me.CoeffPlante)) + (CDec(Me.PrixAchatPlante) * CDec(Me.TransPlante))
   Else
    CoeffPlante = 0
    TransPlante = 0
    PRPlante = 0
  End If
End Sub
Regarde cette macro.
tu mets coeffplante=0 ensuite tu mets (CDec(Me.PrixAchatPlante) * CDec(Me.CoeffPlante))
devine la réponse
A+ François
 
Dernière édition:

eric72

XLDnaute Accro
En fait le "Cout de revient" ne tient pas compte des coefficients c'est pour cela que je ne peux pas prendre en référence les PRPlante, PRPot, PRPlaque etc... Je suis donc forcé de passer par des multiplications, additions et divisions...
j'essaie d'adapter votre code et je reviens vers vous.

Merci encore
Eric
 

eric72

XLDnaute Accro
Pensez-vous que je puisse adapter le code comme cela :
Dim A As Double, B As Double, C As Double, D As Double, E As Double, F As Double
Dim G As Double, H As Double, I As Double, J As Double, K As Double, K As Double
Dim L As Double, M As Double, N As Double, O As Double, P As Double
Dim Q As Double, R As Double, S As Double, T As Double, U As Double
If Me.PRPlante <> "0" Then A = CDbl(Me.PRPlante)
If Me.PrixAchatPlante <> "0" Then B = CDbl(Me.PrixAchatPlante)
If Me.TransPlante <> "0" Then C = CDbl(Me.TransPlante)
If Me.PrixPot <> "0" Then D = CDbl(Me.PrixPot)
If Me.NbPlantePlaque <> "0" Then E = CDbl(Me.NbPlantePlaque)
If Me.PrixPlaque <> "0" Then F = CDbl(Me.PrixPlaque)
If Me.TxtPrMO <> "0" Then G = CDbl(Me.TxtPrMO)
If Me.TxtCoutHrMO <> "0" Then H = CDbl(Me.TxtCoutHrMO)
If Me.PrixChromo <> "0" Then I = CDbl(Me.PrixChromo)
If Me.PrixEntourage <> "0" Then J = CDbl(Me.PrixEntourage)
If Me.PrixEtiquette <> "0" Then K = CDbl(Me.PrixEtiquette)
If Me.PrixCdt <> "0" Then L = CDbl(Me.PrixCdt)
If Me.TxtSoie <> "0" Then M = CDbl(Me.TxtSoie)
If Me.TxtCordelette <> "0" Then N = CDbl(Me.TxtCordelette)
If Me.TxtEtiquetteCarton <> "0" Then O = CDbl(Me.TxtEtiquetteCarton)
If Me.Mousseline <> "0" Then P = CDbl(Me.Mousseline)
If Me.Kraft <> "0" Then Q = CDbl(Me.Kraft)
If Me.DsSmith <> "0" Then R = CDbl(Me.DsSmith)
If Me.TxtPrixAccessoire <> "0" Then S = CDbl(Me.TxtPrixAccessoire)
If Me.PoidsPlante <> "0" Then T = CDbl(Me.PoidsPlante)
If Me.PrixKgPlante <> "0" Then U = CDbl(Me.PrixKgPlante)
Me.CoutRevient.Value = Format(B + (B * C) + D + (F / E) + (G * H) + I + J + K + L + M + N + O + P + Q + R + S + (T * U), "0.000€")
Merci
Eric
 

TooFatBoy

XLDnaute Barbatruc
C'était juste une remarque en passant : si tu utilises la balise "code=vb", on pourra mieux lire ton code. C'est tout. 😉

Exemple :
VB:
Dim A As Double, B As Double, C As Double, D As Double, E As Double, F As Double
Dim G As Double, H As Double, I As Double, J As Double, K As Double, K As Double
Dim L As Double, M As Double, N As Double, O As Double, P As Double
Dim Q As Double, R As Double, S As Double, T As Double, U As Double
If Me.PRPlante <> "0" Then A = CDbl(Me.PRPlante)
If Me.PrixAchatPlante <> "0" Then B = CDbl(Me.PrixAchatPlante)
If Me.TransPlante <> "0" Then C = CDbl(Me.TransPlante)
If Me.PrixPot <> "0" Then D = CDbl(Me.PrixPot)
If Me.NbPlantePlaque <> "0" Then E = CDbl(Me.NbPlantePlaque)
If Me.PrixPlaque <> "0" Then F = CDbl(Me.PrixPlaque)
If Me.TxtPrMO <> "0" Then G = CDbl(Me.TxtPrMO)
If Me.TxtCoutHrMO <> "0" Then H = CDbl(Me.TxtCoutHrMO)
If Me.PrixChromo <> "0" Then I = CDbl(Me.PrixChromo)
If Me.PrixEntourage <> "0" Then J = CDbl(Me.PrixEntourage)
If Me.PrixEtiquette <> "0" Then K = CDbl(Me.PrixEtiquette)
If Me.PrixCdt <> "0" Then L = CDbl(Me.PrixCdt)
If Me.TxtSoie <> "0" Then M = CDbl(Me.TxtSoie)
If Me.TxtCordelette <> "0" Then N = CDbl(Me.TxtCordelette)
If Me.TxtEtiquetteCarton <> "0" Then O = CDbl(Me.TxtEtiquetteCarton)
If Me.Mousseline <> "0" Then P = CDbl(Me.Mousseline)
If Me.Kraft <> "0" Then Q = CDbl(Me.Kraft)
If Me.DsSmith <> "0" Then R = CDbl(Me.DsSmith)
If Me.TxtPrixAccessoire <> "0" Then S = CDbl(Me.TxtPrixAccessoire)
If Me.PoidsPlante <> "0" Then T = CDbl(Me.PoidsPlante)
If Me.PrixKgPlante <> "0" Then U = CDbl(Me.PrixKgPlante)
Me.CoutRevient.Value = Format(B + (B * C) + D + (F / E) + (G * H) + I + J + K + L + M + N + O + P + Q + R + S + (T * U), "0.000€")
 

Statistiques des forums

Discussions
312 104
Messages
2 085 347
Membres
102 868
dernier inscrit
JJV