Comparer valeur textbox et cellule

Y

Yvon

Guest
Bonjour à tous,

J'ai un USF, avec 3 textbox, et souhaite comparer les valeurs introduites dans les texboxs, a une valeur définie dans une cellule, j'ai consulté le forum et essayé plein de formules différentes rien ne fontionne, je vous soumet le code initial qui me parait cohérant :

If TextBox1.Value + TextBox2.Value + TextBox3.Value = sheets(1).Range('K11').Value Then Unload Me
If TextBox1.Value + TextBox2.Value + TextBox3.Value <> sheets(1).Range('K11').Value Then MsgBox 'refaire'

Pas ci cohérant que cela puisqu'il ne fonctionne pas

Par avance merci

a+
Yvon
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Yvon, bonsoir le forum,

Les valeurs inscritent dans les TextBoxes sont considérées comme texte (String). Il faut les convertir pour pouvoir les additionnées. Essaie comme ça :


If CDbl(TextBox1.Value) + CDbl(TextBox2.Value) + CDbl(TextBox3.Value) = sheets(1).Range('K11').Value Then Unload Me
If CDbl(TextBox1.Value) + CDbl(TextBox2.Value) + CDbl(TextBox3.Value) <> sheets(1).Range('K11').Value Then
MsgBox 'refaire'
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Yvon, Robert, le Forum

Dacodac avec Toi cher Robert, mais voici ma façon de penser !!! (lol)

Option Explicit

Private Sub CommandButton1_Click()
Dim MyThreeTextBoxSumm As Double
Dim I As Byte

On Error GoTo Out
&nbsp; &nbsp;
For I = 1 To 3
&nbsp; &nbsp; &nbsp; &nbsp; MyThreeTextBoxSumm = MyThreeTextBoxSumm + CDbl(Me.Controls('TextBox' & I).Value)
&nbsp; &nbsp;
Next
On Error GoTo 0

&nbsp; &nbsp;
With Sheets(1).Range('K11')
&nbsp; &nbsp; &nbsp; &nbsp;
If MyThreeTextBoxSumm = .Value Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MsgBox 'Glop Glop'
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Unload Me
&nbsp; &nbsp; &nbsp; &nbsp;
Else
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MsgBox 'Pas Glop !'
&nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
End With

Exit Sub
Out:
If Err = 13 Then
&nbsp; &nbsp; MsgBox 'Valeurs non-numériques en TextBox !', vbInformation
Else
&nbsp; &nbsp; MsgBox 'Erreur non gérée : ' & Err.Number & ' ' & Err.Description, vbCritical
End If
End Sub


Bon Weekk End à vous tous et toutes (Ouf TGIF !!!)

[ol]@+Thierry[/ol]
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Yvon, Thierry, bonsoir le forum,

Tel Rascal dans ses Rancées : 'Tu penses, donc j'essuie'...

J'essuie des larmes de bonheur devant pareil code
J'essuie la bave qui suinte de ma bouche entrouverte
J'essuie le f.. qui perle tellement ce code est b...
J'essuis les plâtres de ma témérité
Je suis dans tous mes état
Je suis dans tout Mèze*, et ta sœur ?
Je suis dans la sœur et je la Mèze...

*petite ville près de Sète...
 
Y

Yvon

Guest
Bonsoir Thierry, Robert, le forum,

Heu.....je ne sais pas bien comment vous dire ça à tous les deux, vos niveaux VBA, étant largement supérieur au mien, mais cela ne fonctionne pas............

Pour Robert rien ne se passe ('pas surpris, j'avais essayé cette méthode), pour thierry, j'ai un message redondant me disant 'valeur non numérique en textbox, ce qui m'a permis de comprendre pourquoi cela coinçait enfin, je suppose.........

Sur les trois textbox, il y en a toujours une des trois qui se déclare volontairement 'Enable', mais bien, sur jamais la même, suivant la position du menu déroulant qui appelle le USF, et ce afin d'interdire la saisie.

Oui, je m'autoflagelle, a fin d'éviter la lapidation, je le reconnais j'aurai pu le dire au début, mais je pensais pas que c'était ça qui coinçait, je l jure..................

Merci de votre aide à tous les deux
a++
Yvon
 
Y

Yvon

Guest
Bonsoir Thierry, Robert, le forum,

J'ai trouvé Ma réponse avec le code suivant, qui est moins accadémique que celui de Thierry et s'ispire largement de celui de Roberts, l'inconvénient est que ce code ne supporte pas le vide, si une textbox est vide il beug

Y aurai til une solution au problème

