Calculatrice VBA

Résolu
abyss7500 Messages postés 6 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 13 février 2006 - 24 janv. 2006 à 15:57
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 - 25 janv. 2006 à 10:24
voila, je dois réalisée une calculatrice sous vba est je galère. j'ai reussi à faire afficher les chiffres mais pour les opérateurs j'ai quelques soucis. En effet, si je veux faire 7+3 par exemple je clique sur 7 et lke 7 s'affiche dans ma textbox puis je clique sur + le plus s'affiche seul dans la textbox MAIS quand je clique sur 3 le "+" ne pars pas??????

programme pour opérateurs:
Private Sub plus_Click()
Dim nombre_saisi As String
nombre_saisi = "+"
TextBox1.Value = nombre_saisi
End Sub

programme pour nombres:

Private Sub sept_Click()
Dim nombre_saisi As String
nombre_saisi = TextBox1.Value
TextBox1.Value = nombre_saisi & 7
End Sub

merci de votre aide j'en ai vraiment besoin!!

5 réponses

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
24 janv. 2006 à 18:47
Ben c'est normal, tu concatène des chaines de caractères !!!

Note : évite de mettre des "_" dans les noms de tes variables et autres procédures!!! Tout comme il faut éviter les caractères spéciaux tel les accents. Contente-toi juste des lettres majuscules/minuscules et des chiffres.

Mais repronons ton code si tu le veux bien :

Private Sub btnPlus_Click() 'Pense donc à renomer tes boutons
Dim varNombreSaisi As String
varNombreSaisi = "+"
TextBox1.Value = varNombreSaisi 'Ici on efface l'ancien contenu de la TextBox pour le remplacer par "+". Or, à ce moment précis, il y a déjà quelque chose dedans !!!
End Sub

Private Sub btnSept_Click()
Dim varNombreSaisi As String
varNombreSaisi = TextBox1.Value 'Attention, ici tu récupères ce qu'il y a dans ta TextBox !!!
TextBox1.Value = varNombreSaisi & 7 'Et là, tu concatènes un carctère "7" avec l'ancien contenu. Normal donc que ton "+" reste!!!
End Sub

Comprends-tu ? 1er temps : Bouton 7 ; TextBox "" & "7"> "7"

2 ème temps : Bouton + ; TextBox = "+"
3 ème temps : Bouton 7 ; TextBox "+" & "7"> "+7"

Tout le problème est de savoir ce que tu veux à l'arrivée !!! Mais a mon avis, comme ça, t'es mal partie !!!

En plus, là tu n'obtiendra que des caractères et non des chiffres!!!

Il faut raisonner en étapes utilisateur dans le cas des calculatrices (note quand même que ce type de sources est récurrent sur VBFrance et que si tu te donnes la peinne de chercher un peu tu devrais trouver ton bonheur! Et ce, quitte à utiliser Google avec le mot-clef "vbfrance" !!!

1 ère étape : L'utilisateur rentre des chiffres dans le TextBox, soit via les boutons, soit directement dedans via le clavier.
2 ème étape : L'utilisateur choisit une opération. On doit donc conserver l'acienne valeur et réinitialiser l'affichage pour qu'il entre la seconde valeur. Sauf dans le cas de l'opération "=".
3 ème étape : idem que la première
4 ème étape : Là, soit l'utilisateur entre l'opération "=", soit il entre une nouvelle opération (en plus donc). Dans les deux cas, il faut exécuter le calcul demandé.

Déjà, pour la saisie directe dans le TextBox il faut utiliser la procédure événementielle _KeyUp et/ou _KeyPress afin de déterminer si l'utilisateur à bien saisi un caractère valide (0123456789+-*/=) et sinon, annuler la frappe. Sinon, tu peux toujours bloquer ton TextBox à la saisie! C'est plus simple pour les débutants.

Pour la saisie via les boutons 0 à 9, il n'y a pas de mystères en effet : la concaténation de caractères !

Private Sub btnSept_Click()
TextBox1.Value = TextBox1.Value & "7"
End Sub

Private Sub btnSix_Click()

TextBox1.Value = TextBox1.Value & "6"

End Sub

...



Donc, tout l'astuce de la calculatrice réside dans la gestion du résultat qu'il faut prévoir imédiatement dès le début!

En effet, il faut, dès la première étape, avoir une variable "résultat" mise à 0.
Tu dois déclarer cette variable comme globale afin de pouvoir l'utiliser dans toutes tes procédures événementielles (btnX_Click, ...). Pour se faire, il te suffit de la déclarer tout en haut de ton code ou alors, dans un "module de code" à ajouter à tes "modules de feuille" (click droit dans la liste, ajouter, ...).

Tout le reste se jouera dans les procédures des opérations :

'A mettre tout en haut donc
Public varResultat As Double 'Double par pure sécurité! Sinon, tu ne mets pas "As Double" comme ça le type de ta variable sera "Variant"!


Private Sub btnPlus_Click()
varResultat = varResultat + Val(TextBox1.Value)
TextBox1.Value = "0"
End Sub

Note que la fonction Val te permet de convertir automatiquement une chaine de caractère en nombre. Si la chaine n'est pas valide, elle renverra 0 je crois. Note que ici on a "+" car c'est le bouton "btnPlus" !!! Il suffit donc de changer le signe... tu auras compris!
Donc, ici, on ajoute au résultat l'ancien résultat additionné de la valeur contenu dans le textBox. Tu auras donc compris que ce type de syntaxe rend la prog fantastique! De plus, tu auras aussi remarqué que les deux systèmes (chiffres et opérations) sont nettement séparés! Il s'agit bien de deux systèmes qui ont bien deux buts différents! Le premier étant de concaténer du texte et le second étant de faire des calculs arithmétique !

Mais il reste encore 3 cas particulier... Le bouton "=" et les deux boutons "Annuler la frappe" et "Annuler le calcul" [C et CE sur nos calculettes pour Clear{all} et Clear Enter.

ClearAll annulant tout, il suffit d'effacer le TextBox et de réinitialisé la variable Résultat à 0. ClearEnter doit juste effacer le textBox (à "0", pas à "" attention !!!). La touche entrée elle, doit faire l'opération précédente :


Résultat 0 ; Entrée "12" ; Entrée = "+" ; Résultat = 0 + 12 = 12Résultat 12 ; Entrée "13" ; Entrée = "-" ; Résultat = 12 - 13 = -1 !!!

Comme tu dois t'en rendre compte, notre raisonnement est faux !!! Et donc, notre code précédent également! Ben wai, ce serait trop simple !

Bon, je vais m'arrêter là parce que ce n'est pas mon job de te donner la solution. Mais je vais quand même te mettre sur la piste...

Il faut mémoriser l'opération entrée lors de chaque opération et faire le calcul non pas de l'opération en cours mais de la précédente !!! hé hé

Allez, tu vas y arriver va, c'est pas si compliqué que ça!

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
3
Rejoignez-nous