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

VBA Access Discussion :

[VBA] calcul dans un formlaire


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de lucienkany
    Profil pro
    Développeur
    Inscrit en
    Janvier 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2004
    Messages : 257
    Par défaut [VBA] calcul dans un formlaire
    Bonjour,
    Voici mon problème.

    J'ai besoin d'effectuer des calculs à partir d'un formulaire qui parcourt tous les enregistrements d'une table.
    Sur ce formulaire j'ai un champ resultat correspondant à un champs de la table et j'aimerai que chaque fois que le formulaire arrive sur un enrigistrement, le calcul de resultat se fasse et naturellement le champs resultat sera rempli.

    Le resultat est calculé suivant une condition

    Voici le code que j'ai écrit mais je constate que les resultats par tranches ne sont pas exacts. Quelqu'un peut m'aider à améliorer.


    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Private Sub Form_Current()
    Select Case Me.CHAMPSTEST .Value
     
        Case Is <= 6000 '3%
            Me.Resultat.Value = Me.CHAMPSTEST .Value * 0.03
     
        Case Is >= 6001 <= 10500 '5%
     
         Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 6001) * 0.05) + 180
     
        Case Is >= 10501 <= 17400 '10%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 10501) * 0.1) + 404.35
     
        Case Is >= 17401 <= 27500 '15%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 17401) * 0.15) + 1094.85
     
        Case Is >= 27501 <= 41500 '20%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 27501) * 0.2) + 2609.7
     
        Case Is >= 41501 <= 65700 '25%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 41501) * 0.25) + 5409.5
     
        Case Is >= 65701 <= 100000 '30%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 65701) * 0.3) + 11459.25
     
        Case Is >= 100001 <= 140500 '35%
     
             Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 100001) * 0.35) + 21748.95
     
        Case Is >= 100001 <= 140500 '40%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 100001) * 0.4) + 21748.95
     
        Case Is >= 174301 <= 194300 '45%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 174301) * 0.45) + 49443.2
     
        Case Is > 194300 '50%
     
            Me.Resultat.Value = Me.CHAMPSTEST .Value * 0.3
     
    End Select
     
    End Sub
    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    le plus logique serait de faire une requete
    sinon un champ avec des vraifaux qui contiendrait ton calcul
    mais si tu persistes:
    utilise une boucle avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.GoToRecord , , acFirst
    next...
    sur tous le enregistrement sinon:
    j'aimerai que chaque fois que le formulaire arrive sur un enrigistrement
    sur l'événement 'sur activation' du form là c'est carrément:

  3. #3
    Membre éclairé Avatar de lucienkany
    Profil pro
    Développeur
    Inscrit en
    Janvier 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2004
    Messages : 257
    Par défaut
    Citation Envoyé par vodiem
    sur l'événement 'sur activation' du form là c'est carrément:
    Merci vodiem mais je suis désolé de te dire que je n'ai pas bien compris ce que tu a dis.

    Je précise que mon formulaire parcourt bien tous les enregistrements du début à la fin. Mais les résultats des calculs ne sont pas exacts.

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Il y a plusieurs erreurs dans ta procédure, si j'ai compris ce que tu veux faire. Une fois corrigé de ce que j'ai vu cela donne :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Private Sub Form_Current()
    Select Case Me.CHAMPSTEST .Value
     
        Case Is <= 6000 '3%
            Me.Resultat.Value = Me.CHAMPSTEST .Value * 0.03
     
        Case Is >= 6001 <= 10500 '5%
     
         Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 6000) * 0.05) + 180
     
        Case Is >= 10501 <= 17400 '10%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 10500) * 0.1) + 404,95
     
        Case Is >= 17401 <= 27500 '15%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 17400) * 0.15) + 1094.85
     
        Case Is >= 27501 <= 41500 '20%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 27500) * 0.2) + 2609.7
     
        Case Is >= 41501 <= 65700 '25%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 41500) * 0.25) + 5409.5
     
        Case Is >= 65701 <= 100000 '30%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 65700) * 0.3) + 11459.25
     
        Case Is >= 100001 <= 140500 '35%
     
             Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 100000) * 0.35) + 21748.95
     
        Case Is >= 140501 <= 174300 '40%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 140500) * 0.4) + 37498,60
     
        Case Is >= 174301 <= 194300 '45%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 174300) * 0.45) + 49218.2
     
        Case Is > 194300 '50%
     
            Me.Resultat.Value = (Me.CHAMPSTEST .Value - 194300) * 0.5 + 58217,75
     
    End Select
     
    End Sub
    Si ça ne marche toujours pas, c'est que je n'ai pas tout vu...

    PGZ

  5. #5
    Membre éclairé Avatar de lucienkany
    Profil pro
    Développeur
    Inscrit en
    Janvier 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Janvier 2004
    Messages : 257
    Par défaut
    Merci pgz

    Mais peux-tu m'indiquer là où tu as modifié, je n'ai pas trouvé de différence avec mon code.

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub Form_Current()
    Select Case Me.CHAMPSTEST.Value
     
        Case 0 To 6000 '3%
            Me.Resultat.Value = Me.CHAMPSTEST.Value * 0.03
     
        Case 6001 To 10500 '5%
            Me.Resultat.Value = ((Me.CHAMPSTEST.Value - 6001) * 0.05) + 180
     
        Case 10501 To 17400 '10%
            Me.Resultat.Value = ((Me.CHAMPSTEST.Value - 10501) * 0.1) + 404.35
     
        Case 17401 To 27500 '15%
            Me.Resultat.Value = ((Me.CHAMPSTEST.Value - 17401) * 0.15) + 1094.85
     
        Case 27501 To 41500 '20%
            Me.Resultat.Value = ((Me.CHAMPSTEST.Value - 27501) * 0.2) + 2609.7
     
        Case 41501 To 65700 '25%
            Me.Resultat.Value = ((Me.CHAMPSTEST.Value - 41501) * 0.25) + 5409.5
     
        Case 65701 To 100000 '30%
            Me.Resultat.Value = ((Me.CHAMPSTEST.Value - 65701) * 0.3) + 11459.25
     
        Case 100001 To 140500 '35%
             Me.Resultat.Value = ((Me.CHAMPSTEST.Value - 100001) * 0.35) + 21748.95
     
        Case 140501 To 174300 '40%
            Me.Resultat.Value = ((Me.CHAMPSTEST.Value - 140501) * 0.4) + 21748.95
     
        Case 174301 To 194300 '45%
            Me.Resultat.Value = ((Me.CHAMPSTEST.Value - 174301) * 0.45) + 49443.2
     
        Case Is > 194300 '50%
            Me.Resultat.Value = Me.CHAMPSTEST.Value * 0.3
    End Select
     
    End Sub
    j'ai remplacé is.. par des to (je trouve plus simple mais c'est pas forcement utile)
    tu avais une erreur sur le 40% c'était le meme que le 35%
    et plein d'espace entre Me.CHAMPSTEST(espace).Value

    ps:comment as tu déterminer ces tranches et la formule de calcul?

  7. #7
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Voici une copie de ton code avec les erreurs détectées soulignées
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Private Sub Form_Current()
    Select Case Me.CHAMPSTEST .Value
        
        Case Is <= 6000 '3%
            Me.Resultat.Value = Me.CHAMPSTEST .Value * 0.03
        
        Case Is >= 6001 <= 10500 '5%
        
         Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 6001) * 0.05) + 180
        
        Case Is >= 10501 <= 17400 '10%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 10501) * 0.1) + 404.35
        
        Case Is >= 17401 <= 27500 '15%
     
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 17401) * 0.15) + 1094.85
     
        Case Is >= 27501 <= 41500 '20%
        
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 27501) * 0.2) + 2609.7
            
        Case Is >= 41501 <= 65700 '25%
        
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 41501) * 0.25) + 5409.5
        
        Case Is >= 65701 <= 100000 '30%
        
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 65701) * 0.3) + 11459.25
            
        Case Is >= 100001 <= 140500 '35%
            
             Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 100001) * 0.35) + 21748.95
            
        Case Is >= 100001 <= 140500 '40%
        
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 100001) * 0.4) + 21748.95
        
        Case Is >= 174301 <= 194300 '45%
        
            Me.Resultat.Value = ((Me.CHAMPSTEST .Value - 174301) * 0.45) + 49443.2
            
        Case Is > 194300 '50%
        
            Me.Resultat.Value = Me.CHAMPSTEST .Value * 0.3        
    End Select
     
    End Sub
    par ailleurs, je te propose une autre façon de calculer plus complexe mais plus sûre après mise au point
    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
    Private Sub Form_Current()
    Dim Tranches As Variant, Taux As Variant, Reports As Variant
     
    Tranches = Array(0, 6000, 10500, 17400, 27500, 41500, 65700, 100000, 145000, 174300, 194300)
    Taux = Array(0.03, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5)
    Reports = Array(0, 180, 404.95, 1094.85, 2609.7, 5409.5, 11459.25, 21748.95, 37498.6, 49218.2, 58217.75)
     
     
    For i = 1 To UBound(Tranches)
        If Me.ChampTest>= Tranches(i - 1) And Me.ChampTest < Tranches(i) Then Exit For
    Next i
     
    Me.resultat =  (Me.ChampTest- Tranches(i - 1)) * Taux(i - 1) + Reports(i - 1)
     
     
    End Sub
    Bon courage,

    PGZ

Discussions similaires

  1. [Toutes versions] vba calcul dans un tableau
    Par seblenor dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/09/2013, 15h46
  2. [XL-2010] VBA : Calcul dans une colonne mois par mois
    Par Jeanluc17 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/03/2013, 08h46
  3. [VBA] Calcul pour insérer dans une textebox
    Par Yanmeunier dans le forum IHM
    Réponses: 13
    Dernier message: 15/03/2006, 16h38
  4. [VBA-E] Copier une formule de calcul dans toute la ligne
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/12/2005, 18h18
  5. calcul dans un sous formlaire
    Par lemo dans le forum Access
    Réponses: 1
    Dernier message: 04/11/2005, 06h07

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