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 :

Problème avec la fonction CSng


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 173
    Par défaut Problème avec la fonction CSng
    Bonjour à tous et Joyeux Noël avec très peu de retard!

    Je souhaite convertir une chaîne, comme par exemple "7.1250", en single.
    J'ai donc écrit:

    Dim X_Sng As Single
    X_Sng = CSng("7.1250")
    MsgBox(X_Sng)

    J'obtiens 71250.

    Je perds le point.
    Pourquoi?
    Et lorsque je tente de faire des calculs avec cette variable, ils sont évidemment faux.

    Merci pour votre aide.

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, c'est probablement un problème de paramètres régionaux, tu peux remplacer le point par une virgule comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X_Sng = CSng(Replace("7.1250", ".", ","))

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 173
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Oui effectivement lorsque je mets une virgule, le résultat est cohérent.
    Maintenant le problème est le suivant: la macro peut être utilisée dans différents pays.
    Y aurait t'il un moyen de forcer par exemple le point ?

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Bonjour,
    Le problème des fonctions de conversion qui commence par C prennent en charge les paramètres régionaux.

    La fonction Val, dans ton cas me paraît approprié car elle fonctionne côté VBA qui prend toujours le point comme séparateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    debug.print val(replace("123,567",",","."))
    Débug.print csng(replace(replace("1,1",",","."),".",Application.DecimalSeparator))

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 173
    Par défaut
    En fait je détecte le séparateur décimal dans les paramètres régionaux:

    Application.International(xlDecimalSeparator)

    et si c'est une virgule, je remplace le point par la virgule dans les procédures de saisie et de traitement.

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

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37
  3. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  4. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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