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
vire moi ces cochonnerie de locked sur tout les textboxs qui le sont
je te l'ai deja dis me semble til
une fois débloqué
dans le case de la plante
VB:
Private Sub txtB_Change()
'la variable "tous" contient les object textbox de leur frame respective
    Dim critere As Boolean, V
    With mamanFram
        Select Case .Name
        Case "FrCdt":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name

        Case "FrPlante":
            V = Array(.PrixAchatPlante.Value, .CoeffPlante.Value, .PrixAchatPlante.Value, .TransPlante.Value)
            critere = V(0) <> "" And V(1) <> "" And V(2) <> "" And V(3) <> ""
            If critere Then .PRPlante.Value = (CDbl(V(0)) * CDbl(V(1))) + (CDbl(V(2)) * CDbl(V(3)))

        Case "FrPot":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrPlaque":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!


        Case "FrChromo":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrEtiquette":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrEntourage":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!


        Case "FrEmballage":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrTransport":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrAccess":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrMO":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        End Select
    End With
End Sub

regarde
demo.gif


elle est ou la difficulté là
 

eric72

XLDnaute Accro
Merci Patrick mais tu ne dois pas te rappeler que toutes les textbox ne sont pas forcément remplies, donc ça ne va pas.
Ne te prends pas trop la tête, j'ai adapté la méthode de Robert qui me parait , pour moi, plus adaptée.
Je sais que tu ne laches rien mais là !!!
Je ne voudrais pas être responsable d'un pêtage de plomb lol!!!
Tu es extra.
Merci beaucoup
 

patricktoulon

XLDnaute Barbatruc
Merci Patrick mais tu ne dois pas te rappeler que toutes les textbox ne sont pas forcément remplies, donc ça ne va pas.

et ben on fait un replace par 1 si il faut
regarde teste ça dans le mien en délockant bien sur
si ça c'est pas plus simple alors
je les ai testé toute ses frames
les codes c'est toujours la meme chose regarde bien


VB:
Private Sub txtB_Change()
'la variable "tous" contient les object textbox de leur frame respective
    Dim critere As Boolean, V
    With mamanFram
        Select Case .Name
        Case "FrCdt":
             V = Array(.PrixCdt.Value, .TxtSoie.Value, .TxtCordelette.Value, .TxtEtiquetteCarton.Value, CoeffCdt.Value)
            critere = V(0) <> "" And V(1) <> "" And V(2) <> "" And V(3) <> "" And V(4)
            If critere Then .PRCdt = (CDbl(0)) + CDbl(V(1)) + CDbl(V(2)) + CDbl(V(3)) * CDbl(V(4))
        
        Case "FrPlante":
            V = Array(.PrixAchatPlante.Value, .CoeffPlante.Value, .PrixAchatPlante.Value, .TransPlante.Value)
            critere = V(0) <> "" And V(1) <> "" And V(2) <> "" And V(3) <> ""
            If critere Then .PRPlante.Value = (CDbl(V(0)) * CDbl(V(1))) + (CDbl(V(2)) * CDbl(V(3)))

        Case "FrPot":
            V = Array(.PrixPot.Value, .CoeffPot.Value)
            critere = V(0) <> "" And V(1) <> ""
            If critere Then .PRPot.Value = (CDbl(V(0)) * CDbl(V(1)))

        Case "FrPlaque":
            V = Array(.PrixPlaque.Value, .CoeffPlaque.Value, .NbPlantePlaque.Value)
            critere = V(0) <> "" And V(1) <> "" And V(2) <> ""
            If critere Then .PRPlaque = (CDbl(V(0)) * CDbl(V(1))) / CDbl(V(2))

        Case "FrChromo":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrEtiquette":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrEntourage":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!


        Case "FrEmballage":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrTransport":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrAccess":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        Case "FrMO":
            MsgBox mamanFram.Name & vbCrLf & Join(Tout_les_Noms) & vbCrLf & "le textbox N°1 de cette frame est le " & tous(1).Name
            'c'est ici que tu dois faire tes calcul non de dieu !!

        End Select
    End With
End Sub
mais bon j’arrête je vois que tu persiste avec des classes qu'i ne servent a rien
j'ai un peu honte que l'userform UsfModifGeneral que j'ai tout refait se trouve dans la même application de cet userform a 56 classes 😂😂😂
bref je jette tout ton projet puisque tu prend une autre voie je vais m'occuper d'un autre
bonne continuation et bonne chance ;)
 

eric72

XLDnaute Accro
Patrick,
Ne le prends surtout pas mal, il y a juste que c'est le premier qui a résolu mon problème, ce qui ne va pas m'empêcher d'adapter ton code quand même.
En effet vu le boulot que tu as déjà fait il est hors de question de ne pas suivre ta méthode.
Je te tiens au courant et respecte trop ton travail pour tout jeter.
Merci tu es top
Eric
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Je suis sans conteste bien moins balèze que Patrick.
Comme j'ai été absent une bonne partie de l'après-midi. Je suis un peu perdu et je n'ai pas envie de continuer si finalement tu dois employer une autre méthode. Sinon, renvoie moi le dernier fichier et le problème qu'il contient...
 

