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 :

IsNumeric et ,. [XL-2002]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 140
    Par défaut IsNumeric et ,.
    Bonjour à tous,

    Je réalise une application VBA dans laquelle l'utilisateur se retrouve à saisir des valeurs dans des TextBox. Pour vérifier si il s'agit bien de nombres que je vais stocker dans les cellules, j'utilise la fonction IsNumeric. Jusqu'ici tout se passe très bien, il me recopie tout le temps les nombres dans les cellules.

    Le problème se trouve dans la cellule juste à côté, dont la formule est un quotient de deux cellules, dont celle qui possède le IsNumeric. Lorsque l'utilisateur entre un nombre entier, tout va pour le mieux. Toutefois, ça coince lorsqu'il entre un nombre décimal. En effet, pour que IsNumeric fonctionne, il faut entrer le nombre décimal avec une virgule. Or mon quotient lui demande un point. Existe-t-il un argument permettant le contraire ?

    Voici le code de ma ligne IsNumeric pour copier dans les cellules :

    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
    Sub CommandButton1_Click()
        If IsNumeric(TextBox1.Value) = True And IsNumeric(TextBox2.Value) = True And IsNumeric(TextBox3.Value) = True And IsNumeric(TextBox4.Value) = True And IsNumeric(TextBox5.Value) = True And IsNumeric(TextBox6.Value) And IsNumeric(TextBox7.Value) And IsNumeric(TextBox8.Value) Then
            Application.Workbooks(1).Worksheets(1).Range("H" & compteur).Value = TextBox1.Value
            Application.Workbooks(1).Worksheets(1).Range("F" & compteur).Value = TextBox2.Value
            Application.Workbooks(1).Worksheets(1).Range("K" & compteur).Value = TextBox3.Value
            Application.Workbooks(1).Worksheets(1).Range("I" & compteur).Value = TextBox4.Value
            Application.Workbooks(1).Worksheets(1).Range("N" & compteur).Value = TextBox5.Value
            Application.Workbooks(1).Worksheets(1).Range("L" & compteur).Value = TextBox6.Value
            Application.Workbooks(1).Worksheets(1).Range("Q" & compteur).Value = TextBox7.Value
            Application.Workbooks(1).Worksheets(1).Range("O" & compteur).Value = TextBox8.Value
            Unload UserForm3
     
        Else
            MsgBox ("Veuillez remplir des valeurs numériques entières ou avec une virgule (,) dans les champs.")
        End If
    End Sub
    Voici ensuite ma formule telle qu'elle apparait dans la feuille excel pour la cellule D3:

    =SI(C3=0;"";ARRONDI(E3/C3;2))

    Et la manière dont je les ai codé dans VBA :

    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
        '
        'On remplit l'ensemble des données et on arrondit le cout unitaire a deux décimales
        '
     
        For compteur = 3 To DerniereLigneProg
            Range("D" & compteur).Formula = "=IF(C" & compteur & "=0," & Chr(34) & Chr(34) & ",ROUND(E" & compteur & "/C" & compteur & ",2))"
            Range("F" & compteur).Formula = "=C" & compteur
            Range("G" & compteur).Formula = "=IF(F" & compteur & "=0," & Chr(34) & Chr(34) & ",ROUND(H" & compteur & "/ F" & compteur & ",2))"
            Range("H" & compteur).Formula = "=E" & compteur
            Range("I" & compteur).Formula = "=F" & compteur
            Range("J" & compteur).Formula = "=IF(I" & compteur & "=0," & Chr(34) & Chr(34) & ",ROUND(K" & compteur & "/ I" & compteur & ",2))"
            Range("K" & compteur).Formula = "=H" & compteur
            Range("L" & compteur).Formula = "=I" & compteur
            Range("M" & compteur).Formula = "=IF(L" & compteur & "=0," & Chr(34) & Chr(34) & ",ROUND(N" & compteur & "/ L" & compteur & ",2))"
            Range("N" & compteur).Formula = "=K" & compteur
            Range("O" & compteur).Formula = "=L" & compteur
            Range("P" & compteur).Formula = "=IF(O" & compteur & "=0," & Chr(34) & Chr(34) & ",ROUND(Q" & compteur & "/ O" & compteur & ",2))"
            Range("Q" & compteur).Formula = "=N" & compteur
        Next compteur
    Pour passer la fonction IsNumeric, il me faut entrer un nombre du type :
    25
    25,6

    Mais le quotient lui ne fonctionne que avec les nombres du type :
    25
    25.6

    Je vous remercie vivement par avance pour votre aide.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Paenitentia et le forum
    Je ne comprends pas le problème : ton séparateur de décimales est la virgule ou le point ?
    Le seul réel problème que je vois, c'est que tu injectes le contenu d'une TextBox (qui est, comme son nom l'indique du texte) dans une cellule => ce n'est pas comme si tu le rentais à la main : Excel transforme automatiquement la cellule en cellule texte. Il faut donc transformer le texte en nombre avant de l'injecter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Application.Workbooks(1).Worksheets(1).Range("H" & compteur).Value = TextBox1.Value
    devient donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Application.Workbooks(1).Worksheets(1).Range("H" & compteur) = CDbl(TextBox1)
    Ta version semble être en français. pourquoi te creuser la tête pour écrire une formule en anglais dans ton code, alors que tu peux l'écrire directement en français ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("D" & compteur).FormulaLocal = "=si(C" & compteur & "=0;"""";arrondi(E" & compteur & "/C" & compteur & ";2))"
    me semble plus lisible que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Range("D" & compteur).Formula = "=IF(C" & compteur & "=0," & Chr(34) & Chr(34) & ",ROUND(E" & compteur & "/C" & compteur & ",2))"
    Enfin pour moi. et ça évite les problèmes de séparateurs
    A+

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 140
    Par défaut
    Ça fonctionne. Merci beaucoup.

    Pour ce qui est des fonctions en anglais, on m'avait dit que l'attribut Formula ne prenait que les noms anglais, j'avais suivi ce que l'on m'avait dit.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 23/10/2008, 13h58
  2. isnumeric
    Par philippe123 dans le forum ASP
    Réponses: 6
    Dernier message: 22/08/2005, 13h59
  3. Equivalent IsNumeric
    Par Off$ide dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 16/02/2005, 18h07
  4. [VB.NET]Fonction IsNumeric -bug- Windows Server 2003
    Par Seb.M dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/12/2004, 17h30
  5. [C#] Equivalent de IsNumeric
    Par yannick dans le forum C#
    Réponses: 12
    Dernier message: 20/05/2004, 14h26

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