Microsoft 365 Calcul TEXTBOX dans Userform

eric72

XLDnaute Accro
Bonjour,
Je cherche à faire des calculs de Textbox dans un Userform en sachant qu'elles ne sont pas toujours toutes renseignées à chaque fois, malgré cela j'aimerais que le calcul se fasse quand même en tenant compte de celles renseignées, donc j'ai adapté ce code mais ça ne va pas.
Ou est la boulette?
Merci à tous
 

Pièces jointes

  • Gestion Fiche Produit test.xlsm
    204 KB · Affichages: 31

eric72

XLDnaute Accro
Bonjour le fil, bonjour le forum,

Tu as très bien compris le principe ! Patrick aura certainement une solution plus efficace... Toutefois. en pièce jointe la version 3 de ton fichier.
J'ai supprimé les Select Case (Name) dans les modules de classes. d'Une part parce qu'ils étaient inutiles puisque les tableaux TTB ne permettaient pas un autre contrôle que ceux concernés et d'autre part parce que maintenant tout fonctionne. J'ai modifié les code des cases d'option Changer Coeff...
Re Bonjour Robert,
J'ai adapté pour toutes les frames et ça marche!!!
Par contre j'ai voulu en faire une TB9ClassCoutRevient qui ne se calcule pas, c'est peut-être parce qu'elle fait référence à CoutRevient qui n'est pas dans une frame?
Merci
Eric
 

Pièces jointes

  • Gestion Fiche Produit test Robert.xlsm
    376.2 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
re
a ben sur celui là la combobox ne se remplie meme plus
bref

ce que j'essaie de t'expliquer depuis des plombes
c'est par exemple
dans la classe emballage je vois ceci
VB:
Option Explicit
Public WithEvents TB6 As MSForms.TextBox 'définit l'instance de classe (les Textboxes de la classe)

Private Sub TB6_Change()
Dim V1 As Double, V2 As Double, V3 As Double  'déclare les variables V1 à V5

If UsfProduit.Mousseline = "" Then V1 = 0 Else V1 = CDbl(UsfProduit.Mousseline) 'si le contrôle est vide, définit la variable V1
If UsfProduit.Kraft = "" Then V2 = 0 Else V2 = CDbl(UsfProduit.Kraft) 'si le contrôle est vide, définit la variable V2
If UsfProduit.DsSmith = "" Then V3 = 0 Else V3 = CDbl(UsfProduit.DsSmith) 'si le contrôle est vide, définit la variable V3
UsfProduit.PREmballage = (V1 + V2 + V3) 'renvoie le calcul dans le contrôle PRPlante
End Sub
tu peux m'expliquer a quoi ça sert de coder l'event change d'un textbox dans une classe si c'est pour qu'un seul textbox ???

moi je peux te le dire; autant le faire dans l'event d'origine dans le userform
et c'est comme ça pour pratiquement toute les classes sauf les operation qui différent
Absolument inutile
je sais pas qui t'a pondu ça mais c'est brouette pour transporter trotinette 🤔🤔🤔🤔🤔🤔

bref si ça te convient tant mieux pour toi ,je pas perdre mon temps c'est trop brouillon pour moi désolé
je te fait un truc vide avec ma classe comme ca il n'y aura aucun autre code que ma classe
pour que tu comprenne le principe d'une classe (le vrai)
 

eric72

XLDnaute Accro
Bonjour le fil, bonjour le forum,

Tu as très bien compris le principe ! Patrick aura certainement une solution plus efficace... Toutefois. en pièce jointe la version 3 de ton fichier.
J'ai supprimé les Select Case (Name) dans les modules de classes. d'Une part parce qu'ils étaient inutiles puisque les tableaux TTB ne permettaient pas un autre contrôle que ceux concernés et d'autre part parce que maintenant tout fonctionne. J'ai modifié les code des cases d'option Changer Coeff...
il y a juste (V4 / V5) ça qui bloque!!!
 

eric72

XLDnaute Accro
re
a ben sur celui là la combobox ne se remplie meme plus
bref