eric72

XLDnaute Accro
Re,

Je suis sans conteste bien moins balèze que Patrick.
Comme j'ai été absent une bonne partie de l'après-midi. Je suis un peu perdu et je n'ai pas envie de continuer si finalement tu dois employer une autre méthode. Sinon, renvoie moi le dernier fichier et le problème qu'il contient...

Robert,
J'avais un souci lorsque je chargeais une fiche produit avec la combobox CbRecherche dans lequel il n'y avait pas de plaque, j'ai donc mis dans l'initialize de l' Usf NbplantePlaque=1
Vous pouvez me dire ce que vous en pensez.
Voilà la version après modif mais je n'ai pas fini!!!
Merci Robert
 

Pièces jointes

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

patricktoulon

XLDnaute Barbatruc
voilà j'ai corrigé acces

en l'etat quand je tape a la main tout fonctionne

tu me diras les optionals (ceux qui peuvent rester vides)
VB:
Private Sub txtB_Change()
'la variable "tous" contient les object textbox de leur frame respective
    Dim critere As Boolean, V
    With mamanFram
        Select Case .Name
        Case "FrCdt":
            V = Array(.PrixCdt.Value, .TxtSoie.Value, .TxtCordelette.Value, .TxtEtiquetteCarton.Value, .CoeffCdt.Value)
            critere = V(0) <> "" And V(1) <> "" And V(2) <> "" And V(3) <> "" And V(4)
            If critere Then .PRCdt = (CDbl(0)) + CDbl(V(1)) + CDbl(V(2)) + CDbl(V(3)) * CDbl(V(4))

        Case "FrPlante":
            V = Array(.PrixAchatPlante.Value, .CoeffPlante.Value, .PrixAchatPlante.Value, .TransPlante.Value)
            critere = V(0) <> "" And V(1) <> "" And V(2) <> "" And V(3) <> ""
            If critere Then .PRPlante.Value = (CDbl(V(0)) * CDbl(V(1))) + (CDbl(V(2)) * CDbl(V(3)))

        Case "FrPot":
            V = Array(.PrixPot.Value, .CoeffPot.Value)
            critere = V(0) <> "" And V(1) <> ""
            If critere Then .PRPot.Value = (CDbl(V(0)) * CDbl(V(1)))

        Case "FrPlaque":
            V = Array(.PrixPlaque.Value, .CoeffPlaque.Value, .NbPlantePlaque.Value)
            critere = V(0) <> "" And V(1) <> "" And V(2) <> ""
            If critere Then .PRPlaque = (CDbl(V(0)) * CDbl(V(1))) / CDbl(V(2))

        Case "FrChromo":
            If .PrixChromo.Value <> "" Then .PRChromo.Value = .PrixChromo.Value

        Case "FrEtiquette":
            If .PrixEtiquette.Value <> "" Then .PREtiquette.Value = .PrixEtiquette.Value

        Case "FrEntourage":
            If .PrixEntourage.Value <> "" Then .PREntourage.Value = .PrixEntourage.Value

        Case "FrEmballage":
            V = Array(.Mousseline.Value, .Kraft.Value, .DsSmith.Value)
            critere = V(0) <> "" And V(1) <> "" And V(2) <> ""
            If critere Then .PREmballage.Value = CDbl(V(0)) + CDbl(V(1)) + CDbl(V(2))

        Case "FrTransport":
            V = Array(.PoidsPlante.Value, .PrixKgPlante.Value)
            critere = V(0) <> "" And V(1) <> ""
            If critere Then .PRTransport.Value = (CDbl(V(0)) * CDbl(V(1)))

        Case "FrAccess":
            V = Array(.TxtPrixAccessoire.Value, .TxtCoeffAccess.Value)
            critere = V(0) <> "" And V(1) <> ""
            If critere Then .PRAccess.Value = (CDbl(V(0)) * CDbl(V(1)))

        Case "FrMO":
            V = Array(.TxtCoutHrMO.Value, .TxtTempsMO.Value)
            critere = V(0) <> "" And V(1) <> ""
            If critere Then .TxtPrMO.Value = (CDbl(V(0)) * CDbl(V1))
        End Select
    End With
End Sub
voila une classe et tout mes testbox sont géré et même le numeric forcé en même temps
 

eric72

XLDnaute Accro
re
je pense que tu a fait une erreur dans ta formulation sur ta feuille formule a adapter
frame "FrEmballage" PrEmballage= (mousseline+kraft+dssmith)

il me semble qu'il y a des quantités ne doit t on pas les multiplier ???
Si si bien sur mais quand on selectionne dans combobox il fait un vlookup pour le prix unitaire et quand on met une quantité il recalcule le total dans mousseline, kraft et dssmith , regarde le fichier
 

Pièces jointes

  • demo une seule classe pour eric patrick toulon V 1 (2).xlsm
    197.2 KB · Affichages: 0

Discussions similaires

Réponses
10
Affichages
382

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia