Problème avec une calculatrice

Résolu
cirtey Messages postés 30 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 8 mai 2009 - 23 avril 2007 à 19:29
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 23 avril 2007 à 22:15
Bonjour  à tous;
Je cherche à créer une petite calculatrice, c'est mon premier exercice en vb6 et je n'arrive pas à m'en sortir.
Lorsque j'exécute le programme pour le tester j'ai le message suivant: erreur de compilation "La declaration de la procédure ne correspond pas à la description de l'évenement ou de la procédure du même nom". Et la ligne du code "Private Sub cmdQuitter_Click "est soulignée.
Pouvez-vous m'aidez à trouver le problème s'il vous plaît? D'avance merci.
Merci.

Voici le code

'Commande de calcul du résultat



Private Sub cmdCalculer_Click(Index As Integer)
Dim resultat As Double



'optionbutton de multiplication



If optMultiplication.Value = True Then
resultat = valeur1 * valeur2
End If



'optionbutton d'addition



If optAddition.Value = True Then
resultat = valeur1 + valeur2
End If



'optionbutton de soustraction



If optSoustraction.Value = True Then
resultat = valeur1 - valeur2
End If



'optionbutton de division entière



If ((optDivisionEntiere.Value = True) And (valeur2 <> 0)) Then
resultat = valeur1 \ valeur2
Else
MsgBox "Pas de division sur 0!", vbCritical
End If



'optionbutton de modulo



If optModulo.Value = True Then
resultat = valeur1 Mod valeur2
End If



End Sub





' Commande pour quitter



Private Sub cmdQuitter_Click()
End
End Sub





' Label dans lequel doit s'afficher le résultat



Private Sub lblAffichage_Change()
Dim affichage_resultat As String
affichage_resultat = CStr(resultat)
End Sub





' Textbox n°1 dans lequel l'utilisateur rentre les chiffres



Private Sub txt01_Change()
Dim text1 As String
Dim valeur1 As Double
text1 = txt01.Text
If Not IsNumeric(text1) Then
 MsgBox "Valeur non numerique!", vbCritical
 Else
valeur1 = CDbl(text1)
End If
End Sub





' Textbox n°2 dans lequel l'utilisateur rentre les chiffres



Private Sub txt02_Change()
Dim text2 As String
Dim valeur2 As Double
text2 = txt02.Text
If Not IsNumeric(text2) Then
 MsgBox "Valeur non numerique!", vbCritical
 Else
valeur2 = CDbl(text2)
End Sub




 




 




 


 






 

16 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
23 avril 2007 à 20:56
cmdCalculer : valeur1 et valeur2 ne sont pas déclarées donc nulle par défaut

lblAfficher_Change : resultat n'est pas décalré donc nul par défaut. Tu doit avoir "0" d'afficher dans ton label.

text1_Change et text2_Change : valeur1 et valeur2 sont ici déclarées certe, mais à l'intérieur de la sub, donc ne sont valide qu'a l'intérieur de la sub.

Pour corriger, tu supprime text1_change, text2change, lblAfficher_Change qui ne servent à rien.

Et tu remplace cmdCalculer_Click par ceci :

Private Sub cmdCalculer_Click()

'optionbutton d'addition
If OptAddition.Value = True Then
lblAfficher.Caption  = CStr(CDbl(text1.Text) + CDbl(text21.text))
End If

End Sub

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 avril 2007 à 21:22
Avec un If

If TaValeur <> 0 Then
      Code de division
End If

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
3
cirtey Messages postés 30 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 8 mai 2009
23 avril 2007 à 21:57
Bon voici la version finale:






'Commande de calcul du résultat


Private Sub cmdCalculer_Click()


If (Not IsNumeric(txt01)) Or (Not IsNumeric(txt02)) Then
MsgBox "Valeur non numerique!", vbCritical
Else
If OptAddition.Value = True Then
lblAffichage.Caption = CStr(CDbl(txt01.Text) + CDbl(txt02.Text))
End If


If optSoustraction.Value = True Then
lblAffichage.Caption = CStr(CDbl(txt01.Text) - CDbl(txt02.Text))
End If


If ((optDivisionEntiere.Value = True) And (CDbl(txt02.Text) <> 0)) Then
lblAffichage.Caption = CStr(CDbl(txt01.Text) \ CDbl(txt02.Text))
End If


If ((optDivisionEntiere.Value True) And (CDbl(txt02.Text) 0)) Then
   MsgBox "Cette opértation est impossible!!!", vbCritical
End If


If optModulo.Value = True Then
lblAffichage.Caption = CStr(CDbl(txt01.Text) Mod CDbl(txt02.Text))
End If


If optMultiplication.Value = True Then
lblAffichage.Caption = CStr(CDbl(txt01.Text) * CDbl(txt02.Text))
End If


End If


End Sub


' Commande pour quitter
Private Sub cmdQuitter_Click()
End
End Sub




3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 avril 2007 à 19:31
Salut,

tes boutons ne seraient pas indexés par hasard ?

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cirtey Messages postés 30 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 8 mai 2009
23 avril 2007 à 19:35
P.S
Lorsque je rajoue des index as integer à tous les sub j'ai le message suivant :
erreur de compilation
"méthode ou membre de données introuvable"


 


 


 


 


 


 




 
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 avril 2007 à 19:39
Evite d'indexer tes boutons si tu n'en a pas l'utilité  ;)

Pour ton problème précédant, sélectionne ton bouton cmdQuitter et supprime le.
Ensuite tu en redessines un (sans faire de copier coller depuis un autre, bien sûr) et tu le nommes cmdQuitter

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
23 avril 2007 à 19:40
Le mieux : tu supprime le code pour le bouton quitter, tout, y compris Private sub ....