ce que j'essaie de t'expliquer depuis des plombes
c'est par exemple
dans la classe emballage je vois ceci
VB:
Option Explicit
Public WithEvents TB6 As MSForms.TextBox 'définit l'instance de classe (les Textboxes de la classe)

Private Sub TB6_Change()
Dim V1 As Double, V2 As Double, V3 As Double  'déclare les variables V1 à V5

If UsfProduit.Mousseline = "" Then V1 = 0 Else V1 = CDbl(UsfProduit.Mousseline) 'si le contrôle est vide, définit la variable V1
If UsfProduit.Kraft = "" Then V2 = 0 Else V2 = CDbl(UsfProduit.Kraft) 'si le contrôle est vide, définit la variable V2
If UsfProduit.DsSmith = "" Then V3 = 0 Else V3 = CDbl(UsfProduit.DsSmith) 'si le contrôle est vide, définit la variable V3
UsfProduit.PREmballage = (V1 + V2 + V3) 'renvoie le calcul dans le contrôle PRPlante
End Sub
tu peux m'expliquer a quoi ça sert de coder l'event change d'un textbox dans une classe si c'est pour qu'un seul textbox ???

moi je peux te le dire; autant le faire dans l'event d'origine dans le userform
et c'est comme ça pour pratiquement toute les classes sauf les operation qui différent
Absolument inutile
je sais pas qui t'a pondu ça mais c'est brouette pour transporter trotinette 🤔🤔🤔🤔🤔🤔

bref si ça te convient tant mieux pour toi ,je pas perdre mon temps c'est trop brouillon pour moi désolé
je te fait un truc vide avec ma classe comme ca il n'y aura aucun autre code que ma classe
pour que tu comprenne le principe d'une classe (le vrai)
Ah oui bien sur il n'y a pas d'intérêt, j'ai juste mis tous les résultats des textbox "PRIX REVIENT" mais importe la méthode dès l'instant ou c'est efficace.
Je suis juste un peu perdu c'est tout, lol!!!
 

eric72

XLDnaute Accro
Bonjour le fil, bonjour le forum,

Tu as très bien compris le principe ! Patrick aura certainement une solution plus efficace... Toutefois. en pièce jointe la version 3 de ton fichier.
J'ai supprimé les Select Case (Name) dans les modules de classes. d'Une part parce qu'ils étaient inutiles puisque les tableaux TTB ne permettaient pas un autre contrôle que ceux concernés et d'autre part parce que maintenant tout fonctionne. J'ai modifié les code des cases d'option Changer Coeff...
En fait il divise par 0 (il ne prend pas en compte le Nbplanteplaque) alors que dans TB4ClassPlaque il n'y a pas de problème!!!
Merci
Eric
 

eric72

XLDnaute Accro
re
a ben sur celui là la combobox ne se remplie meme plus
bref

ce que j'essaie de t'expliquer depuis des plombes
c'est par exemple
dans la classe emballage je vois ceci
VB:
Option Explicit
Public WithEvents TB6 As MSForms.TextBox 'définit l'instance de classe (les Textboxes de la classe)

Private Sub TB6_Change()
Dim V1 As Double, V2 As Double, V3 As Double  'déclare les variables V1 à V5

If UsfProduit.Mousseline = "" Then V1 = 0 Else V1 = CDbl(UsfProduit.Mousseline) 'si le contrôle est vide, définit la variable V1
If UsfProduit.Kraft = "" Then V2 = 0 Else V2 = CDbl(UsfProduit.Kraft) 'si le contrôle est vide, définit la variable V2
If UsfProduit.DsSmith = "" Then V3 = 0 Else V3 = CDbl(UsfProduit.DsSmith) 'si le contrôle est vide, définit la variable V3
UsfProduit.PREmballage = (V1 + V2 + V3) 'renvoie le calcul dans le contrôle PRPlante
End Sub
tu peux m'expliquer a quoi ça sert de coder l'event change d'un textbox dans une classe si c'est pour qu'un seul textbox ???

moi je peux te le dire; autant le faire dans l'event d'origine dans le userform
et c'est comme ça pour pratiquement toute les classes sauf les operation qui différent
Absolument inutile
je sais pas qui t'a pondu ça mais c'est brouette pour transporter trotinette 🤔🤔🤔🤔🤔🤔

