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 :

Un point d’arrêt sur la fonction WorksheetFunction.RoundDown() ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2012
    Messages : 49
    Par défaut Un point d’arrêt sur la fonction WorksheetFunction.RoundDown() ?
    Bonjour,
    La fonction
    WorksheetFunction.RoundDown(Number,n)
    telle q'elle est définie en VB arrondit un nombre à la valeur d'arrondi la plus proche de zéro. La valeur renvoyée est double. Les arguments Number et n sont de type double comme déclaré dans la définition.
    Testant cette fonction en créant la fonction personnalisée suivante sous EXCEL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function App(x As Double) As Double
    App = WorksheetFunction.RoundDown(x, 14)
    End Function
    donnant à x la valeur 12.85 Résultat App=12.85 OK
    Maintenant changeant le type de la variable x du Double au Single comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function App(x As Single) As Double
    App = WorksheetFunction.RoundDown(x, 14)
    End Function
    Normalement App="Valeur!" du moment où le type de la variable x ne convient pas à la définition de la fonction en question.
    donnant à x la valeur 12.85 Résultat App=12.5799999237061???!!!
    Ensuite, déclarant le résultat de App() en Single comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function App(x As Single) As Single
    App = WorksheetFunction.RoundDown(x, 14)
    End Function
    Pour x = 12.85 App = 12.57999992370600 ???!!!
    Il en est de même pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function App(x As Double) As Single
    App = WorksheetFunction.RoundDown(x, 14)
    End Function
    Alors, qu'est ce que vous en pensez ?
    Cordialement

  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
    Bonsoir

    3 sujets pour une même approche: Comprendre la représentation informatique des nombres à virgule flottante qu'ils soient en simple ou en double précision.

    Les variables de type Double (à virgule flottante en double précision) sont stockées sous la forme de nombres à virgule flottante de 64 bits (8 octets) IEEE

    Les variables de type Single (à virgule flottante en simple précision) sont stockées sous la forme de nombres à virgule flottante de 32 bits (4 octets) IEEE
    Encore un lien http://support.microsoft.com/kb/125056/fr

    Ensuite un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
    Dim D As Double
    Dim S As Single
     
    S = 36.1
    MsgBox "Single: " & S
    D = S
    MsgBox "Double: " & D
    End Sub

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2012
    Messages : 49
    Par défaut
    Bonjour,
    Effectivement, autre remarque au sujet de :
    WorksheetFunction.RoundDown(Arg1, Arg2)
    Arg2 en principe devrait être du type Integer du moment où il précise le Nb de chiffre après la virgule pour lequel l'Arg1 doit être arrondi.
    La définition de la fonction en VB lui attribue le type Double ??????!!!!!

Discussions similaires

  1. [XL-2010] Touche F1 ne pointe plus directement sur la fonction ou la formule
    Par Denis_67 dans le forum Excel
    Réponses: 3
    Dernier message: 13/05/2015, 19h00
  2. Réponses: 1
    Dernier message: 21/07/2009, 11h51
  3. doc sur les fonctions
    Par masterfab dans le forum C
    Réponses: 18
    Dernier message: 23/06/2005, 17h55
  4. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00
  5. PerlDoc sur une fonction d'un module
    Par lesouriciergris dans le forum Modules
    Réponses: 2
    Dernier message: 13/03/2003, 20h50

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