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 :

Format textbox Point à la place de la virgule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut Format textbox Point à la place de la virgule
    Bonsoir,

    J'ai formulaire avec trois TextBox "Débit, Crédit et contrevaleur en Franc"
    Lorsque je met un point à la place de la virgule aux textbox débit ou crédit J'ai un message d'erreur "Incompatibilité de type".

    Mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub TextBoxDébit_Change()
     If TextBoxDébit <> "" Then TextBoxContValeur = Format(TextBoxDébit * 6.55957, "0.00 F")
     TextBoxCrédit.Visible = IIf(TextBoxDébit <> "", 0, 1)
     Label6.Visible = False
    End Sub
     
    Private Sub TextBoxCrédit_Change()
    If TextBoxCrédit <> "" Then TextBoxContValeur = Format(TextBoxCrédit * 6.55957, "0.00 F")
    TextBoxDébit.Visible = IIf(TextBoxCrédit <> "", 0, 1)
     Label5.Visible = False
    End Sub
    Je vous remercie d'avance.
    Un fichier valant mieux qu'un long discours, veuillez voir la pièce jointe.

    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    C'est parce que, selon tes options régionales dans Windows, ce n'est pas le point qui est le séparateur décimal. C'est la virgule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    If Trim(TextBoxDébit) <> "" Then
    If Not IsNumeric(TextBoxDébit) Then
     MsgBox TextBoxDébit & " n'est pas pas une valeur numerique"
     Exit Sub
    End If
    End If
     
     If Trim(TextBoxDébit) <> "" Then TextBoxContValeur = Format(TextBoxDébit * 6.55957, "0.00 F")
     TextBoxCrédit.Visible = IIf(TextBoxDébit <> "", 0, 1)
     Label6.Visible = False

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il existe un tuto de Didier GONARD très détaillé consacré à la saisie des valeurs numériques dans un textbox à cette adresse http://didier-gonard.developpez.com/...e-dans-texbox/

    Dans votre cas une solution consisterait à utiliser le contrôle de saisie défini par Didier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBoxDebit_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If InStr("1234567890,-", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    End Sub
     
     
    Private Sub TextBoxCredit_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If InStr("1234567890,-", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    End Sub
    Il faudra néanmoins contrôler le nombre de séparateurs décimaux saisis dans les textbox en modifiant votre code dans chaque textbox_change

    Une solution est celle-ci :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Private NbSeparateurs As Integer
    Private I As Integer
     
    Private Sub TextBoxDebit_Change()
     
        NbSeparateurs = 0
        For I = 1 To Len(TextBoxDebit)
             If Mid(TextBoxDebit, I, 1) = "," Then NbSeparateurs = NbSeparateurs + 1
        Next I
     
        If TextBoxDebit <> "" And NbSeparateurs <= 1 Then
                    TextBoxContreValeurDebit = Format(TextBoxDebit * 6.55957, "0.00 F")
              Else
                    MsgBox ("Il ne peut y avoir deux séparateurs décimaux !")
                    TextBoxDebit = Mid(TextBoxDebit, 1, Len(TextBoxDebit) - 1)
             Exit Sub
        End If
     
    End Sub
     
    Private Sub TextBoxCredit_Change()
     
        NbSeparateurs = 0
        For I = 1 To Len(TextBoxCredit)
             If Mid(TextBoxCredit, I, 1) = "," Then NbSeparateurs = NbSeparateurs + 1
        Next I
     
        If TextBoxCredit <> "" And NbSeparateurs <= 1 Then
                    TextBoxContreValeurCredit = Format(TextBoxCredit * 6.55957, "0.00 F")
              Else
                    MsgBox ("Il ne peut y avoir deux séparateurs décimaux !")
                    TextBoxCredit = Mid(TextBoxCredit, 1, Len(TextBoxCredit) - 1)
             Exit Sub
        End If
     
    End Sub
    Nb : Pour la portabilité de votre code, n'utilisez pas de noms de variables ou d'objets avec des caractères accentués. Les objets ci-dessus ont été "désaccentués"

    J'ai modifié votre UserForm pour mettre une contre-valeur pour le débit et le crédit

    Cordialement.

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut
    Bonjour Docmarti

    Je te remercie je vais essayer de me dépatouiller avec ceci!

    Je te souhaite une bonne journée

    Max

  5. #5
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    J'ai eu un probleme similaire dernierement et j'ai utilisé ce petit code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TextBox1_Change()
    TextBox1.Text = Replace(TextBox1.Text, ".", ",")
     
     
    End Sub
    j’espère que ça peut t'aider

    Mieux si ton fichier devra tourner sur differentes machines

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub TextBox1_Change()
    if Application.International(xlDecimalSeparator)="," then
    TextBox1.Text = Replace(TextBox1.Text, ".", ",")
    elseif Application.International(xlDecimalSeparator)= "." then
    TextBox1.Text = Replace(TextBox1.Text, ",", ".")
    end if
     
    End Sub

Discussions similaires

  1. [Débutant] [VS2003] Point à la place d'une virgule dans une String
    Par ahmedige dans le forum VB.NET
    Réponses: 1
    Dernier message: 19/07/2011, 15h17
  2. [XL-2007] Des points à la place des virgules
    Par agrimault dans le forum Excel
    Réponses: 4
    Dernier message: 13/10/2010, 08h14
  3. Réponses: 3
    Dernier message: 30/12/2008, 11h17
  4. point à la place de la virgule
    Par afrodje dans le forum VB.NET
    Réponses: 6
    Dernier message: 14/03/2007, 18h40
  5. [Nombre]formater le nombre de décimal après une virgule.
    Par PascalCmoa dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/03/2007, 10h40

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