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 :

Transfert de nombre décimal Excel-> VBA-> Excel [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 27
    Points
    27
    Par défaut Transfert de nombre décimal Excel-> VBA-> Excel
    Bonjour,
    J'ai un petit souci, qui me bloque depuis pas mal de temps...
    Je programme un outil scientifique, avec une interface sous VBA, en utilisant Excel comme base de données.
    Pour changer certains paramètres, l'utilisateur ouvre un userform, qui affiche la valeur actuelle du paramètre dans une textbox, puis peut modifier cette valeur, valide et la valeur mise à jour est renvoyée dans la cellule d'origine.
    Le problème avec des nombres décimaux réside au niveau de la ponctuation : sous Excel, la ponctuation pour les nombres décimaux est la virgule (0,12), sous VBA, c'est le point (0.12)
    Voici comment la procédure me transforme le nombre (Excel, VBA, Excel, VBA) en cas d'affichage, de renvoi puis de réaffichage
    0,12 -> 0,12 -> 0.12 -> 12

    J'ai tenté de mettre la valeur que je renvoie dans Excel dans un string avant de le metre dans la cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim temp as string
    temp = me.textbox1.value
    sheets("mysheet").cells(1,1).value = temp
    Mais le problème demeure (même en mettant Cstr(temp))

    J'ai tenté de jouer avec le format de la cellule d'arrivée dans Excel, mais foireux aussi.
    J'ai tenté de formater ma valeur avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    format(temp, "#.###,####")
    mais avec la boucle affichage, renvoi, réaffichage, je finis toujours par perdre la virgule (et la tête !!!)

    J'ai aussi tenté de changer dans les options de VBA la ponctuation pour les décimales de "." à ",", mais j'ai toujours une perte de décimale à l'arrivée (12,123 -> 12123) et en plus, j'ai déjà utilisé la syntaxe "." pour les décimales dans tout mon programme VBA (20000 lignes), je me vois mal faire une recherche du caractère "." ...

    Quelqu'un de plus astucieux que moi aurait-il une solution ?
    Merci !

  2. #2
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour ankoubzh le forum pas sûr d' avoir compris. un exemple renvoi la valeur de la textbox1 si virgule changement par le point en cas d 'erreur de frappe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_Change()
    Sheets("mysheet").Cells(1, 1).Value = Replace(TextBox1.Value, ",", ".")
    End Sub
    ou l' inverse si tu veus une virgule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_Change()
    Sheets("mysheet").Cells(1, 1).Value = Replace(TextBox1.Value, ".", ",")
    End Sub

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    ça peut effectivement être à cause d'une erreur de frappe, mais naturellement, si je rentre dans ma textbox "1,234" alors VBA comprend bien 1,234 mais recrache dans ma cellule Excel 1.234
    Ce qui fait qu'à l'affichage suivant, il va chercher la valeur 1.234 qu'il considère comme une écriture "Excel" et donc affiche 1234 dans le textbox

    En quelque sorte, tu lui parles en français, VBA comprend, il fait passer le message en anglais, et quand il reprend son message en anglais, il le lit comme s'il était en français et te le rends en français.
    Un peu comme s'il traduisait "my taylor is rich" du français vers l'anglais.
    J'espère avoir été plus clair (ou au moins original ^^)

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Je ne suis pas tout a fait au point j'utilise le point comme séparateur de décimal dans les option windows au boulot (vive les utilisateur lambda pas tout a fai lambda ). Mais ches mois le seul problème que j'ai vu c'est les textbox avec une virgule en utilisant le code de laetitia cela suffit. Je déclare des variable double et les utilise sans me prendre la tête. Je ne sais pas ce que tu fais de particulier pour que ca coince. Mais a part la saisie je ne vois pas ce que cela pourrait être. Un exemple de code qui coince ca pourrais être utile

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    J'ai exactement le même problème avec des données que je souhaite formater au format monétaire ; Tant que mes valeurs sont entières, pas de souci, dès que j'ai une somme à virgule, ça foire :4,5€ devient 5€ !!!
    J'ai essayé pas mal de techniques, sans succès pour l'instant.

    Christophe

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    Bonjour,
    J'ai fini par résoudre mon problème, notamment avec l'aide de laetitia :

    format de la cellule de la feuille excel en écriture scientifique
    + contrôle de la syntaxe avec le code de laetitia dans l'userform (ça évite que l'utilisateur fasse n'importe quoi)

    et surtout ! le renvoi de ma valeur finale de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets("mysheet").cells(1,1).value = CDbl(me.textbox1.value)
    en effet, le pb venait du fait que si j'entrais 4,567, VBA considérait ce nombre comme 4567. En le forçant avec CDbl, je lui fait comprendre que ça peut être un décimal, et lui ôte le doute.

    CC25, je pense que ton problème peut peut être être résolu en utilisant un formatage de cellule d'arrivée en Currency (je connais pas le terme exact dans la traduction française)
    et en mettant ta valeur dans la cellule convertie avec "CCur"

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

Discussions similaires

  1. nombre décimal / entier VBA Excel
    Par al_le_magnific dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/09/2007, 10h54
  2. Calcul du nombre de ligne d'une feuille Excel en VBA
    Par top_eagle dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/06/2007, 17h09
  3. [VBA-E] Excel transfert de cellules à chaque changement de nom
    Par zootman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/06/2006, 10h29
  4. [VBA-E] connaitre le nombre de ligne dans un tableau excel
    Par bigbarbe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/04/2006, 10h03
  5. [Vba] BDD : Excel + Access + Vba
    Par Emcy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/11/2005, 10h23

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