Calcul Tva

Résolu
surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   -  
surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai fait un userform pour me calculer la tva et je n'arrive pas a effectuer certains calculs comme il faut et leur format .
je voudrais que la somme s'arrete a 2 chiffres apres la virgule et arrondir au plus pres
je vous mets mon fichier joint
https://www.cjoint.com/?BLvnVzik4NW
merci de votre aide
a bientot

4 réponses

  1. Heliotte Messages postés 1561 Statut Membre 92
     
    Bonjour surplus,

    Je regarde à ton fichier .. peux-tu me donner plus de précision ?

    Le format, ça, j'ai compris
    Mais c'est surtout pour les calculs .. quels sont les numéros des TextBox avec lesquels tu as des difficultés ?

    Est-ce que c'est "7%" ou "7.5%" .. car dans l'affichage, j'ai 7% mais dans le code 7.5% !!!
    0
    1. surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   4
       
      bonjour
      excuse c'est vrai c'est 7% le calcul
      en fait c'est celui qui est en commentaire et les additions ne se font pas bien textbox1+textbox2
      l'addition n'est pas correcte
      merci
      0
  2. surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   4
     
    Re
    personne pour dépanner?
    a bientot
    0
  3. Heliotte Messages postés 1561 Statut Membre 92
     
    Bonsoir surplus,

    Tu n'as pas beaucoup de patience à ce que je vois .. alors je te donne le classeur en l'état. Il n'est donc pas terminé ..
    A toi de le finir .. http://cjoint.com/12dc/BLvweEyorm5.htm

    Bonne fête de Noël.
    0
    1. surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   4
       
      bonsoir heliotte,
      j'ai de la patience sans problème si on me dit d'attendre mais la je te pensais déjà en weekend lol
      je voudrais pas te froisser je vais faire avec ce que tu me donnes
      merci
      Bonnes fêtes
      a bientot
      0
  4. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Bonsoir,

    Si tu veux arrondir à 2 décimales, utilises la fonction ROUND(????, 2).
    Ca donnera :
    Private Sub TextBox18_Change()
        ' Frame1 : "Du HT Au TTC", "Montant HT"
        Me.TextBox17.Text = Round(Round(TextBox18.Text, 2) * Prct(TVA1), 2) ' TTC, TVA1
        Me.TextBox6.Text = Round(Round(TextBox17.Text, 2) - Round(TextBox18.Text, 2), 2) ' TVA, TVA1
        Me.TextBox2.Text = Round(Round(TextBox18.Text, 2) * Prct(TVA2), 2) ' TTC, TVA2
        Me.TextBox4.Text = Round(Round(TextBox2.Text, 2) - Round(TextBox18.Text, 2), 2) ' TVA2
        Me.TextBox1.Text = Round(Round(TextBox18.Text, 2) * Prct(TVA3), 2) ' TTC, TVA3
        Me.TextBox5.Text = Round(Round(TextBox1.Text, 2) - Round(TextBox18.Text, 2), 2) ' TVA, TVA3
    End Sub

    et
    Private Sub TextBox25_Change()
        ' Frame2 : "Du TTC Au HT", "Montant TTC"
        Me.TextBox24.Text = Round(Round(TextBox25.Text, 2) / Prct(TVA1), 2) ' HT, TVA1
        Me.TextBox23.Text = Round(Round(TextBox25.Text, 2) - Round(TextBox24.Text, 2), 2) ' TVA, TVA1
        Me.TextBox20.Text = Round(Round(TextBox25.Text, 2) / Prct(TVA2), 2) ' HT, TVA2
        Me.TextBox21.Text = Round(Round(TextBox25.Text, 2) - Round(TextBox20, 2), 2) ' TVA, TVA2
        Me.TextBox19.Text = Round(Round(TextBox25.Text, 2) / Prct(TVA3), 2) ' HT, TVA3
        Me.TextBox22.Text = Round(Round(TextBox25.Text, 2) - Round(TextBox19, 2), 2) ' TVA, TVA3
    End Sub

    Pour l'entrée TVA, il faut savoir que tu peux trouver plusieurs HT qui répondent à la question.
    Tu auras peut-être intérêt à fournir la valeur inférieure et supérieure du HT qui fournit ta TVA.
    En dehors de ça, ta formule n'est pas bonne. Il faut diviser par le taux.
    Dans le code qui suit, j'ai dénaturé tes textboxes TTC pour y mettre le HT mini et j'ai laissé dans HT le HT maxi.
    Fait un essai avec une TVA de 0,20 pour te convaincre des écarts.
    Private Sub TextBox32_Change()
        ' Frame3 : "Da la TVA au HT", "Montant TVA"
        'If ((CDbl(TextBox31.Text) <> 0) And (CDbl(TextBox32.Text) <> 0)) Then
        If (TextBox32.Text <> "" And TextBox32.Text <> ".") Then
            Me.TextBox31.Text = WorksheetFunction.RoundDown((Round(TextBox32.Text, 2) + 0.00499999999999) * 100 / TVA1, 2) ' HT, TVA1
            Me.TextBox27.Text = WorksheetFunction.RoundDown((Round(TextBox32.Text, 2) + 0.00499999999999) * 100 / TVA2, 2) ' HT, TVA2
            Me.TextBox26.Text = WorksheetFunction.RoundDown((Round(TextBox32.Text, 2) + 0.00499999999999) * 100 / TVA3, 2) ' HT, TVA3
            
            Me.TextBox30.Text = WorksheetFunction.RoundUp((Round(TextBox32.Text, 2) - 0.00499999999999) * 100 / TVA1, 2) ' HT, TVA1
            Me.TextBox28.Text = WorksheetFunction.RoundUp((Round(TextBox32.Text, 2) - 0.00499999999999) * 100 / TVA2, 2) ' HT, TVA2
            Me.TextBox29.Text = WorksheetFunction.RoundUp((Round(TextBox32.Text, 2) - 0.00499999999999) * 100 / TVA3, 2) ' HT, TVA3
        End If
        'Me.TextBox30.Text = CDbl(TextBox31.Text) * 5.5 / 100 ' TTC, TVA1
    '    Me.TextBox30.Text = CDbl(TextBox31.Text) * PrctInv(TVA1) ' TTC, TVA1
        'Me.TextBox28.Text = CDbl(TextBox27.Text) + CDbl(TextBox32.Text) ' TTC, TVA2
    '    Me.TextBox28.Text = CDbl(TextBox27.Text) + CDbl(TextBox32.Text) ' TTC, TVA2
        'Me.TextBox29.Text = CDbl(TextBox32.Text) + CDbl(TextBox31.Text) ' TTC, TVA3
    '    Me.TextBox29.Text = CDbl(TextBox32.Text) + CDbl(TextBox31.Text) ' TTC, TVA3
    End Sub

    Pour finir, tu devrais contrôler le nbre de décimales saisies pour n'en accepter que 2.

    Cordialement

    PS : j'ai pris le code d'Heliotte et je n'ai pas vérifié les écarts par rapport à ton code d'origine.
    0
    1. surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   4
       
      bonsoir
      je pensais pas que ce serait si difficile de mettre 18 calculs en place
      le fichier est bon sur les 2 premières frames
      la 3eme frame a des erreurs de calculs sur les valeurs TTC qui devraient être égal a
      montant TVA+ HT
      je vous mets le dernier fichier avec les modifs avec une feuille avec les calculs pour comparer
      https://www.cjoint.com/?BLwcds2e4XW
      autre soucis pour meilleure esthétique si on efface les valeurs entrés dans les cases "montant"
      est il possible de vider les autres listbox car la ça garde les valeurs?
      merci
      a bientôt
      0
    2. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
       
      A fait, pourquoi passes-tu par un formulaire?
      Une simple feuille de calcul ne suffisait pas? Ta feuille 1 est très bien.

      Pour le 3ème frame, c'est normal que je TTC soit faux puisque, comme je l'ai indiqué dans mon message, j'ai utilisé tes textboxes TTC pour y faire apparaître les limites inf et sup du HT calculé à partir de la TVA.

      Si je reprends l'exemple de ta feuille 1, tu as saisi 3,00€ de TVA et tu trouves 42,86€ de HT pour une TVA de 7%.
      Il se trouve que tous les HT de 42,79€ à 42,92€ donnent 3,00€ de TVA à 7%.
      C'est parce que la fonction de calcul de TVA n'est pas injective dans le monde des nombres à 2 décimales..
      Qu'est-ce qui te fait choisir 42,86€ de HT plutôt que 42,83€ ou n'importe quelle valeur parmi les 14 possibles?
      Je comprends bien que 42,86€ de HT se calcule directement et se trouve au milieu de toutes les possibilités mais si tu espères lettrer des listes de HT à partir de montant de TVA, tu risques d'avoir des écarts.

      Ceci dit, si 42,86€ de HT est pour toi le bon résultat, moi ça me va.

      Tu feras attention, dans mon code, j'ai mis le point en séparateur décimal vu que ce sont mes options régionales.

      Pour l'effacement des textboxes lorsque les données sources sont effacées, il suffit de rajouter un Else avec une affectation de la chaîne vide à chaque textbox :
      Private Sub TextBox18_Change()
          ' Frame1 : "Du HT Au TTC", "Montant HT"
          If (TextBox18.Text <> "" And TextBox18.Text <> ".") Then
              Me.TextBox17.Text = Round(Round(TextBox18.Text, 2) * Prct(TVA1), 2) ' TTC, TVA1
              Me.TextBox6.Text = Round(Round(TextBox17.Text, 2) - Round(TextBox18.Text, 2), 2) ' TVA, TVA1
              Me.TextBox2.Text = Round(Round(TextBox18.Text, 2) * Prct(TVA2), 2) ' TTC, TVA2
              Me.TextBox4.Text = Round(Round(TextBox2.Text, 2) - Round(TextBox18.Text, 2), 2) ' TVA2
              Me.TextBox1.Text = Round(Round(TextBox18.Text, 2) * Prct(TVA3), 2) ' TTC, TVA3
              Me.TextBox5.Text = Round(Round(TextBox1.Text, 2) - Round(TextBox18.Text, 2), 2) ' TVA, TVA3
          Else
              Me.TextBox17.Text = "" ' TTC, TVA1
              Me.TextBox6.Text = "" ' TVA, TVA1
              Me.TextBox2.Text = "" ' TTC, TVA2
              Me.TextBox4.Text = "" ' TVA2
              Me.TextBox1.Text = "" ' TTC, TVA3
              Me.TextBox5.Text = "" ' TVA, TVA3
          End If
      End Sub


      ensuite :
      Private Sub TextBox25_Change()
          ' Frame2 : "Du TTC Au HT", "Montant TTC"
          If (TextBox25.Text <> "" And TextBox25.Text <> ".") Then
              Me.TextBox24.Text = Round(Round(TextBox25.Text, 2) / Prct(TVA1), 2) ' HT, TVA1
              Me.TextBox23.Text = Round(Round(TextBox25.Text, 2) - Round(TextBox24.Text, 2), 2) ' TVA, TVA1
              Me.TextBox20.Text = Round(Round(TextBox25.Text, 2) / Prct(TVA2), 2) ' HT, TVA2
              Me.TextBox21.Text = Round(Round(TextBox25.Text, 2) - Round(TextBox20, 2), 2) ' TVA, TVA2
              Me.TextBox19.Text = Round(Round(TextBox25.Text, 2) / Prct(TVA3), 2) ' HT, TVA3
              Me.TextBox22.Text = Round(Round(TextBox25.Text, 2) - Round(TextBox19, 2), 2) ' TVA, TVA3
          Else
              Me.TextBox24.Text = "" ' HT, TVA1
              Me.TextBox23.Text = "" ' TVA, TVA1
              Me.TextBox20.Text = "" ' HT, TVA2
              Me.TextBox21.Text = "" ' TVA, TVA2
              Me.TextBox19.Text = "" ' HT, TVA3
              Me.TextBox22.Text = "" ' TVA, TVA3
          End If
      End Sub


      et enfin :
      Private Sub TextBox32_Change()
          ' Frame3 : "Da la TVA au HT", "Montant TVA"
          'If ((CDbl(TextBox31.Text) <> 0) And (CDbl(TextBox32.Text) <> 0)) Then
          If (TextBox32.Text <> "" And TextBox32.Text <> ".") Then
              Me.TextBox31.Text = WorksheetFunction.RoundDown((Round(TextBox32.Text, 2) + 0.00499999999999) * 100 / TVA1, 2) ' HT, TVA1
              Me.TextBox27.Text = WorksheetFunction.RoundDown((Round(TextBox32.Text, 2) + 0.00499999999999) * 100 / TVA2, 2) ' HT, TVA2
              Me.TextBox26.Text = WorksheetFunction.RoundDown((Round(TextBox32.Text, 2) + 0.00499999999999) * 100 / TVA3, 2) ' HT, TVA3
              
              Me.TextBox30.Text = WorksheetFunction.RoundUp((Round(TextBox32.Text, 2) - 0.00499999999999) * 100 / TVA1, 2) ' HT, TVA1
              Me.TextBox28.Text = WorksheetFunction.RoundUp((Round(TextBox32.Text, 2) - 0.00499999999999) * 100 / TVA2, 2) ' HT, TVA2
              Me.TextBox29.Text = WorksheetFunction.RoundUp((Round(TextBox32.Text, 2) - 0.00499999999999) * 100 / TVA3, 2) ' HT, TVA3
          Else
              Me.TextBox31.Text = "" ' HT, TVA1
              Me.TextBox27.Text = "" ' HT, TVA2
              Me.TextBox26.Text = "" ' HT, TVA3
              
              Me.TextBox30.Text = "" ' HT, TVA1
              Me.TextBox28.Text = "" ' HT, TVA2
              Me.TextBox29.Text = "" ' HT, TVA3
          End If
          'Me.TextBox30.Text = CDbl(TextBox31.Text) * 5.5 / 100 ' TTC, TVA1
      '    Me.TextBox30.Text = CDbl(TextBox31.Text) * PrctInv(TVA1) ' TTC, TVA1
          'Me.TextBox28.Text = CDbl(TextBox27.Text) + CDbl(TextBox32.Text) ' TTC, TVA2
      '    Me.TextBox28.Text = CDbl(TextBox27.Text) + CDbl(TextBox32.Text) ' TTC, TVA2
          'Me.TextBox29.Text = CDbl(TextBox32.Text) + CDbl(TextBox31.Text) ' TTC, TVA3
      '    Me.TextBox29.Text = CDbl(TextBox32.Text) + CDbl(TextBox31.Text) ' TTC, TVA3
      End Sub


      Je te laisse corriger le montant TTC du 3ème frame si mes bornesinf et sup ne t'intéressent pas.

      Cordialement
      0
    3. surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   4
       
      bonsoir
      je passe par un userform car le fichier est pour une amie et si je lui donne une feuille elle va effacer les formules en moins de 2 alors qu'en userform les calculs sont sécurisés
      quand aux calculs de tva je me suis pas vraiment penché 42,88 est un chiffre au hasard
      la 3eme frame je pense pas qu'elle s'en serve beaucoup
      il faudrait faire quoi pour etre au plus juste dans les calculs en fait?
      les points je les laisse ou je dois mettre des "virgules" a la place?
      merci
      a bientot
      0
    4. surplus Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   4
       
      bonjour
      apres essai les totaux TTC du 3eme frame sont faux
      merci de ton aide
      a bientôt
      0
    5. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
       
      Bonsoir,

      1) tu peux utiliser une feuille de calcul avec protection en ne dévérouillant que les 3 cellules de saisie. Ainsi, plus de problème d'effacement des formules. Pour la protection, pas obligé de mettre un mot de passe, tu peux le laisser à vide, ça évite de s'en souvenir.
      Sur ta dernière feuille exemple, c'est déjà le cas. Il ne te reste plus qu'à faire Révision\Protéger la feuille + Valider et le tour est joué.
      Au passage, tu verras que tu passes d'une cellule non verouillée à la suivante par un TAB et à la précédente par un SHIFT+TAB.

      2) maintenant, si je reprends le formulaire, je pense qu'il faut que tu remettes une virgule et que tu modifies la formule du TTC..
      Quand tu dis que tu as testé les totaux TTC et qu'ils sont faux, quelle formule as-tu utilisé?
      Si tu as laissé mes formules, c'est normal que ce soit faux puisque (je te l'ai déjà dit) je ne calcule pas le TTC mais une borne inf du HT.
      Si tu veux ton TTC, tu reprends ta formule de la feuille de calcul : HT+TVA

      3) Pour le calcul du HT à partir soit de la TVA, soit du TTC, tu obtiendras plusieurs valeurs de HT du fait de l'arrondi à la 2ème décimale.
      Il suffit de choisir : soit tu veux un résultat unique fourni par tes formules, soit tu souhaites obtenir un intervalle de résultats possibles dont tu peux afficher les bornes.
      Ce choix dépend des besoins de l'utilisateur.

      Cordialement
      0