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 :

Calcul de % avec VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant
    Inscrit en
    Juin 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2019
    Messages : 39
    Par défaut Calcul de % avec VBA
    Bonjour,

    J'ai créé un code pour calculer le pourcentage d'une taxe sur un montant et le total de cette opération.

    Tout va bien, mais je viens de me rendre compte qu'à partir de 1 000 le code ne me donne pas les bon chiffre (ex : 5% de 50 000 done 2,5).

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'Calcul de la TPS
    Private Sub tpspourc_AfterUpdate()
    If Me.tpspourc <= 99 Then
        Me.tpspourc.Value = "0." & Format(Me.tpspourc.Value, "####00") & "%"
        Me.tps = Val(Me.montant) * Val(Left(Me.tpspourc, Len(Me.tpspourc) - 1))
        Me.tps.Value = Format(Me.tps, "currency")
        Else
        MsgBox ("Vous avez entré le mauvais format de % !")
        tpspourc = ""
        End If
    End Sub
    Quelqu'un voit le bug?

    Merci

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Essaye de remplacer tes Val() par des CDbl().

    Me.tpspourc.Value = "0." & Format(Me.tpspourc.Value, "####00") & "%"
    Cette ligne me semble très suspecte.
    Perso, j'aurais plutôt écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.tpspourc.Value = Format(CDbl(Me.tpspourc.Value)/100, "#0.0000%")

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Les Me. ne servent qu'à alourdir le code. Perso, je les supprimerais.

    Pour le calcul, je procéderais en calculant d'abord le montant ttc, puis en transformant l'affichage du taux de taxe. Note cependant que ton affichage est assez spécial puisque 20% devient 0.20% (soit c'est 20%, soit c'est 0.20)...


    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub tpspourc_AfterUpdate()
    If tpspourc.Value <= 99 Then
        tps.Value = tps * (1 + (tpspourc / 100))
        tpspourc.Value = tpspourc.Value / 100 & "%"
        tps.Value = Format(tps, "currency")
        Else
        MsgBox ("Vous avez entré le mauvais format de % !")
        tpspourc = ""
        End If
    End Sub


    Perso, dans ce genre de situation, je n'hésite pas à passer par des variables pour réaliser les calculs. Ca n'alourdit pas, ça clarifie, ça permet de tester en mode pas à pas...
    Sur le plan ergonomique, j'émets de gros doutes sur la solution proposée: faire saisir des données puis les modifier dans les mêmes contrôles, c'est surprenant pour l'utilisateur, à mon avis, surtout sur un AfterUpdate... Je ne vois par exemple pas d'intérêt à modifier l'affichage du taux de la taxe. Il suffit de l'aligner à droite et de mettre un % en label juste contre. Ca évite l'ambiguïté de l'affichage tel que tu le proposes.

    Je rappelle également qui, pour suivre une bonne architecture, on ne devrait pas implémenter de l'applicatif dans une procédure événementielle, et que le calcul devrait être déporté vers une fonction qui ne fait que cela, idéalement hors du userform. Le fait de coder tout dans l'événement ne peut, à terme, que créer du code en doublon. Normalement, on sait, avant de créer le userform, que l'on va devoir effectuer le calcul et on crée directement la fonction paramétrée qui réalise cela, fonction que l'on appelle du userform.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [XL-2010] Calcul conditionnel avec VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 06/10/2017, 18h28
  2. [XL-2010] Calcul avec vba excel
    Par jean1vba2013 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/04/2013, 14h48
  3. [AC-2007] Calculer automatiquement avec un code VBA
    Par yankd dans le forum VBA Access
    Réponses: 3
    Dernier message: 17/09/2012, 09h23
  4. [XL-2010] Calcul de la valeur actuelle avec vba
    Par ETOUKE dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/10/2011, 18h26
  5. [XL-2003] Formule de calcul avec VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/06/2009, 13h23

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