Private Sub CommandButton1_Click()
If sheets(1).Range('G28').Value = 30 Then
If CDbl(TextBox1.Value) + CDbl(TextBox3.Value) <> sheets(1).Range('K11').Value Then MsgBox 'refaire'
If CDbl(TextBox1.Value) + CDbl(TextBox3.Value) = sheets(1).Range('K11').Value Then Unload Me
End If
If sheets(1).Range('G28').Value = 31 Then
If CDbl(TextBox1.Value) + CDbl(TextBox2.Value) <> sheets(1).Range('K11').Value Then MsgBox 'refaire'
If CDbl(TextBox1.Value) + CDbl(TextBox2.Value) = sheets(1).Range('K11').Value Then Unload Me
End If
If sheets(1).Range('G28').Value = 33 Then
If CDbl(TextBox2.Value) + CDbl(TextBox3.Value) <> sheets(1).Range('K11').Value Then MsgBox 'refaire'
If CDbl(TextBox2.Value) + CDbl(TextBox3.Value) = sheets(1).Range('K11').Value Then Unload Me
End If

End Sub


Merci à tous les deux sans vous je n'aurai pu identifier mes erreurs, bons week end

a++
Yvon
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Yvon, Thierry, bonsoir le forum,

Hé Yvon... Essaie comme ça mais ne le dis surtout pas à Thierry qui va m'escagacer...
Place ces lignes en tout début de code :

If TextBox1.Value = '' Then TextBox1.Value = 0
If TextBox2.Value = '' Then TextBox2.Value = 0
If TextBox3.Value = '' Then TextBox3.Value = 0

Mais franchement, le code de Thierry est beaucoup plus pro. Je te conseille vivement, pour qu'il me pardonne, de l'utiliser. Je l'ai adapté pour qu'il gère les TextBoxes vides et te l'ai commenté afin que tu le comprennes mieux :


Option Explicit

Private Sub CommandButton1_Click()
'déclare la variable MyThreeTextBoxSumm (somme des trois TextBoxes. Oui je sais, je parle l'étranger couramment...)
Dim MyThreeTextBoxSumm As Double
Dim I As Byte 'déclare la variable I

On Error GoTo Out 'Gestion d'erreur : en cas d'erreur va à la balise 'Out'. La convertion d'une TextBox en CDbl
'(Double = décimal) génére une erreur si elle contient une valeur non convertible comme du texte

For I = 1 To 3 'boucle sur les 3 TextBoxes
'si la TextBox est vide alors elle prend la valeur 0 (donc ne génère pas d'erreur à la convertion)
If Me.Controls('TextBox' & I).Value = '' Then Me.Controls('TextBox' & I).Value = 0
'définit la variable MyThreeTextBoxSumm
MyThreeTextBoxSumm = MyThreeTextBoxSumm + CDbl(Me.Controls('TextBox' & I).Value)
Next 'prochaine TextBox

On Error GoTo 0 'annunle la gestion d'erreur

With Sheets(1).Range('K11') 'prend en compte la cellule K11 du premier onglet
'condition : si la variable MyThreeTextBoxSumm (la somme des 3 TextBoxes) = égale à la cellule
If MyThreeTextBoxSumm = .Value Then
Unload Me 'vide et ferme l'UserForm
Else 'sinon
MsgBox 'Refaire !' 'message
End If 'fin de la condition
End With 'fin de la prise en compte de la cellule K11 du premier onglet

Exit Sub 'sort de la procédure

Out: 'balise

'gestion des erreur
If Err = 13 Then 'condition : si erreur est 'incompatibilité de type..'
MsgBox 'Valeurs non-numériques en TextBox !', vbInformation
Else 'sinon
'message expliquant le type d'erreur
MsgBox 'Erreur non gérée : ' & Err.Number & ' ' & Err.Description, vbCritical
End If 'fin de la condition

End Sub

Message édité par: Robert, à: 25/11/2005 23:22
 
Y

Yvon

Guest
Merci beaucoup Robert, ça tourne au poil,

Un grand merci pour ton explication de code, très didactique (entre nous c'est grace à cela que l'on peut comprendre ce que l'on fait et pas copier coller bêtement), et l'adaptation, cela m' a ouvert de nouveaux horizons, en effet le code de Thierry que je remercie au passage, est super Pro (on va pas lui dire, il pourrait le croire).

Merci à tout les deux d'avoir fait avancer le chimili.....

Bon Week end
a+
Yvon
 

Discussions similaires

Statistiques des forums

Discussions
312 410
Messages
2 088 165
Membres
103 752
dernier inscrit
FG2