Zone de texte autoremplie - format numérique
Bonjour à tous
Je sollicite votre aide car j'ai une petite question.
J'aimerais créer une macro qui, quand je clique sur un bouton, me renseigne dans une zone de texte la somme de toutes les valeurs présentes dans d'autres zones de texte.
J'ai tenté ces deux codes suivants :
Private Sub CommandButton_Check_Click()
Check.Value = WorksheetFunction.Sum(Amount1.Value, Amount2.Value, Amount3.Value, Amount4.Value, Amount5.Value, Amount6.Value)
End Subet
Private Sub CommandButton_Check_Click()
Check.Value = "Amount1.Value" + "Amount2.Value" + "Amount3.Value" + "Amount4.Value" + "Amount5.Value" + "Amount6.Value"
End SubAmount1, 2, 3, 4,5 et 6 étant mes zones de textes dont je veux la somme dans la zone de texte "Check"
Dans la première hypothèse, VBA ne reconnait pas la formule "Sum" et dans la deuxième hypothèse, elle se contente de mettre les input des zone de texte amount à la suite et non de les sommer.
Je pense que cela est du au fait que les zone de texte produise du format texte et non du format numérique.
Est ce possible de modifier cela ?
Merci d'avance pour votre réponse,
En vous souhaitant une belle après midi
Jeanne
Je pense que cela est du au fait que ma zone de te
Bonjour à tous,
Une petite idée?
Bonne journée !
Jeanne
Bonjour
jeannebrnd a écrit :Une petite idée?
Ah que oui
Bonsoir,
Ci joint mon fichier !
Le code en question se trouve à la fin du code du formulaire.
Il correspond au code suivant :
Private Sub CommandButton_Check_Click()
Check.Value = Amount1.Value + Amount2.Value + Amount3.Value + Amount4.Value + Amount5.Value + Amount6.Value
End SubPour rappel, j'aurais aimé que dans mon formulaire, dans ma zone de texte "check", je puisse avoir la somme des montants inscrits dans les zones de textes "Amount1" "amount2" etc... et j'aurais aimé que cela s'affiche directement dans le formulaire.
Est ce possible ?
Merci d'avance pour votre aide
Bonne soirée,
Jeanne
Bonsoir
Remplace la procédure actuelle par celle-ci
Private Sub CommandButton_Check_Click()
Dim Total As Double, I As Integer
For I = 1 To 6
Total = Total + Val(Replace(Me.Controls("Amount" & I), ",", "."))
Next I
Me.Check = Total
' Check.Value = Amount1.Value + Amount2.Value + Amount3.Value + Amount4.Value + Amount5.Value + Amount6.Value
End SubSi tu veux que le calcul se fasse automatiquement et ainsi supprimer le bouton "Check"
Private Sub Amount1_Change()
Calcul
End Sub
Private Sub Amount2_Change()
Calcul
End Sub
Private Sub Amount3_Change()
Calcul
End Sub
Private Sub Amount4_Change()
Calcul
End Sub
Private Sub Amount5_Change()
Calcul
End Sub
Private Sub Amount6_Change()
Calcul
End Sub
Sub Calcul()
Dim Total As Double, I As Integer
For I = 1 To 6
Total = Total + Val(Replace(Me.Controls("Amount" & I), ",", "."))
Next I
Me.Check = Total
' Check.Value = Amount1.Value + Amount2.Value + Amount3.Value + Amount4.Value + Amount5.Value + Amount6.Value
End Subça fonctionne
Formidable....
Merci beaucoup !!!
Bonne soirée
Et j'adore l'idée de le faire automatiquement !
J'ajoute, merci
Bonjour à tous,
Je réouvre ce sujet, car je me trouve fasse à un nouveau problème pour mon formulaire.
J'aimerais que, lorsque je saisie un nombre dans ma Textbox, le point se transforme automatiquement en virgule.
Est possible ?
J'ai en effet 8 TextBox, nommees "Amount1", "Amount2", etc jusqu'à "Amount8".
Ma question est : est ce possible de reprendre ta formule Val(Replace pour que cela s'automatise?
J'ai essayé le code ci dessous et ça ne fonctionne pas.
Sub Calcul()
Dim Total As Double, i As Integer
For i = 1 To 8
Val(Replace(Me.Controls("Amount" & i), ",", "."))
Next i
End SubSinon j'ai aussi réussi à empécher la saisie d'autre chose que du numérique pour UN textbox via le code suivant (mais du coup cela désactive le point du clavier numérique) :
'Obliger la saisie d'une virgule et empécher la saisie d'un point
Private Sub Amount1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim strpass As String
strpass = Amount1.Value
If ChainePasOK(strpass) = True Then Cancel = True: Amount1.Value = "": Beep: MsgBox "Saisie non valide !"
End Sub
Private Function ChainePasOK(strpass As String) As Boolean
If strpass = "" Then Exit Function
If Len(Replace(strpass, ".", "")) <> Len(strpass) Then ChainePasOK = True: Exit Function
If Len(strpass) = 1 And InStr("1234567890", strpass) = 0 Then ChainePasOK = True: Exit Function
strpass = Replace(strpass, ",", ".")
If Len(CStr(Val(strpass))) <> Len(strpass) Then ChainePasOK = True
End Function
Private Sub Amount1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or Amount1.SelStart > 0 And Chr(KeyAscii) = "-" _
Or InStr(Amount1.Value, ",") <> 0 And Chr(KeyAscii) = "," Then
KeyAscii = 0: Beep
End If
End Submais je ne parviens pas à créer une boucle pour tous les textbox. j'ai essayé en reprenant ta méthode mais cela ne marche pas :'(
Private Sub Amount_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim strpass As String
Dim i As Integer
For i = 1 To 8
strpass = Me.Controls("Amount" & i).Value
If ChainePasOK(strpass) = True Then Cancel = True: Me.Controls("Amount" & i).Value = "": Beep: MsgBox "Saisie non valide !"
Next i
End Sub
Private Function ChainePasOK(strpass As String) As Boolean
If strpass = "" Then Exit Function
If Len(Replace(strpass, ".", "")) <> Len(strpass) Then ChainePasOK = True: Exit Function
If Len(strpass) = 1 And InStr("1234567890", strpass) = 0 Then ChainePasOK = True: Exit Function
strpass = Replace(strpass, ",", ".")
If Len(CStr(Val(strpass))) <> Len(strpass) Then ChainePasOK = True
End Function
Private Sub Amount_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim i As Integer
For i = 1 To 8
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or Me.Controls("Amount" & i).SelStart > 0 And Chr(KeyAscii) = "-" _
Or InStr(Me.Controls("Amount" & i).Value, ",") <> 0 And Chr(KeyAscii) = "," Then
KeyAscii = 0: Beep
End If
Next i
End SubAs tu une idée de la meilleure façon d'optimiser cela ?
N'hésitez pas à me dire si ma question est trop dense auquel cas je la reformulerais...
Merci d'avance
En vous souhaitant une belle fin de journée !
Jeanne
Bonjour
Joins le fichier en cause