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 sur valeur numérique [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut problème sur valeur numérique
    Bonjour, voici un code qui fonctionne mais où il manque un petit quelque chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox_ht_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        'seule une valeur numérique peut être entré
        If InStr("0123456789.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
     
    End Sub
    Ce code me sert à indiquer un prix avec deux chiffres après la virgule. Le souci c'est que je peux mettre plus d'une virgule et plus de deux chiffres derrière celle-ci.

    D'où ces questions :
    - comment respecter le fait de mettre une seule virgule et deux chiffres après?
    - comment mettre deux zéro après la virgule dans le cas d'un prix rond (ex :190.00€)?

    PS : Ici il s'agit d'un point car je trouve ça plus pratique que la virgule au niveau de la frappe.

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

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Je te recommande cette saine lecture signée Didier GONARD (Monsieur) particulièrement recommandée dans ton cas de figure.
    Tuto particulièrement détaillé et explicite...
    A+

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub TextBox_ht_LostFocus()
        TextBox_ht = IIf(IsNumeric(TextBox_ht), Format(TextBox_ht, "###0.00"), "")
    End Sub
    Si le textbox est dans un userform, utiliser l'evenement exit.

    ctac

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    Le code exécuté ci-dessous permet de ne mettre que des chiffre et un seul point dans ma chaine (il remplace la virgule ex: 12.5 = 12,5). C'est une partie de ce que je cherche à faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBox_ht_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        'seule une valeur numérique peut être entré
        If InStr("0123456789.", Chr(KeyAscii)) = 0 Or InStr(TextBox_ht.Value, ".") <> 0 And Chr(KeyAscii) = "." _
        Then KeyAscii = 0: Beep
     
    End Sub
    Ca ne beepe pas (c'est pas important c'est juste une remarque)

    Le problème de ce code c'est que j'arrive à mettre une infinité de chiffre derrière ce point alors que je voudrais ne mettre que 2 chiffres.

    Ce que je cherche aussi c'est que si je tape le point directement sans rien devant, un zéro se mette automatiquement devant (cela ne devrait jamais arrivé vu les nombres à mettre mais sait on jamais) et pour finir ajouter à mon code la partie de ctac_ dans le cas ou j'ai un nombre rond.

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

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Je vais commencer par une petite question :
    As-tu compris ce code?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TextBox_ht_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        'seule une valeur numérique peut être entré
        If InStr("0123456789.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    End Sub
    Ligne par ligne, cela nous dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox_ht_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'Lorsque l'on appuie sur une touche (keypress),
    'le curseur clignotant dans le textbox (TextBox_ht_)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If InStr("0123456789.", Chr(KeyAscii)) = 0
    'Si le caractère saisi (donc la touche pressée) 
    'ne fait pas partie de la chaine "0123456789."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Then KeyAscii = 0 'Alors la saisie est annulée.
    Maintenant, fort de cela, tu peux faire la même chose pour :
    Ce que je cherche aussi c'est que si je tape le point directement sans rien devant, un zéro se mette automatiquement devant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox_ht_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        'seule une valeur numérique peut être entré
        If InStr("0123456789.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
        'Si le caractère saisi est le 1er ET qu'il s'agit d'un point alors j'ajoute 0 devant
        If Len(TextBox_ht) = 1 And TextBox_ht = "." Then TextBox_ht = "0."
    End Sub
    je voudrais ne mettre que 2 chiffres après la virgule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub TextBox_ht_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        'seule une valeur numérique peut être entré
        If InStr("0123456789.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
        'Si le caractère saisi est le 1er Et qu'il s'agit d'un point alors j'ajoute 0 devant
        If Len(TextBox_ht) = 1 And TextBox_ht = "." Then TextBox_ht = "0."
        'S'il existe un point dans le TextBox : InStr(TextBox_ht.Value, ".") <> 0
        'et que la longueur de la chaine contenue dans le textbox : Len(TextBox_ht.Value)
        'est supérieure à la place du . dans la chaine + 1 > InStr(TextBox_ht.Value, ".") + 1
        'alors on annule la saisie : Then KeyAscii = 0
        If InStr(TextBox_ht.Value, ".") <> 0 And Len(TextBox_ht.Value) > InStr(TextBox_ht.Value, ".") + 1 Then KeyAscii = 0
    End Sub
    J'espère t'avoir aidé et surtout aidé à comprendre le code pour que tu puisses le reproduire seul.
    A+

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    merci

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    En fait j'ai encore un petit souci avec le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub TextBox_ht_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        'seule une valeur numérique peut être entré
        If InStr("0123456789.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
     
        'Si le caractère saisi est le 1er Et qu'il s'agit d'un point alors j'ajoute 0 devant
        If Len(TextBox_ht) = 1 And TextBox_ht = "." Then TextBox_ht = "0."
     
        'S'il existe un point dans le TextBox : InStr(TextBox_ht.Value, ".") <> 0
        'et que la longueur de la chaine contenue dans le textbox : Len(TextBox_ht.Value)
        'est supérieure à la place du . dans la chaine + 1 > InStr(TextBox_ht.Value, ".") + 1
        'alors on annule la saisie : Then KeyAscii = 0
        If InStr(TextBox_ht.Value, ".") <> 0 And Len(TextBox_ht.Value) > InStr(TextBox_ht.Value, ".") + 1 Then KeyAscii = 0
    Le souci n'est pas dans le code lui-même car cela fait exactement ce que je cherche (merci pijaku) mais en testant je me suis rendu compte qu'il doit manquer une ligne d'instruction.

    En fait mais valeur numérique comporte un point pour être un nombre à virgule. Et là je peux rentrer deux virgules après la première.

    J'ai bien essayé des choses mais ça ne fonctionne pas donc j'appelle encore à l'aide.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/12/2014, 15h43
  2. [DATA] Test sur valeur numérique contenant des missing
    Par clao260 dans le forum SAS Base
    Réponses: 2
    Dernier message: 05/12/2013, 13h20
  3. [WD17] Problème affichage valeur numérique
    Par Xipotera dans le forum WinDev
    Réponses: 5
    Dernier message: 28/08/2012, 16h36
  4. Requete sur valeurs numériques répétées
    Par BMATH dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/02/2011, 09h10
  5. [XL-2003] Test à effectuer sur valeurs numériques (débutant VBA..)
    Par Clipper24 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/07/2010, 12h25

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