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 :

utiliser des chiffres a virgules avec une inputbox [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut utiliser des chiffres a virgules avec une inputbox
    bonjour a tous

    j'utilise une inputbox pour taper un montant à chiffres après la virgules
    mais lorsque j'utilise la variable obtenue avec l'inputbox pour l'utiliser dans un calcul, les chiffre après la virgule ne sont pas utiliser
    exemple si je tape "10,52", c'est 10 qui sera utiliser
    voici le 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
     
    Sub si_gantie_ok()
    Dim numdl, i, g As Integer
    Dim eco As Double
     
    ' inputbox pour demander l'ecotaxe
    eco = Application.InputBox("quelle est l'eco taxe", Type:=1)
    g = 18
     
     
    ' boucle pour la formule du prix ttc
    numdl = Range("a65536").End(xlUp).Row 'recuper le numero de la dernière ligne du tableau
    For i = 2 To numdl
    If Range("h" & i) <> "" Then Range("i" & i).Formula = "=(RC[-1]+" & CDbl(Val(eco)) + Val(g) & ")*1.196"
        Range("i" & i).NumberFormat = "#,##0.00"
        Range("i" & i).Interior.ColorIndex = 4
     
    If Range("h" & i) <> "" Then Range("j" & i).Formula = "=((RC[-2]*1.04)+" & CDbl(Val(eco)) & ")*1.196"
        Range("j" & i).NumberFormat = "#,##0.00"
        Range("j" & i).Interior.ColorIndex = 4
    Next i
     
    'modifie "valeur!" en prix
    ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas, xlErrors) = "Prix"
     
    End Sub

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Un test (tu utilise la virgule comme séparateur décimal)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Toto()
    Dim Eco As Double
    Dim Rep As String
     
    Rep = InputBox("Valeur")
    If Rep <> "" Then Eco = Replace(Rep, ",", ".")
    MsgBox Eco
    End Sub

  3. #3
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    ton code bug, et j'ai modifié juste ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Rep <> "" Then Eco = Replace(Rep, ".", ",")
    le resultat dans la msgbox est bon
    "10,52" mais l'utilisation dans la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Range("h" & i) <> "" Then Range("i" & i).Formula = "=(RC[-1]+" & CDbl(Val(eco)) + Val(g) & ")*1.196"
    c'est a que ça ne conviens pas

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ca ne bug pas mais tu as mal testé ou à la hâte

    Ton 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
    Sub si_gantie_ok()
    Dim NumDL As Long, i As Long
    Dim G As Integer
    Dim Rep As Variant
    Dim Eco As Double
     
    Application.ScreenUpdating = False
    ' inputbox pour demander l'ecotaxe
    Rep = Application.InputBox("quelle est l'eco taxe")
    If Rep <> False Then
        Eco = Val(Replace(Rep, ",", "."))
        G = 18
        With Sheets("Feuil11")                                           'à adapter
            ' boucle pour la formule du prix ttc
            NumDL = .Cells(.Rows.Count, "A").End(xlUp).Row               'recuper le numero de la dernière ligne du tableau
            For i = 2 To NumDL
                If .Range("H" & i) <> "" Then
                    .Range("I" & i).Formula = "=(RC[-1]+" & Eco + G & ")*1.196"
                    .Range("J" & i).Formula = "=((RC[-2]*1.04)+" & Eco & ")*1.196"
                    With .Range("I" & i & ":J" & i)
                        .NumberFormat = "#,##0.00"
                        .Interior.ColorIndex = 4
                    End With
                Else
                    With .Range("I" & i & ":J" & i)
                        .Interior.ColorIndex = xlNone
                        .ClearContents
                    End With
                End If
            Next i
            'modifie "valeur!" en prix
            On Error Resume Next
            .UsedRange.SpecialCells(xlCellTypeFormulas, xlErrors) = "Prix"
            On Error GoTo 0
        End With
    End If
    End Sub

  5. #5
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    c'est étrange
    si je veux récupérer le résultat de l'inputbox dans une cellule j'obtiens bien un chiffre a virgule "10,52"

    mais dans la formule de calcul, (en faisant le test pas a pas) j'obtiens 10

    donc la solution non propres, serait d'utiliser une cellule "tampon" ou j'irai placé le chiffre de l'inputbox (10,52) pour faire le calcul,

    mais je ne peux traiter directement cette information dans ma formule de calcul, sans qu'elle soit ramener à son entier 10 au lieu de 10,52

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ce que tu raconte ici est étrange.
    Mets TON code, tu as loupé quelque chose.

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    ma logique est perturbée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim eco As Double
    eco = Application.InputBox("quelle est l'eco taxe", Type:=1)
     
    blabla.. "=(RC[-1]+" & CDbl(Val(eco)) + Val(g) & ")*1.196"
    Pour moi, tu es victime de "l'effet mayonnaise"

    • tu déclares ta variable en double
    • tu emploies un argument type 1 qui force un nombre
    • tu utilises la fonction val au niveau de ce nombre (que tu tortures avec CDBL par dessus..)


    D'où la perturbation logique, ensuite si tu regardes l'aide VBA à VAL, fonction, tu verras :

    La fonction Val arrête la lecture de la chaîne au premier caractère ne faisant apparemment pas partie d'un nombre. Les symboles et caractères fréquemment associés aux valeurs numériques, comme le signe $ et les virgules ne sont pas reconnus.
    Tu obtiens bien ce que tu as demandé finalement

    cordialement,

    Didier

  8. #8
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    merci pour votre aide
    c'est grâce à ces erreurs et a vos explications que j'évolue

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/03/2010, 19h05
  2. : remplir des zones de texte avec une boucle For
    Par Haro_GSD dans le forum Access
    Réponses: 3
    Dernier message: 20/09/2005, 21h23
  3. Réponses: 3
    Dernier message: 21/06/2005, 11h37
  4. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45
  5. Réponses: 2
    Dernier message: 08/07/2004, 01h04

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