IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

faire une calculatrice avec 3 zones de texte dans un userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 23
    Points
    23
    Par défaut faire une calculatrice avec 3 zones de texte dans un userform
    Bonjour à toutes et à tous,

    Je suis une novice en Excel. J'ai fait un userform qui permet aux utilisateurs de rentrer leurs informations et que ces dernières soient reportées dans un classeur Excel. Jusque là tout va bien.

    J'aimerai savoir s'il était possible de faire une sorte de calculatrice. Je m'explique :
    J'aimerai à l'aide de 3 zones de texte faire comme une calculatrice. Ce serait su style :
    zone1 x zone2 = zone3

    Autre petite question si cela est possible : la zone 1 peut-elle être une combobox?

    Merci à toutes et à tous.

    J'ai vraiment besoin de votre aide :s

  2. #2
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Il n'y a aucun souci à faire la multiplication des valeurs contenues dans une combobox par celle d'un textBox.
    Cette procédure à placer dans le code de ton UserForm, va multiplier la valeur de ComboBox1, par celle de TextBox1, lorsque tu quitteras le TextBox1, et va l'afficher dans le TextBox2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If ComboBox1 <> "" And TextBox1 <> "" Then
         TextBox2 = CDbl(ComboBox1) * CDbl(TextBox1)
    Else
        MsgBox "Vous n'avez rien oublié???"
        ComboBox1 = ""
        TextBox1 = ""
    End If
    End Sub
    Le problème tient surtout dans le "remplissage" de la textbox1 et de la combo... les valeurs s'y trouvant sont-elles numériques? Puisque cela dépends de la saisie d'un utilisateur, l'erreur est facile. Si tu as besoin de pallier à ce problème, reviens nous le dire, il y a moultes solutions...
    Cordialement,
    Franck

  3. #3
    Membre habitué
    Profil pro
    Business Analyst
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Business Analyst

    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Points : 152
    Points
    152
    Par défaut
    Bonjour,

    Si on met ce code sous l'événement "Change" plutôt que sur "Exit", le calcul est fait en temps réel.

    Et comme l'intérêt est peut-être de faire le calcul à tout changement quel que soit l'endroit où ce changement se produit, l'idée est de faire faire le calcul par une macro dédiée, appelée par chacune des Sub déclenchées par les changements dans la combobox et la textbox.

    Dans les grandes lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub ComboBox1_Change()
     Call MacroCalculatrice
    End Sub
     
    Private Sub TextBox1_Change()
     Call MacroCalculatrice
    End Sub
     
    Private Sub MacroCalculatrice()
     Me.TextBox2 = Me.ComboBox1 * Me.TextBox1
    End Sub



    A plus,

    Benoît

  4. #4
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Bonjour à toutes et à tous,

    merci pour vos réponses au sujet de la "calculatrice" que je souhaite mettre en place dans un userform.

    Pour répondre à la question de pijaku, oui les valeurs sont toutes numériques, c'est-dire celles du combobox et celles de la textbox (ça sera 1,2,3,4,...). Je ne sais pas si on peut ajouter des nombres décimaux? (par exemple, 2*2.5 = 5)?

    Ensuite ce n'est pas gânant si les 3 zones sont des zones de texte (ça sera plus simple je pense), je suivrai votre proposition .

    Pour répondre au message de Benoit Schwob, oui l'idéal serait de faire l'opération directement, mais bon si c'est trop compliqué, je vais abandonner. Ton code m'a l'air intéressant et je ne doute pas de tes connaissances, mais lorsque je compile, une erreur s'affaiche : "erreur d'exécution '13' incompatibilité des types".

    Merci tout le monde

  5. #5
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Alors elle en est ou cette calculatrice?
    Tu peux bien entendu utiliser des nombres décimaux. Attention tout de même à la saisie du séparateur décimal virgule ou point???
    Tu peux également utiliser 3 textbox, 1 combo et 2 textbox etc... Peu importe les controles...
    En ce qui concerne l'erreur de type, tu dois savoir qu'un textbox renvoie une chaine de caractère (string) et donc pas un nombre permettant le calcul. Il te faut donc le convertir en nombre : =CInt(TextBox) revoie un entier, =CDbl(textBox) etc....
    Comme on trouve tout ici, je te mets un petit lien sur les variables : ftp://ftp-developpez.com/silkyroad/V...sVariables.pdf
    Bonne continuation
    Cordialement,
    Franck

  6. #6
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Merci pour ta réponse pijaku

    C'est bien à la page 17 de ton lien où je pourrai avoir les informations dont j'aurai besoin? Il faut obligatoirement une procédure pour convertir un String en entier ou décimal? Pourrais-tu si tu as me montrer un exemple qui permettrait de changer une chaine de caractères en string pour m'aider à résoudre mon problème s'il te plait?

    Merci d'avance

  7. #7
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Ton problème n'est pas clairement exposé et donc il nous est difficile de le résoudre.
    A la question initiale, ma première réponse résouds déjà pas mal de problème. Que veux tu de plus?
    Cordialement,
    Franck

  8. #8
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Re pijaku,

    Oui ta solution résoud énormément pas mal de problème, j'avais peur de ne pas réussir à l'adapter mais j'ai réussi

    Il y a juste un petit problème, c'est que le résultat ne s'affiche pas instantanément. Cela pose un petit problème car je souhaite ensuite imprimer le userform. De plus, pour voir apparaître le résultat, je dois cliquer au hasard sur certaines zones de mon userform :s.

    Encore merci pour ton aide (et de votre aide en général)

  9. #9
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Si tu souhaites que le résultat s'affiche immédiatement et évolue même au fil de ta saisie dans le textbox1, fais un mix des deux codes trouvés ici même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ComboBox1_Change()
     Call MacroCalculatrice
    End Sub
     
    Private Sub TextBox1_Change()
     Call MacroCalculatrice
    End Sub
     
    Private Sub MacroCalculatrice()
    If ComboBox1 <> "" And TextBox1 <> "" Then
        Me.TextBox2 = CDbl(Me.ComboBox1) * CDbl(Me.TextBox1)
    End If
    End Sub
    Cordialement,
    Franck

  10. #10
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Avril 2011
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Eh bien écoutez ( et bien sûr en particuluer pijaku), mon problème est résolu. Cela marche impeccablement, mon résultat s'affiche instantanément

    Je remercie tout le monde de m'avoir aidé : Benoit Schwob et pijaku

    Merci merci et encore merci

  11. #11
    Membre habitué
    Profil pro
    Business Analyst
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Business Analyst

    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Points : 152
    Points
    152
    Par défaut
    Merci pijaku d'avoir nettoyé le truc avec le test <> "" et la conversion CDbl.

    Un méchant accès de flemme m'avait dissuadé de faire ça proprement...

  12. #12
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Salut Benoit, le forum,
    Juste pour s'éviter la flemme et en finir avec ce sujet, voici un exercice de style de Tyrex ici même :
    SommeBox3.xls
    A+
    Cordialement,
    Franck

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire clignoter une zone de texte dans un formulaire
    Par WITER dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/07/2021, 02h45
  2. Réponses: 1
    Dernier message: 07/04/2010, 08h56
  3. [Débutant] Utilisation d'une valeur de la zone de texte dans une requête
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 13/07/2006, 10h42
  4. [ImageMagick] Cherche à faire une image avec texte et image
    Par dnipro dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 18/05/2006, 14h08
  5. Faire pivoter une zone de texte dans un état
    Par YLL dans le forum Access
    Réponses: 3
    Dernier message: 20/02/2006, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo