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 :

Problème type variable [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Par défaut Problème type variable
    Chers tous,

    Un détail m'échappe. Pourquoi lorsque je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim X As Single
    For X = 20 To 40 Step 0.02
        Range("D" & Lig) = X
    Next X
    Les valeurs renvoyées dans les cellules correspondent à : 20.0200004577636 au lieu de 20.02 ?

    Comment faire pour remédier à ce problème ?

    Pour info j'ai une solution qui ne me plaît que moyennement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim X As Integer
    For X = 2000 To 4000 Step 2
        Range("D" & Lig) = X/100
    Next X
    Merci de votre aide, belle soirée à tous

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à toi,

    Utilise un double

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Bonjour, bonjour !

    En passant vite fait, tester aussi le code de cette discussion

    Voilà, voilà !


    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Par défaut
    @cerede2000 merci de ta réponse cependant j'ai le même problème : 22.3599999999999 au lieu de 22.36

    @Marc-L merci de ton aide. Si je comprends bien il n'y a pas grand chose à faire, c'est lié à excel qui arrondi un peu comme il veut. Dès lors ma solution du integer semble la plus raisonnable, non ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si tu veux vraiment passer par du Single ou du Double, tu peux éventuellement effectuer un arrondi ou une troncature pour n'obtenir que 2 digits

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Tu peux même mettre As Long vu que les Integer sont converti en Long par vba
    Sinon tu as Currency qui travaille avec des entiers à virgule fixe (oui, c'est bien ça) qui ne présente pas cet inconvénient. Plus obligé de diviser par 100
    eric

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par Vincent32 Voir le message
    @Marc-L Dès lors ma solution du integer semble la plus raisonnable, non ?
    Non pas du tout car le résultat est faux avec un type entier !

    Comme pourtant démontré dans mon lien puis re-signalé par eriiic, le type de donnée Currency est le plus approprié !
    Et du reste dans l'affichage de mon lien il n'y a pas de signe monétaire :
    veille à être clair comme de l'eau de roche dans tes explications !

    J'en déduis donc la valeur est réaffectée dans une cellule, plusieurs possibilités mais je me limite à deux :

    • Utiliser en interne le type Currency pour les calculs puis
    au moment de l'affectation dans la cellule convertir la valeur via la fonction VBA CDbl

    • Utiliser la fonction de feuille de calculs d'Excel ARRONDI en VBA (Application.Round)
    et non la fonction VBA Round (sauf pour un arrondi à la norme anglo-saxonne) :

    Cells(Lig, 4).Value = Application.Round(X, 2)

    ______________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Par défaut
    Merci pour ces clarifications Marc-L !

    Un petit bémol cependant : je pensais être clair dans mes explications et je regrette que tu n'es pas compris que la valeur était ensuite écrite dans une cellule. En effet le bout de code donné me semblait limpide :
    Range("D" & Lig) = X
    Concernant l'utilisation du type currency il s'agit de l'option que j'ai retenu et pour pallier à l'unité j'ai utilisé le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cell_2).NumberFormat = "0.00"
    cependant je pense que la solution que tu me proposes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Round(X, 2)
    semble beaucoup plus rigoureuse aussi je te remercie énormément de cette proposition.

    Je te souhaite une belle journée

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

Discussions similaires

  1. [AC-2007] Problème type de variable
    Par ometsoc dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/03/2013, 14h14
  2. Problème de classes, types, variables
    Par Invité dans le forum Langage
    Réponses: 8
    Dernier message: 17/08/2012, 14h13
  3. Réponses: 11
    Dernier message: 04/07/2009, 09h59
  4. Réponses: 4
    Dernier message: 08/10/2007, 11h27
  5. Réponses: 2
    Dernier message: 10/12/2006, 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