XL 2013 Comment appliquer le même code à plusieurs textbox dans un userforme

youguybass

XLDnaute Nouveau
Bonjour

Je vous joints mon fichier qui fonctionne , mais que j'aimerais simplifier au niveau des codes très répétitifs

D'avance merci
 

Pièces jointes

  • 0040-Base de donnée Outillage Lacour.xlsm
    28.1 KB · Affichages: 12
Solution
re
voilà un premier jet version 1.0
  1. j'ai ajouté la possibilité de taper la date a la main avec surveillance d'erreur de date erroné instantanée(ça vient tout droit de ma collection textbox formatés)
  2. je t'ai classé intra userform tout les textboxs dates il y a donc un seul event pour ces textboxs
  3. je t'ai classé les textbox 21 à 30 et 41 à 50 les(Temps/poids et temps Map) là aussi un seul event
  4. je t'ai classé les textbox 51 à 60 (les résultats de ligne ) là au ssi un seul event
  5. j'ai ré écris les deux fonctions de calcul en fonction de ce nouveau contexte
  6. j'ai laissé l'event textbox61 qui est tout seul pour le formatage (c'est pas une bonne idée en vue d'un transfert sur feuille) mais je te laisse décider...

patricktoulon

XLDnaute Barbatruc
re
Bonsoir
déjà perso les event des textbox pour date sont inutiles a moins que tu soit au bangladeshi et que tu est un autre format de date System que le format français
ensuite la on parle de classe controls pour qu'un seul event unique control tout les textextbox
pas très compliqué a réaliser
j'ai reduit ton code a ceci
a toi de re ecrire tes fonctions somme , total les dates laisse les tranquille
VB:
Option Explicit
Public WithEvents txttotal As MSForms.TextBox
Public WithEvents txtsomme As MSForms.TextBox
Public WithEvents txtDate As MSForms.TextBox
Dim C As Integer, D As Integer, E As Integer, lCol As Long, lCal As Long, a As Integer, F As Integer
Dim lo As ListObject
Dim li As ListObject, lb As ListObject
Dim lu As ListObject
Dim cls() As New Page12_2ModifDossierRealOutil
Private Sub UserForm_Initialize()
'Me.TxtNumDossier = ActiveCell
'D = 250
For C = 1 To 10
Me.Controls("TextBox" & C).Locked = True
'D = D + 1
Next
End Sub

Private Sub UserForm_Activate()
Dim i&, a&
For i = 11 To 20: a = a + 1: ReDim Preserve cls(1 To a): Set cls(a).txtDate = Me.Controls("TextBox" & i): Next
For i = 31 To 40: a = a + 1: ReDim Preserve cls(1 To a): Set cls(a).txtDate = Me.Controls("TextBox" & i): Next
For i = 21 To 30: a = a + 1: ReDim Preserve cls(1 To a): Set cls(a).txtsomme = Me.Controls("TextBox" & i): Next
For i = 41 To 50: a = a + 1: ReDim Preserve cls(1 To a): Set cls(a).txtsomme = Me.Controls("TextBox" & i): Next
For i = 51 To 60: a = a + 1: ReDim Preserve cls(1 To a): Set cls(a).txttotal = Me.Controls("TextBox" & i): Next

End Sub

Private Sub txtDate_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 'evenement unique pour les textboxs 11 à 20 et  31 à 40
txtDate = Date
End Sub


Private Sub txttotal_Change() 'evenement unique pour les textboxs 51 à 60
Call CalculTotal
End Sub

Private Sub txtsomme_Change() 'evenement unique pour les textboxs 21 à 30 et  41 à 50
Call CalculSomme
End Sub

Private Sub CommandButton1_Click()
If MsgBox("Voulez-vous sortir sans enregistrer?", vbYesNo, "Demande de confirmation") = vbYes Then
Unload Me
End If
End Sub


Private Sub TextBox61_Change()
TextBox61.Text = Format(TextBox61, "# ###,## €")
End Sub



Sub CalculSomme()
'te reste plus qu'a re écrire tes fonction au propre ici
MsgBox " on calcul somme  ici"
End Sub


Sub CalculTotal()
'te reste plus qu'a re écrire tes fonction au propre ici
MsgBox "calcul total ici"
End Sub
 

youguybass

XLDnaute Nouveau
Bonjour et merci
Dans Sub Calculsomme
Je ne sais pas comment intégré la formule, le calcul est simple, il consiste à :
Textbox51 = Textbox1 *( Textbox21+ Texbox41) ....

Le sub CalculTotal
Consiste a ajouter les textbox, de la 51 à 60

Mais encore une fois la également, je ne sais pas comment taper la formule .

D'avance merci
 

youguybass

XLDnaute Nouveau
Pour sub CalculTotal
J'avais fait une boucle de 1 à 10 pour C
Me.Controls("TextBox" & C + 50).Value = Me.Controls("TextBox" & C).Value * (Me.Controls("TextBox" & C + 20) + Val(Me.Controls("TextBox" & C + 40)))


Pour Sub CalculTotal
TextBox61 = TextBox51 + TextBox52 + TextBox53 + TextBox54 + TextBox55 + TextBox56 + TextBox57 + TextBox58 + TextBox59 + TextBox60

Voilou
 

patricktoulon

XLDnaute Barbatruc
re
déjà voila pour le calcul total des testbox 51 à 60
VB:
Sub CalculTotal()
    Dim x#, i&, p#
    For i = 51 To 60
        With Page12_2ModifDossierRealOutil.Controls("TextBox" & i)
            If .Value = "" Then p = 0 Else p = CDbl(.Value)
            x = x + p
      End With
     Next
     Page12_2ModifDossierRealOutil.TextBox61 = x
End Sub
 

patricktoulon

XLDnaute Barbatruc
pour les ligne on va penser autrement
il n'est pas utile de boucler sur tout les textbox pour calculer une seule ligne a chaque fois
je vais repenser ça
si je comprends bien
c'est pour ligne 1
textbox51=textbox1*(textbox21+textbox41)
pour ligne2 c'est
textbox52=textbox2*(textbox22+textbox42)
etc...etc....
 

patricktoulon

XLDnaute Barbatruc
re
voilà un premier jet version 1.0
  1. j'ai ajouté la possibilité de taper la date a la main avec surveillance d'erreur de date erroné instantanée(ça vient tout droit de ma collection textbox formatés)
  2. je t'ai classé intra userform tout les textboxs dates il y a donc un seul event pour ces textboxs
  3. je t'ai classé les textbox 21 à 30 et 41 à 50 les(Temps/poids et temps Map) là aussi un seul event
  4. je t'ai classé les textbox 51 à 60 (les résultats de ligne ) là au ssi un seul event
  5. j'ai ré écris les deux fonctions de calcul en fonction de ce nouveau contexte
  6. j'ai laissé l'event textbox61 qui est tout seul pour le formatage (c'est pas une bonne idée en vue d'un transfert sur feuille) mais je te laisse décider de la suite
te reste a coder ton bouton <<SAVE>>
voilà
;)
 

Pièces jointes

  • 0040-Base de donnée Outillage Lacour V° 1.0 Patricktoulon.xlsm
    31.7 KB · Affichages: 19

Discussions similaires

Réponses
7
Affichages
218

Statistiques des forums

Discussions
299 799
Messages
1 979 188
Membres
206 609
dernier inscrit
Shayzutarot