bref si ça te convient tant mieux pour toi ,je pas perdre mon temps c'est trop brouillon pour moi désolé
je te fait un truc vide avec ma classe comme ca il n'y aura aucun autre code que ma classe
pour que tu comprenne le principe d'une classe (le vrai)

Patrick,
Je comprends tout à fait ton point de vue mais compte tenu de ton niveau, un débutant comme moi n'arrive pas toujours à assimiler toutes ces astuces.
J'ai adapté la méthode de Robert, peut être plus lourde que la tienne mais plus facile à assimiler pour moi, même si dans la frame PLAQUE le calcul ne se fait que pour certaines Références de plaque, bizarre!!!
Je vais attendre qu'il veuille bien me dépatouiller...
Dans tous les cas, merci beaucoup pour le temps consacré et ta gentillesse, vous êtes tous d'une aide inégalable.
(Je mets quand même la méthode Robert au cas ou!!!)
Merci merci et encore Merci.
Eric
 

Pièces jointes

  • Gestion Fiche Produit test Robert.xlsm
    376.2 KB · Affichages: 2

patricktoulon

XLDnaute Barbatruc
Bon pour la demo j'ai viré tout les codes et classes et tout et tout
dans la classe au change juste pour la demo j'ai mis un msgbox tu l'enlevera
et tu codera ton operation dans chaque case en fonction de la frame
tu a a dispo la variable "tous" qui est un array d'object textbox
je t'explique un exemple de codage a la fin du module classe
et voilà une classe qui gere tout les textbox numerique de toute les frames
certains ne fonctionne pas par ce qu'ils ont le "locked" a true

je t'ai mâché tout le boulot tu n'a plus qu'a remettre tes operation dans les case et basta

et non de dieu code moi ca en dur si "tous" n'a pas les textbox dans le bon ordre il on été placé dans l'ordre du tabindex tel que tu les a construit

dis moi encore que je fait compliqué 🤣🤣🤣🤣
 

Pièces jointes

  • demo une seule classe pour eric patrick toulon V 1 .xlsm
    178.6 KB · Affichages: 5

eric72

XLDnaute Accro
Je t'avais bien dit que j'étais trop bête j'ai essayé:

Case "FrPlante":
' MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
PRPlante = (.PrixAchatPlante.Value * .CoeffPlante.Value) + (.PrixAchatPlante.Value * .TransPlante.Value)

Mais aussi ça
(.PrixAchatPlante.Value * .CoeffPlante.Value) + (.PrixAchatPlante.Value * .TransPlante.Value)

mais ça ne marche pas!!!
Désolé
 

eric72

XLDnaute Accro
- Le résultat dans textbox "PrPlante"
- le
Private Sub TxtB_KeyPress(ByVal keyascii As MSForms.ReturnInteger)
ne marche pas
- Pour le pot j'ai mis ça,
PRPot = (.PrixPot.Value) * (.CoeffPot.Value)

ça ne bug pas mais le calcul ne se fait pas
 

eric72

XLDnaute Accro
Bonjour le fil, bonjour le forum,

Tu as très bien compris le principe ! Patrick aura certainement une solution plus efficace... Toutefois. en pièce jointe la version 3 de ton fichier.
J'ai supprimé les Select Case (Name) dans les modules de classes. d'Une part parce qu'ils étaient inutiles puisque les tableaux TTB ne permettaient pas un autre contrôle que ceux concernés et d'autre part parce que maintenant tout fonctionne. J'ai modifié les code des cases d'option Changer Coeff...
Re Robert,
J'ai trouvé, il suffisait de mettre à NbPlanteplaque à 1 si il était =""
Par contre quand je recherche un produit qui n'avait pas de plaque pour le modifier avec la combobox , ça bug, oups!!!!
Pour le reste c'est top.
Eric
 

Discussions similaires

Réponses
10
Affichages
352

Statistiques des forums

Discussions
312 156
Messages
2 085 819
Membres
102 992
dernier inscrit
KOSTIC