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 :

Forcer un format nombre dans une TextBox


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Forcer un format nombre dans une TextBox
    Bonjour à tous,

    Dans un formulaire, j'ai 3 TextBox, 2 contiennent un montant et doivent être au format 0.00€ et une autre format 00.

    J'ai fais ce code mais rien ne se passe, comment dois-je procéder ? Merci par avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Txt1_AfterUpdate()
    Txt1.Value = Format(Txt1.Value, "0.00€")
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    mais rien ne se passe
    L'évènement dont tu te sers n'interviens qu'en quittant la textbox. Sinon non.

    Pour mémoire (aide interne VBA)

    L'événement AfterUpdate se produit après l'événement BeforeUpdate et avant l'événement Exit pour le contrôle actif et avant l'événement Enter pour le contrôle suivant dans l'ordre de tabulation
    Ton code marche chez moi à CES conditions-là.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour,
    Merci pour ta réponse
    J'ai bien compris l’événement qui sera déclenché c'est pour cela que je l'ai appliqué, mais chez moi ça ne fonctionne pas. Le format reste affiché 0.00

    Voici un fichier exemple :Classeur1.xlsm

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ah ?
    on va y voir clair --->>
    1) et qu'as tu saisi, lorsque reste ainsi affiché ?
    2) mets donc cette ligne en première ligne
    lance, saisis, donne le focus à n'importe quel autre contrôle de ton userform et dis-moi si coucou s'affiche
    J'attends
    Voici un fichier exemple :Classeur1.xlsm
    Lis donc ma signature !!!!!!!!!

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Non rien ne s'affiche

    Après avoir ajouté une autre TextBox ça fonctionne

    J'ai également remarqué que si je mets une virgule à la place du point ça fonctionne. Comment cela se fait-il ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    [QUOTE
    Lis donc ma signature !!!!!!!!![/QUOTE]

    Oui, je m'en suis aperçu lorsque j'ai validé ma réponse, toutes mes excuses

  7. #7
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    J'ai fait ça et ça fonctionne, mais ce n'est pas l'idéal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Txt1_AfterUpdate()
    Txt1 = Format(Txt1.Value, "0.00 €")
    Me.Txt1 = Replace(Me.Txt1, ",", ".") 'après la validation je remplace la virgule par un point
    End Sub

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Après avoir ajouté une autre TextBox ça fonctionne
    Pardi ! relis ce que j'ai pris la peine de t'exposer du comportement de cet évènement .
    J'ai également remarqué que si je mets une virgule à la place du point ça fonctionne. Comment cela se fait-il ?
    Drôle de question... -->> réponse du berger à la bergère --->> format s'applique à du numérique, ce que n'est pas par exemple 1.1 si le séparateur décimal en cours sur ta machine est la virgule

    Au passage : c'est bien à toi (il me semble) que nous avons pris la peine d'exposer l'importance de toujours, typer, toujours préciser les propriétés utilisées, non ???
    Alors ? Corrige/complète-moi les petites choses en rouge ici, veux-tu ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Txt1 = Format(Txt1.Value, "0.00 €")
    Me.Txt1 = Replace(Me.Txt1, ",", ".") 'après la validation je remplace la virgule par un point

    EDIT : non, ce n'était pas toi. Mais tu vas en profiter --->> lis toute cette discussion --->>
    https://www.developpez.net/forums/d1...a/#post9759979

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox1_AfterUpdate()
    TextBox1.value= Format(Replace(TextBox1.Text, ".", ","), "0.00 €")
    End Sub
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then TextBox1.value = Format(Replace(TextBox1.Text, ".", ","), "0.00 €")
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour Patrick
    Si même un Expert s'y met à omettre la précision de la propriété utilisée, ma foi ...
    Comment espérer convaincre d'éviter ce genre de négligence ?
    Veux-tu bien s'il te plait éditer ton code et y remédier ? Donne le bon exemple.

  11. #11
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, voir ceci

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    voila c'est fait Mr le redresseur de tords ,dé fonceur de portes ouvertes
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    1) Merci pour tous de donner ce bon exemple

    2)
    fonceur de portes ouvertes
    T'es sûr que "foncer", c'est "forcer" ?J
    A moins que ce ne soit "poncer" (ce que je fais quelquefois sur une porte, bien évidemment alors ouverte, en vue de la repeindre).

    Ceci dit : C'est le contraire, que veut le demandeur. Il a d'ailleurs tort de le vouloir, ce contraire, mais laissons-le venir ...

  14. #14
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Sinon, je ne vois pas où tu veux en venir
    Il n'est jamais adroit d'utiliser un séparateur autre que celui défini par défaut (celui décidé en configuration) .
    Les raisons sont nombreuses :
    1) Utilisation directe de Isnumeric
    2) convivialité
    3) le contenu d'une textbox sera toujours (forcément) de type String. Son exploitation devra donc toujours nécessiter une conversion en numérique -->>
    Utilisation de Val (si le . y est comme séparateur)
    Utilisation de cdbl (par exemple) si le séparateur saisi y est autre que le .
    Conversion pour conversion (puisque de toute mùanière inévitable) , autant en choisir une universelle (pour tout dans l'application). Cela évitera des étourderies ici et/ou là .

    Bon dimanche

  15. #15
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour à tous,

    J'ai supprimé ma dernière réponse que je trouvais inutile car elle ne répondait aux attentes.
    Je me suis penché sur plusieurs tuto trouvé dans ce forum, je vais essayé de trouver la solution que tu attends.

    Merci Patrick pour ton intervention, je vais regarder ta proposition de plus près.

    Je suis attentif à toutes remarques utiles, mais si parfois je les trouve un peu agressive, ce n'est là que mon ressenti. J'apprécie ce que vous faites pour que ce forum puisse être aussi actif.

  16. #16
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ne jamais voir de l'agressivité là où il y a volonté d'alerter.
    Si je vois un pêcheur qui fait une erreur (surtout si susceptible d'endommager son matos; un plomb d'un poids con compatible avec sa canne, par exemple) --->> je le lui dis -->> et je ne manque pas de lui dire (cela lui servira dorénavant pour toute autre canne) qu'il éviterait ce genre d'erreur en lisant ce qui est imprimé sur sa canne.

    Il fait ensuite comme IL l'entend. Et s'il se sent "agressé, c'est sa seule affaire. Ma conscience, elle, est tranquille.
    Bon dimanche

    PS : amuse-toi (tu vas vite comprendre) à te mettre dans la peau d'un anglophone qui saisirait "1,224.32" (qui est ce que nous écrivons "1224,32") dans ta textbox et applique ensuite ton Replace puis essaye d'utiliser le résultat (que ce soit pour un calcul ou pour affecter ce résultat à une cellule). Je te laisse voir ...

  17. #17
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Est-ce cela que tu attends ? J'ai remarqué que si je ne mets pas une virgule, le résultat sera = 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Txt1_AfterUpdate()
    Dim T As Double
    If IsNumeric(Me.Txt1) Then
    T = CDbl(Me.Txt1)
    End If
    Me.Txt1.Value = Format(T, "0.00 €")
    End Sub

  18. #18
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Force le séparateur décimal "normal" (la virgule donc pour ta machine)
    Interdis la saisie du point (où que ce soit dans la saisie) . Tu trouveras sur ce site une foultitude de discussions, etc ... te permettant de contrôler les saisies.
    Vérifie par la fonction Isnumeric
    Convertis ensuite par une fonction de conversion en numérique chaque fois que tu dois utiliser la valeur de cette textbox.
    Voilà. C'est aussi simple que cela.

  19. #19
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Merci pour ta réponse. Cependant je rencontre un problème. Je ne sais pas quel séparateur décimal vont utiliser les utilisateurs. Certain préfère le point et d'autre la virgule. Donc , je dois envisager les 2 cas.
    J'ai pu parcourir pas mal de tuto, je n'ai pas toujours tout compris, mais je vais les reprendre.
    Je vais creuser pour trouver une solution.

  20. #20
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re avec formatage dynamique (keypress/keydown)+masques de saisie
    re
    allez juste pour m'amuser un peu avec ca
    formatage dynamique a chaque touche tapées

    je te propose l'interception dynamique da la touche tapée
    gestion de la touche back et suppr en supplément
    remplacement du point par la virgule par le remplacement du keyascii
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 46 Then TextBox1.Tag = ""
    If TextBox1.Tag <> "" Then
    If KeyCode = 8 Then TextBox1.Tag = Mid(TextBox1.Tag, 1, Len(TextBox1.Tag) - 1)
    End If
    End Sub
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If "0123456789,." Like "*" & Chr(KeyAscii) & "*" Then
    If InStr(TextBox1, ",") = 1 Then
    If Len(Split(TextBox1.Tag, ",")(1)) = 2 Then KeyAscii = 0
    End If
    If KeyAscii = 46 Then KeyAscii = 44
    TextBox1.Tag = TextBox1.Tag & Chr$(KeyAscii)
    KeyAscii = 0
    End If
    End Sub
    Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If TextBox1.Tag <> "" Then TextBox1.Value = Format(CDbl(TextBox1.Tag), "0.00 €")
    TextBox1.SelStart = Len(TextBox1.Tag) + 1
    End Sub
    je te laisse deviner comment en ajoutant une simple chose tu peux choisir de faire apparaitre le point ou la virgule avec ce code

    je t'aide un peu

    ce qui s'affiche dans le textbox c'est le formatage de son tag alors comment fait on ?

    en même temps des la première touche tapé tu a même un masque de saisie
    c'est bo!! la vie non?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/04/2017, 21h33
  2. format heure dans une textbox
    Par pascb423 dans le forum VB.NET
    Réponses: 2
    Dernier message: 26/10/2016, 16h41
  3. [XL-2010] Forcer le format date dans une colonne
    Par toudar dans le forum Excel
    Réponses: 4
    Dernier message: 16/05/2016, 16h53
  4. Format nombres dans une requête union
    Par triaguae dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 15/01/2008, 08h59
  5. comment forcer le format date dans une requête
    Par chauvex99 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/07/2007, 09h49

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