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

patricktoulon

XLDnaute Barbatruc
re
tiens jean-marie c'est exactement le MEME sans boucle
là je peut pas faire plus explicit que ça

VB:
Public WithEvents txtb As msforms.TextBox
Dim cl(1 To 4) As New textNUM
Public freres
Public TXTresultat As Object
Function init(uf)
    Dim tous(1 To 4) As Object

    'je le fait sans boucle c'est plus simple a comprendre

    '********************************
  
    Set cl(1).txtb = uf.Controls("t1")   'instance1 pour le textbox "T1"
    Set cl(1).TXTresultat = uf.Controls("TextBox5")   'on inclu le textbox5  qui dans l  instance1 de classe sera surnommé "resultat"
    Set tous(1) = uf.Controls("t1")  '********************************************************
  
    '********************************
  
    Set cl(2).txtb = uf.Controls("t2")    'instance2 pour le textbox "T2"
    Set cl(2).TXTresultat = uf.Controls("TextBox5")    'on inclu le textbox5  qui dans l  instance2 de classe sera surnommé "resultat"
    Set tous(2) = uf.Controls("t2")  '********************************************************
  
    '********************************
  
    Set cl(3).txtb = uf.Controls("t3")    'instance3 pour le textbox "T3"
    Set cl(3).TXTresultat = uf.Controls("TextBox5")   'on inclu le textbox5  qui dans l  instance3 de classe sera surnommé "resultat"
    Set tous(3) = uf.Controls("t3")      'on met dans chaque item de la variable tous un textbox
  
    '********************************
  
    Set cl(4).txtb = uf.Controls("t4")    'instance4 pour le textbox "T4"
    Set cl(4).TXTresultat = uf.Controls("TextBox5")    'on inclu le textbox5  qui dans l instance4 de classe sera surnommé "resultat"
    Set tous(4) = uf.Controls("t4")    'on met dans chaque item de la variable tous un textbox
    '********************************************************

    'maintenant pour le calcul il faut que dans chanque instance les 4  soient reconnus
    'et bien la variable  freres devient la variable tous dans chaque instances
    For Z = 1 To 4: cl(Z).freres = tous: Next    'et maintenant le tableau provisoire(tous) je le réintègre dans chaque instance de classse des textboxdans la variable freres
End Function

'l'event unique tout les textbox
Private Sub txtb_Change()
'ici donc dans cet event unique qui est déclenché par t1,t2,t3,t4 dans le userform
'et bien  on peut donc soit comuniquer l'un avec l'autre   puisque l'instance contient les 4 textboxs
'donc dans chaque declenchement de l'event par l'un aou lautre on peu faire un calcul avec les 4 textboxs 
'comme ci dessous
    For i = 1 To UBound(freres)
        If IsNumeric(freres(i).Value) Then x = x + CDbl(freres(i).Value)
    Next
    TXTresultat = x
End Sub
 

Pièces jointes

  • exemple calse sub classe simple avec 4 testbox +1 version sans boucle .xlsm
    20.7 KB · Affichages: 8

ChTi160

XLDnaute Barbatruc
Re
tu vas dire je l'attendais celle là !

Une question Lol
tu vas dire encore !
mais voilà rien de grave.
Tu fais dans un premier temps :
VB:
  Set cl(1).txtb = uf.Controls("t1")   'instance1 pour le textbox "T1"
Puis tu mets :
Code:
Set tous(1) = uf.Controls("t1")
puis en fin de Procédure tu fais une Boucle :
et ca donne par exemple
Code:
cl(1).freres = tous
Je me dis , mais y'a deux fois le "uf.Controls("t1") " dans cette cl() ?
Alors explique moi pourquoi ce double enregistrement .txtB et .freres Lol
merci par avance
jean marie
 

patricktoulon

XLDnaute Barbatruc
aie aie aie !!!
non !!!
Set tous(1) = uf.Controls("t1") ne met pas le t1 dans la classe
je rempli simplement le la variable tableau "tous" d'object textbox

et c'est après que je met la tableau("tous") ENTIER!!! dans les instance de classe
cl(z).freres = tous

la variable "tous n'a de porté que dans la fonction init qui est elle même fonction instancier par l'instance "cls"
instancié dans le userform
 

ChTi160

XLDnaute Barbatruc
Ok
je vois que tu te maitrises en fin de Journée ( surement la fatigue Lol)
j'ai Compris , ca doit être une satisfaction pour toi Lol
Merci Patrick le "Tous" est Un Tableau Ok
je vais tenter de me faire une représentation graphique de la composition de cette Classe cl() ! ça devrait m'aider Lol
Bonne fin de Soirée
Jean Marie
 