Ensuite, dans la barre au dessus du code, tu déroule la liste de gauche et tu choisis cmdQuitter, puis tu déroule la liste de droite et tu choisis Click.

Cela va te crer le squelette correct de la procedure cmdQuitter_Click, tu n'auras plus qu'a le remplir avec tes instructions.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cirtey Messages postés 30 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 8 mai 2009
23 avril 2007 à 19:59
J'ai supprimé le bouton et j'ai recommancé en rajoutant index as integer.


J'ai alors un autre message d'erreur :
erreur de compilation
"méthode ou membre de données introuvable"
Cela pointe (souligné) ici :
Private Sub txt01_Change(index As Integer)
et ici
text1 = txt01.Text
Par ailleurs:
Comment désindexer les boutons?
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 avril 2007 à 20:05
Impossible. Tu dois tout refaire tes contrôles, et quand tu fais un copier coller d'un controle déjà existant, VB te demande si tu veux indexé le contrôle.  Il faut dire Non

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
cirtey Messages postés 30 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 8 mai 2009
23 avril 2007 à 20:11
En fait j'ai fait plusieurs versions de mon programme 0.1, 0.2, 0.3, 0.4 ... etc et j'enregistre. Mais je n'ai pas le message voulez-vous indexer de vb.


Sinon au niveau de l'algo y a rien qui cloche?
Merci.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 avril 2007 à 20:16
T'as dût l'avoir la première fois, mais une fois que tu dis Oui, Tous les autres contrôles sont indexés si tu fait un copier coller d'un contrôle indexé.
C'est pour ça que je te disais de tout refaire, au moins ce sera propre car là vb se mélange les pinceaux.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
23 avril 2007 à 20:41
Pour désindexé un controle, il faut en changé le nom, pour qu'il est un nom unique dans la liste des controles de la feuille.

puis il faut vider  la propriété Index de ce controle, en effacer la valeur. Bien sur il faut faire cela avaoir d'avoir écrit du code pour ce controle.

Mais une question, pourquoi tu rajoute manuellement Index as integer dans les sub de tes évènements ????
Normalement tu laisse faire l'ide comme je t'ai expliqué plus haut. C'est l'ide qui va te construire le bon squelette de la sub.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cirtey Messages postés 30 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 8 mai 2009
23 avril 2007 à 20:47
C'est tout à fait ça le problème.
J'ai tout recommencé à 0 et j'ai simplifié en supprimant un max, je n'ai plus de message d'erreur mais le problème est que mon résultat de calcul ne s'affiche pas :
'Commande de calcul du résultat


Private Sub cmdCalculer_Click()
Dim resultat As Double


'optionbutton d'addition


If OptAddition.Value = True Then
resultat = valeur1 + valeur2
End If


End Sub




' Commande pour quitter
Private Sub cmdQuitter_Click()
End
End Sub


 


' Label dans lequel doit s'afficher le résultat
Private Sub lblAfficher_Change()
Dim affichage_resultat As String
affichage_resultat = CStr(resultat)
End Sub


 


' Textbox n°1 dans lequel l'utilisateur rentre les chiffres


Private Sub text1_Change()
Dim Texte1 As String
Dim valeur1 As Double
Texte1 = text1.Text
valeur1 = CDbl(Texte1)
End Sub




' Textbox n°2 dans lequel l'utilisateur rentre les chiffres


Private Sub text2_Change()
Dim Texte2 As String
Dim valeur2 As Double
Texte2 = text2.Text
valeur2 = CDbl(Texte2)
End Sub




0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 avril 2007 à 20:54
Il faut déclarer valeur1 et valeur2 dans les déclarations, en Public, afin que toutes les procédures de ta Form puissent accéder aux valeurs.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
cirtey Messages postés 30 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 8 mai 2009
23 avril 2007 à 21:06
J'ai fait cela:

'Commande de calcul du résultat


Private Sub cmdCalculer_Click()


If OptAddition.Value = True Then
lblAfficher.Caption = CStr(CDbl(Text1.Text) + CDbl(Text2.Text))
End If


End Sub


 




' Commande pour quitter
Private Sub cmdQuitter_Click()
End
End Sub

ET  cela MARCHE !!!!

Merci

Néanmoins j'ai des soucis avec la division, comment prévoir les 0?
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 avril 2007 à 22:15
Tu peux enlever certains End If comme ceci :

Private Sub cmdCalculer_Click()

If (Not IsNumeric(txt01)) Or (Not IsNumeric(txt02)) Then
    MsgBox "Valeur non numerique!", vbCritical
Else
    If OptAddition.Value =  True Then
        lblAffichage.Caption = CStr(CDbl(txt01.Text) + CDbl(txt02.Text))
    ElseIf optSoustraction.Value = True Then
        lblAffichage.Caption = CStr(CDbl(txt01.Text) - CDbl(txt02.Text))
    ElseIf ((optDivisionEntiere.Value = True) And (CDbl(txt02.Text) <> 0)) Then
        lblAffichage.Caption = CStr(CDbl(txt01.Text) \ CDbl(txt02.Text))
    ElseIf ((optDivisionEntiere.Value = True) And (CDbl(txt02.Text) = 0)) Then
        MsgBox "Cette opértation est impossible!!!", vbCritical
    ElseIf optModulo.Value = True Then
        lblAffichage.Caption = CStr(CDbl(txt01.Text) Mod CDbl(txt02.Text))
    ElseIf optMultiplication.Value = True Then
        lblAffichage.Caption = CStr(CDbl(txt01.Text) * CDbl(txt02.Text))
    End If
End If

End Sub

~ <small> Mortalino ~ Colorisation automatique </small>

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
Rejoignez-nous