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 :

Variables .Value des textbox


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Par défaut Variables .Value des textbox
    Bonjour à tous, je sollicite à nouveau ce forum, car j'ai besoin d'aide pour terminer un formulaire de gestion de BDD automatique.
    (saisie,correction, création de lignes...)

    J'ai actuellement une série de textboxs où l'on peut saisir des chiffres.
    Une autre textbox se trouve à la fin. Il s'agit d'un total des précédentes. Par contre, je veux que ce total puisse être modifié à la main.

    de cette manière, j'ai écris le code suivant, qui s'active lorsque l'on clique sur un bouton de calcul auto. du total:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CHAMPSTOTAL = champs1.Value + champs2.Value + champs3.Value
    Seulement, le résultat me donne un concatener:
    si
    champs1 = 1
    champs2 = 2
    etc...
    mon résultat donne 1234567

    Comme je me suis dis que le combobox est une variable texte, j'ai tenté de transformer mes valeurs textbox en utilisant des variables integer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim "mavaleur" as integer
    montotal = mavaleur
    Mais ça ne marche pas! Qualqu'un aurait-il une idée SVP?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 101
    Par défaut
    Bonsoir,

    il faut convertir les texte en nombres et les nombres en texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim Total as double
     
    Total = CDbl(Champs1.value)+CDbl(Champs2.value)+CDbl(Champs3.value) 'convertit du texte en nombre
    ChampsTotal = format(Total) 'Renvoie du texte
    Regarde Cint, CLng, Csng, CDbl Format et Cstr dans l'aide.

    Bonne soirée.

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir,

    Une idée ?

    Certes...

    S'intéresser à la fonction Val et à ce qu'elle retourne.

    Le contenu d'une TextBox est une chaîne de caractères, pas du "numérique" et l'opérateur + est également un opérateur de concaténation, pas uniquement un opérateur arithmétique... et VB choisit sa fonctionnalité ... en fonction du type des données (concaténation si String, addition si numérique)

    Dommage de n'apprendre celà qu'à la fin d'un stage (généralement, c'est au tout début...)

    Bonne étude ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Par défaut
    Merci, ucfoutu et spileo pour ces réponses rapides. Je vais me pencher sur cela dès demain matin.

    Pour ce qui est du stage, comment as-tu deviné?
    Mais bon, étant en ESC, je fais du contrôle de gestion et je n'ajoute des modules que pour améliorer la réutilisation future du fichier en mon absence. C'est comme ça que j'ai découvert le VBA, il y a trois semaines, en m'intéréssant de plus près à la codification des macros avec visual basic! Et depuis, on ne se quitte plus! lol

    et merci encore, je vous tiens au courant si ça fonctionne...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Par défaut
    MMhh... Je me suis rapidement penché sur l'appel Cdbl, sans avoir trop le temps. Mais visual basic me met une erreur (je crois que c'est la 31, si mes souvenirs sont bons).

    A oir quand j'aurai un peu plus de temps à consacrer à ça

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour yannpiot,

    Comme précisé par Ucfoutu et Spileo il faut transformer les données "texte" en "valeurs".

    Mais il faudrait préciser si les valeurs ne peuvent être que des nombres entiers auquel cas vous pouvez utiliser la fonction "Val" ou s'il peut s'agir de nombres décimaux et dans ce cas utiliser "CdBl".

    Mais dans ce dernier cas il reste un autre problème éventuel selon que dans paramètres "Panneau de configuration", "Options régionales" le séparateur décimal soit le "." ou la "," et selon le séparateur décimal que vous tapez dans la zone de saisie.

    Il y a d'ailleurs une solution pour pouvoir utiliser indifféremment le point ou la virgule sans avoir d'erreur que j'utilise pour les programmes mis à disposition d'autres personnes.

    Enfin pour l'utilisation des types de variables, je vous conseille de jeter un coup d'oeil ici :

    http://silkyroad.developpez.com/VBA/LesVariables/#LII-E

    cela peut toujours être utile.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Par défaut
    Merci jacques_jean pour on petit lien... mais j'avais déjà trouvé le même type d'info je ne sais plus où.

    J'ai bien essayé avec le code de Spileo, et ça marche comme il faut (dans mon cas, j'ai en effet besoin des décimales).

    Mais seul petit bémol:

    Quand tous mes champs sont complétés, le code marche. Par contre, lorsque
    j'ai des champs vides (""), le language ne prend pas en compte cette valeur comme du chiffre, même avec Cdbl() . D'où une erreur de script.

    D'un autre coté, je ne peut pas mettre de zéros dans les cases, cela ne signifierait pas la même chose...

    Je vais chercher de mon coté, je pense pouvoir glaner ça sur le net...

    Merci en tout cas! Je dois dire que le club des développeurs m'a énormément aidé dans mes tous premiers travaux de VBA

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 51
    Par défaut
    J'ai eu le même problème, et comme je débute un peu, je bricole.
    J'avais plusieurs textbox dans une userform et je voulais que la dernire textbox fasse le total de toutes les autres au fur et à mesure.
    Du coup, pour chaque textbox, j'applique à textbox_quand_change une macro que j'appelle à chaque fois: call recalculer
    La macro "recalculer" transfert les contenus des textbox dans un onglet, fais le total dans l'onglet et le renvoie dans la dernière textbox.
    Cette macro s'effectue à chaque fois qu'on change un truc dans une des textbox.
    Ca marche impec, mais ca reste du bricolage!! Et à force de faire des trucs comme ça, ca fait beaucoup d'onglets à gérer!

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Par défaut
    C'est une idée que j'avais eu en tête, mais en fin de compte, je me suis plutôt crée un bouton de mise à jour (comme ça, on peut modifier le total en cas de différence). Par contre, toujours rien trouvé concernant mon erreur:

    Il suffit d'une valeur textbox vide pour que le calcul entraine une erreur...


    De plus, il s'agit d'une partie de mon boulot que je ne peux pas modifier en ajoutant des zeros... Help! Quelqu'un aurait une idée SVP?

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Où se trouvent tes champs ? Dans un userform ou dans une feuille de calculs ?
    J'ai testé dans un userform :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Total = Val(TextBox2) + Val(TextBox3) + Val(TextBox4)
    et là on a bien le résultat attendu.
    Tu précises

    NB - TextBox3 vide

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Par défaut
    Ah, je n'ai effectivement pas utilisé Val, mais Cdlb... Je vois ça dès demain.

    Encore une fois, merci ouskel'n'or, tu m'es d'une grande aide!

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour Ouskel'n'or,

    On peut utiliser "Val" dans ce cas car il semble bien qu'il s'agisse de nombres entiers.

    Mais il y peut y avoir quand même une restriction s'il s'agit de nombre décimaux ?

    Note La fonction Val ne reconnaît que le point comme séparateur décimal (.). Lors de l'utilisation d'autres séparateurs décimaux (applications internationales, par exemple), convertissez la chaîne en nombre à l'aide de la fonction CDbl.

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello Jacques-Jean, J'ai testé sur trois textbox, le premier contenait un entier, le second rien, le troisième un nombre avec décimales séparées par un point et c'est ok.
    Rien n'empêche de remplacer une éventuelle virgule par un point en sortie de saisie (Textbox_Exit)
    Tu dis
    A+

    Edit
    Comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If InStr(TextBox2, ",") <> 0 Then TextBox2.Text = Replace(TextBox2.Text, ",", ".")
    End Sub
    NB - Cette solution évite le message d'erreur si la txtbox est vide)

  14. #14
    Invité
    Invité(e)
    Par défaut
    Ok Ouskel'n'or,

    C'est bien ce que j'utilise pour permettre que sur un TextBox l'utilisateur puisse taper aussi bien le "." que la "," :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace(TextBox2.Text, ",", ".")
    mais c'était juste pour le préciser.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Par défaut
    Bon, et bien j'ai essayé avec la fonction Val, et tout marchait correctement. Par contre, je n'ai testé qu'avec des entiers.Je verrais demain si ce code marche...
    Merci en tout cas d'avoir énuméré ce problème

    A part ça, toute cette partie de code est terminée, je vais pouvoir me reconcentrer sur autre chose...

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Par défaut
    J'ai essayé avec des décimales, et ça passe. étrange...

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 21
    Par défaut
    Et bien on dirait que les décimales sont prises en compte...
    ouf! Je marque le sujet comme résolu!!!

    Merci à tous en tout cas...

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

Discussions similaires

  1. Gérer le focus sur des TextBox, en événementiel
    Par laterite dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 10/01/2006, 17h10
  2. taille des variables ou des objets?
    Par BobLBricoleur dans le forum Flash
    Réponses: 4
    Dernier message: 27/12/2005, 14h57
  3. Réponses: 11
    Dernier message: 09/12/2005, 14h59
  4. Réponses: 9
    Dernier message: 17/10/2005, 10h44
  5. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45

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