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 :

TextBox - Valeur décimal [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de I folima Elda
    Homme Profil pro
    Programmeur & Intégrateur
    Inscrit en
    Décembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Programmeur & Intégrateur

    Informations forums :
    Inscription : Décembre 2007
    Messages : 34
    Par défaut TextBox - Valeur décimal
    Bonjour à tous,


    Voilà, j'ai quelque soucis en ce moment avec mon code. En effet, j'ai créer une userbox très simple pour tenir des comptes: 2 optionbutton (pour savoir si c'est un crédit ou un débit) et 3 textbox pour indiquer la date, l'objet et le montant.

    Au fil de mes recherche, j'ai trouver comment convertir mon textbox 'montant' pour qu'il mette une valeur numérique. Mais le soucis c'est que lorsque je décide de la mettre dans une cellule, elle ne m'indique pas les valeurs décimals. Elle mets simplement xxx.00€

    Comment faire pour lui faire mettre les valeurs décimals? Si je pouvais avoir une explication avec la solution, ça serai très bien. Merci à vous.

    mon code est le 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    If IsNumeric(TextBox3.Value) = False Then
            MsgBox TextBox3.Value & " n'est pas une valeur valide. Entrez une valeur valide", vbExclamation, "Valeur non valide"
            GoTo fin
        End If
     
        If TextBox1.Value = "" Or TextBox2.Value = "" Or TextBox3.Value = "" Then
            MsgBox "Des champs ne sont pas remplis. Veuillez remplir tous les champs.", vbExclamation, "Valeur(s) requise(s)"
            GoTo fin
        Else
            Unload UserForm1
        End If
     
     
    ' donne la derniere ligne écrite
    Dim MaLigne As Variant
    MaLigne = Range("A65536").End(xlUp).Address
    MaLigne = Range(MaLigne).Row
     
    'ajout d'une ligne
    MaLigne = MaLigne - 2
        Rows(MaLigne & ":" & MaLigne).Select
        Selection.Insert Shift:=xlDown
        Selection.RowHeight = 25
        Range("A" & MaLigne & ":C" & MaLigne).Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        With Selection.Font
            .Name = "Calibri"
            .FontStyle = "Normal"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Range("A1").Select
     
    'insertion des données
    montant = Val(TextBox3.Value)
    Cells(MaLigne, 1) = TextBox1.Value
    Cells(MaLigne, 2) = TextBox2.Value
        If OptionButton1.Value = True Then
            Cells(MaLigne, 3) = -1 * montant
        ElseIf OptionButton2.Value = True Then
            Cells(MaLigne, 3) = montant
        End If
     
    fin:

  2. #2
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonjour I folima Elda , le forum
    Dim montant As String
    montant = Val(CStr(TextBox3.Value))
    1) montant est une chaine de caractère.
    2a) Convertion en chaine de TextBox3.value puis
    2b) Convertion en valeur numérique de la chaine puis
    2c) Affectation de la valeur numérique à "montant" (qui est une variable chaine) => reconvertion en chaine !
    Cells(MaLigne, 3) = "-" & Montant 'ou
    Cells(MaLigne, 3) = Montant
    3) Ecrit la chaine dans la cellule
    4) Et affiche la chaine en format monétaire (obligatoirement un nombre pour être bien écrit)

    5) Ca ne se passe pas bien



    Comment sont formatés la textBox3 et la cellule de réception de la valeur ?
    Quelle est la version Excel Anglais, Français...

    Je changerais dans ce style :
    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
     
     
    'Dim montant As Currency ' ou Double
    'montant = Val(CStr(TextBox3.Value))
     
    Cells(MaLigne, 1) = TextBox1.Value
    Cells(MaLigne, 2) = TextBox2.Value
     
    'Format standart monétaire euro, Formatage automatique c'est mieux
    Cells(MaLigne, 3).NumberFormat = "_-* #,##0.00 [$€-40C]_-;-* #,##0.00 [$€-40C]_-;_-* ""-""?? [$€-40C]_-;_-@_-"
     
        If OptionButton1.Value = True Then
            Cells(MaLigne, 3) = -1 * val(TextBox3.Value)  'VAL() inutile suivant le contexte
        ElseIf OptionButton2.Value = True Then
            Cells(MaLigne, 3) = val(TextBox3.Value)         'VAL inutile suivant le contexte
        End If
    Ai-je bien compris ?

    ESVBA

  3. #3
    Membre averti Avatar de I folima Elda
    Homme Profil pro
    Programmeur & Intégrateur
    Inscrit en
    Décembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Programmeur & Intégrateur

    Informations forums :
    Inscription : Décembre 2007
    Messages : 34
    Par défaut Merci de ta réponse
    Ta proposition n'arrange pas mes affaires désolés. Cependant, je retiens le: -1 * montant
    J'oublie toujours d'utiliser ça pour obtenir un nombre négatif ^^.


    En fait mon problème c'est que je rentre une valeur décimal dans ma textbox, admettons 1,74€. Quand je clique OK, il va faire tout mon p'tit bordel et au moment de mettre le montant, il écrira 1,00€. Or c'est 1,74€ que je souhaite.

    Je sais pas si c'est moi qui me suis mal exprimé ou non. Et pour le Val(), j'ai lu qu'il était important de le mettre pour convertir la valeur d'un textbox de lettre à nombre.

    note: je vais éditer le code de mon premier message, comme une MAJ

  4. #4
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Salut, peut être un probleme de déclaration de variable...

    Voici ce que j'ai essayé (tout simplement)
    Ma cellule A1 est en type Monétaire €
    j'ai ajouté un UserForm avec un bouton et un champ texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub CommandButton1_Click()
    Dim montant As Variant
    montant = CVar(TextBox1.Text)
    montant = Replace(montant, ",", ".")
    Cells(1, 1) = montant
    End Sub
    Dans ton exemple ça ferait :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    Sub Ta procedure
    Dim montant As Variant
    If IsNumeric(TextBox3.Value) = False Then
            MsgBox TextBox3.Value & " n'est pas une valeur valide. Entrez une valeur valide", vbExclamation, "Valeur non valide"
            GoTo fin
        End If
     
        If TextBox1.Value = "" Or TextBox2.Value = "" Or TextBox3.Value = "" Then
            MsgBox "Des champs ne sont pas remplis. Veuillez remplir tous les champs.", vbExclamation, "Valeur(s) requise(s)"
            GoTo fin
        Else
            Unload UserForm1
        End If
     
     
    ' donne la derniere ligne écrite
    Dim MaLigne As Variant
    MaLigne = Range("A65536").End(xlUp).Address
    MaLigne = Range(MaLigne).Row
     
    'ajout d'une ligne
    MaLigne = MaLigne - 2
        Rows(MaLigne & ":" & MaLigne).Select
        Selection.Insert Shift:=xlDown
        Selection.RowHeight = 25
        Range("A" & MaLigne & ":C" & MaLigne).Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        With Selection.Font
            .Name = "Calibri"
            .FontStyle = "Normal"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Range("A1").Select
     
    'insertion des données
    montant = CVar(TextBox1.Text)
    montant = Replace(montant, ",", ".")
     
    Cells(MaLigne, 1) = TextBox1.Value
    Cells(MaLigne, 2) = TextBox2.Value
        If OptionButton1.Value = True Then
            Cells(MaLigne, 3) = -1 * montant
        ElseIf OptionButton2.Value = True Then
            Cells(MaLigne, 3) = montant
        End If
     
    fin:
    End Sub
    Bon courage !

  5. #5
    Membre averti Avatar de I folima Elda
    Homme Profil pro
    Programmeur & Intégrateur
    Inscrit en
    Décembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Programmeur & Intégrateur

    Informations forums :
    Inscription : Décembre 2007
    Messages : 34
    Par défaut
    Jojo, ton truc marche très bien sauf quand il s'agit de faire un nombre négatif. Il me bug quand je lui demande de multiplier par -1 :s

  6. #6
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Oui exact ! j'avais oublié ton -1 !!!

    Reprend l'intégralitée de ce code :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Sub Ta procedure
    Dim montant As Variant
    If IsNumeric(TextBox3.Value) = False Then
            MsgBox TextBox3.Value & " n'est pas une valeur valide. Entrez une valeur valide", vbExclamation, "Valeur non valide"
            GoTo fin
        End If
     
        If TextBox1.Value = "" Or TextBox2.Value = "" Or TextBox3.Value = "" Then
            MsgBox "Des champs ne sont pas remplis. Veuillez remplir tous les champs.", vbExclamation, "Valeur(s) requise(s)"
            GoTo fin
        Else
            Unload UserForm1
        End If
     
     
    ' donne la derniere ligne écrite
    Dim MaLigne As Variant
    MaLigne = Range("A65536").End(xlUp).Address
    MaLigne = Range(MaLigne).Row
     
    'ajout d'une ligne
    MaLigne = MaLigne - 2
        Rows(MaLigne & ":" & MaLigne).Select
        Selection.Insert Shift:=xlDown
        Selection.RowHeight = 25
        Range("A" & MaLigne & ":C" & MaLigne).Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        With Selection.Font
            .Name = "Calibri"
            .FontStyle = "Normal"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        Range("A1").Select
     
    'insertion des données
    montant = Replace(TextBox3.Text, ".", ",")
    montant = CDec(montant)
    Cells(MaLigne, 1) = TextBox1.Value
    Cells(MaLigne, 2) = TextBox2.Value
        If OptionButton1.Value = True Then
            Cells(MaLigne, 3) = -1 * montant
        ElseIf OptionButton2.Value = True Then
            Cells(MaLigne, 3) = montant
        End If
     
    fin:
    End Sub

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/09/2006, 17h18
  2. Obtenir valeur décimale d'un caractère
    Par Onil_ dans le forum C++
    Réponses: 4
    Dernier message: 04/06/2006, 15h56
  3. Comparaison valeurs décimales
    Par Mvu dans le forum ASP
    Réponses: 1
    Dernier message: 21/03/2006, 17h23
  4. [Sql] susbstr et valeur décimale
    Par arezki76 dans le forum Oracle
    Réponses: 1
    Dernier message: 26/12/2005, 11h16
  5. saisie d'une valeur décimale dans un CSpinEdit
    Par Milowen dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/10/2005, 09h57

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