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 :

Détecter si le nombre décimal contenu dans une TextBox est formé avec une virgule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2016
    Messages : 38
    Par défaut Détecter si le nombre décimal contenu dans une TextBox est formé avec une virgule
    Bonjour à tous,

    Je travaille en ce moment sur la création d'une macro destinée à tourner sur une multitude de PC de l'entreprise. Je rencontre un petit problème d'ordre technique, sur certains ordinateurs, bien que l'on autorise l'utilisateur à remplir une TextBox uniquement à l'aide de chiffres et de points à l'aide d'un code similaire à celui ci dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox_Diameter_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    End Sub
    Lorsque j'enregistre dans un classeur la valeur de ma TextBox avec le code ci dessous (la case dans laquelle cette valeur est enregistrée est au format Nombre et attend un nombre décimal utilisant un point), sur certains ordinateurs, bien que le nombre affiché dans la textBox soit avec un point, le nombre qui s'affiche dans le tableau est avec une virgule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dies_Database.Worksheets("ListDies").Cells(derligne2, ColumnLDDiameter) = Me.TextBox_Diameter.Value
    Cela pose des problèmes de format par la suite quand je reprend ces données pour les comparer aux valeurs standards. J'avais essayé d'utiliser le code (Val(Replace(Me.TextBox_Diameter.Text, ",", "."))) au moment de l'enregistrement des données dans le tableau, le problème est que pour les ordinateurs sur lesquels les TextBoxs ne remplacent pas automatiquement les . par des , la macro me renvoie un rapport d'erreur concernant ce code.
    Je voulais donc savoir s'il existerait un moyen de checker si la TextBox contient un nombre décimal avec une virgule afin de la remplacer au moment de l'enregistrement avec le code présenté plus haut. Quelque chose du genre : If Me.TextBox_Diameter.Text.contains(,) (ce code étant totalement imaginaire)

    Quelqu'un aurait des idées?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    un peu de lecture pour te donner suffisamment de matiere :
    http://didier-gonard.developpez.com/...e-dans-texbox/
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    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
    bonjour
    Cela pose des problèmes de format par la suite quand je reprend ces données pour les comparer aux valeurs standards
    c'est ici qu'il faut reprendre la conception

    x.y dans textbox deviens x,y dans cellule ,c'est pas grave ca reste un numeric et non un string

    on peut alors si vraiment cela te gène , faire un numberformat="@" sur la cellule avant de coller la valeur du textbox
    mais alors ce n'est plus un numeric mais un string et cela te posera soucis l'ors de tes actions suivant comme tu l'a précisé

    résultat revoie la suite et laisse ta virgule dans les cellules
    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

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2016
    Messages : 38
    Par défaut
    Merci Jean-Philippe André, j'ai trouvé ce que je cherchais je vais faire un code come celui là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Len(Replace(Me.TextBox_Diameter.Text, ",", "")) <> Len(strpass) Then
       Dies_Database.Worksheets("ListDies").Cells(derligne2, ColumnLDDiameter) = (Val(Replace(Me.TextBox_Diameter.Text, ",", ".")))
    Else
       Dies_Database.Worksheets("ListDies").Cells(derligne2, ColumnLDDiameter) = Me.TextBox_Diameter.Value
    End If
    Merci du conseil patricktoulon, je ferai ça si jamais le code plus haut me pose toujours problème.

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour


    N'est-il dans ce cas pas plus simple de forcer ainsi (exemple) la saisie de la textbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox1_Change()
      Static etait As String
      If TextBox1.Text = "" Then Exit Sub
      If Not IsNumeric(Replace(TextBox1.Text, ".", ",")) Then TextBox1.Text = etait
      TextBox1.Text = Replace(TextBox1.Text, ",", "."): etait = TextBox1.Text
    End Sub
    et d'en attribuer ensuite directement la valeur Val(Textbox1.text) du contenu (qui aura donc le "." comme séparateur décimal) à la cellule concernée ?

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2016
    Messages : 38
    Par défaut
    Bonjour Unparia,

    J'ai déjà modifié mon code, mais j'essaierai le code proposé plus tard, merci!

    Juste pour ma culture, à quoi sert la variable était ici? Un code comme celui ci ne fonctionnerait pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TextBox1_Change()
      If TextBox1.Text = "" Then Exit Sub
      If Not IsNumeric(Replace(TextBox1.Text, ".", ",")) Then 
      TextBox1.Text = Replace(TextBox1.Text, ",", ".")
    End Sub

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/11/2014, 19h51
  2. Réponses: 3
    Dernier message: 16/07/2013, 00h48
  3. Cherche si une connexion est etablie avec une machine ou non
    Par aefmaaradji dans le forum VBScript
    Réponses: 1
    Dernier message: 14/06/2010, 13h49
  4. Réponses: 3
    Dernier message: 07/08/2009, 11h59
  5. Réponses: 4
    Dernier message: 01/09/2007, 12h22

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