XL 2016 Additionner une zone de texte...

EliotNaiss

XLDnaute Nouveau
Bonjour au forum, avec tous mes voeux.
Je ne sais pas si j'ai perdu des neurones durant les fêtes, mais je suis dans l'impasse ...
Dans une application, j'ai un userform avec 2 zones de texte.
La première (zone1) affiche une valeur numérique reprise automatiquement d'une feuille de classeur (exemple 120).
La seconde (zone2) me permet de saisir des valeurs, dont la somme ne doit pas dépasser la valeur de la zone1.
Par exemple je peux saisir 50+70.
Mais je dois vérifier avant de répercuter cette saisie dans une autre cellule de feuille avec cette formule (ActiveCell.FormulaLocal = "=" & zone2.Text).
Et là buggg, je n'arrive pas à faire ce calcul et évaluer si je dépasse ...
Si quelqu'un peut me sortir de mon ornière, ce serait cool ;) .
Amicalement.
cheques.png
 

Paf

XLDnaute Barbatruc
Bonjour,

une solution en utilisant Evaluate :

Si en textbox Zone2 on a saisi 50 + 70,

VB:
MsgBox  Evaluate("=" & Zone2.Value)

affichera 120 ...

Mais, toute saisie incohérente renverra un message d' erreur.... => gérer les erreurs

A+
 

patricktoulon

XLDnaute Barbatruc
bonsoir
@Paf tu n’étais pas loin ;)
l'erreur tu la gere
VB:
Private Sub Zone2_Change()
    With Zone2
        If .Value Like "*[A-z]*" Then MsgBox "PAS DE LETTRE MERCI!!!": .Value = Left(.Value, Len(.Value) - 1): Exit Sub
        If Not IsError(Evaluate(Zone2.Value)) Then Zone1 = Evaluate(Zone2.Value)
    End With
End Sub
demo3.gif
 

EliotNaiss

XLDnaute Nouveau
Bonjour et merci du retour.
En fait :
mon textbox Zone1 est en réalité nommé txtChequeUnique
mon textbox Zone2 est en réalité nommé txtPlusCheques
J'ai créé un nouveau textbox txtSomm qui reçoit le résultat du calcul de txtPlusCheques
J'exécute ce code en clic sur le bouton Valider, mais j'ai une erreur malgré que le résultat de txtSomm reste inférieur à ma valeur de txtChequeUnique

VB:
' calcul de la saisie et inscription dans txtSomm
txtSomm.Value = Evaluate("=" & txtPlusCheques.Value)
'      
        If txtChequeUnique.Value < txtSomm.Value Then
            MsgBox "Vous avez dépassé la valeur maximum !"
            txtSomm.Value = 0
            'Exit Sub
        ElseIf txtChequeUnique.Value > txtSomm.Value Then
            MsgBox "Valeur faible ! Vous allez 'combler' par les espèces ?"
            txtSomm.Value = 0
            'Exit Sub
        Else
            MsgBox "cool"
            txtSomm.Value = 0
            'ActiveCell.FormulaLocal = "=" & txtPlusCheques.Text
        End If
    End If

cheques1.png
 

EliotNaiss

XLDnaute Nouveau
bonsoir
@Paf tu n’étais pas loin ;)
l'erreur tu la gere
VB:
Private Sub Zone2_Change()
    With Zone2
        If .Value Like "*[A-z]*" Then MsgBox "PAS DE LETTRE MERCI!!!": .Value = Left(.Value, Len(.Value) - 1): Exit Sub
        If Not IsError(Evaluate(Zone2.Value)) Then Zone1 = Evaluate(Zone2.Value)
    End With
End Sub
Regarde la pièce jointe 1050831
Merci Patrick, je vais tester de suite ...
 

EliotNaiss

XLDnaute Nouveau
Merci Patrick, je vais tester de suite ...
Alors, ce code est très intéressant !!
Je précise que :
- je ne dois pas toucher à ma Zone1, je dois vérifier ma saisie en Zone2 et être alerté (voire stoppé bouton Valider disable) en cas de somme supérieure à Zone1;
- il reste possible de saisir en Zone2 dont la somme serait inférieure à Zone1.
;)

Je viens de modifier l'adaptation première de ton code, en fait j'ai écrit :
VB:
Private Sub txtPlusCheques_Change()
    With txtPlusCheques
        If .Value Like "*[A-z]*" Then MsgBox "PAS DE LETTRE MERCI!!!": .Value = Left(.Value, Len(.Value) - 1): Exit Sub
        '
        If Not IsError(Evaluate(txtPlusCheques.Value)) Then txtSomm = Evaluate(txtPlusCheques.Value)
    End With
End Sub

et là ca marche super !! MERCI. ;)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 072
Messages
2 085 056
Membres
102 768
dernier inscrit
clem135164