patricktoulon

XLDnaute Barbatruc
je suis dans le userform
en haut de module j'instancie une classe "cls"
je suis dans le activate
avec cette instance de classe j'appelle la fonction init cls.init me

je suis maintenant dans la fonction init
dans cette fonction je suis dans l'instance cls créée dans le userform
il me faut créer chaque instances pour chaque txtbox

conclusion
la reine mère c'est l'instance de classe cls instanciée dans le userform
les fille sont les instances cl(1 to 4)
les enfant des fille donc les petits enfant de cls sont les 4 textboxs(attention en tant que msforms.textbox) que l'on surnommera txtb
les carte d'identité( en tant qu' object cette fois ci ) de ces 4 textbox c'est "tous"
les nom de code pour la mission calcul de ces 4 textbox c'est freres(1),freres(2),freres(3),freres(4)
tu veux detruire tous ça
ben c'est simple dans le userform tu fait set cls=nothing
c'est bon c'est pigé 😂😂😂😂😂😂😂
 

ChTi160

XLDnaute Barbatruc
Re
Oui Merci !
je récupére le texte de ce Post #277 pour imager ce que je dois faire et Comprendre Lol
autant je crée facilement des Classes de Combobox pour des recherches en Cascades , autant je n'avais jamais utilisé cette façon de faire pour des Calculs entre TextBox !
Merci encore
Bonne fin de Soirée
Jean marie
 

patricktoulon

XLDnaute Barbatruc
A l'attention de Eric
regarde le prixvente
demo.gif


et en mode Ajout le l'ai mis a 50% de plus que le coup de revient
 

eric72

XLDnaute Accro
Bonjour Patrick,
C'est bien mais je préfère qu'il soit à 0 et que la personne saisisse à chaque modif sinon c'est source à erreur, d'autant plus que le coeff de marge n'est pas forcément le même pour chaque produit.
Mais merci quand même, tu ne lâches rien toi!!!
Eric
 

patricktoulon

XLDnaute Barbatruc
re
@eric72
😂🤣😅non je lâche rien quand un projet est intéressant


mais je crois que tu n'a pas bien vu je ne change pas la marge
j'ai un coût de revient au départ et un prix de vente précédemment inscrit quand je sélectionne dans la combo
je divise simplement le prix de vente existant de départ par le coutrevient de départ
j'obtient donc le coeff de différence entre les deux
quand je change quelque chose dans les frames je re multiplie le nouveau coutrevient par le coeff
et si tu regarde bien la marge ne change pas ou si peut avec l'arrondi a 2 chiffres
et voila
après en mode ajout je l'ai mis a 50% de plus bon ca c'est toi qui voit mais mon truc fonctionne
il n'y a pas d'erreurs possible surtout que rien n’empêche de le modifier à la main ce textbox "prixdevente"
je pense que c'est cohérent avec l'intention
mais si tu préfère le vide a remplir OK pas de soucis ;)
 

patricktoulon

XLDnaute Barbatruc
ah!.. je me disais aussi
il a perdu la tette je lui fait le calcul auto en mode modif et il le veux pas ??,!!:oops::oops:🤪
il a le covid ou quoi ??,😅😅😂😂🤣🤣

le principe que j'emploi
j'ajoute une variable globale module dans le userform

Public multiplie as double

dans la sub de la combo_click
a la fin avant le end sub je met
multiplie = PrixVente / CoutRevient

dans la sub calculette avant le end sub je met
On Error Resume Next
If multiplie = 0 Then Exit Sub' si c'est zero c'est que l'on a pas selectionner donc mode ajout on sort
PrixVente.Value = CDbl(CoutRevient) * multiplie
Err.Clear


cette sub qui est dans le userform est appellé a chaque declenchement de l'event unique dans la classe
par la sub passerelle gotocalcul
Public Sub GotoCalcul()
'la sub gotocalcul renvoie le calcul dans la sub calculette dans l'userform
UsfProduit.calculette
End Sub



je raz le miultiplie au bouton raz aussi
et voila tu a ton prix de vente automatiquement recalculé en mode modif
finalement c’était pas si compliqué je t'ai mis le prix de vent vide si mode ajout
 

Pièces jointes

  • A_Gestion Fiche Produit Eric72 patrick toulon V 4.0 .xlsm
    241.6 KB · Affichages: 5

Discussions similaires

Réponses
10
Affichages
315

Statistiques des forums

Discussions
311 733
Messages
2 082 010
Membres
101 866
dernier inscrit
XFPRO