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

  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

  8. #8
    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
    oula effectivement pgz, j'avais regardé seulement les tranches pas la partie calcul.

    ta solus est pas mal encore que je pense qu'il serait préférable de mettre dans une table pour ainsi pouvoir changer plus facilement les données.

    toutefois je pense que les valeurs sont le produit d'une formule logique je ne pense pas qu'ils s'agissent de valeur aléatoire. il doit être possible de tout mettre ca en une seul ligne.

  9. #9
    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
    Hello Vodiem!

    il doit être possible de tout mettre ca en une seul ligne.
    Tu m'intéresses.

    Tu montres comment tu fais?

    Sinon effectivement Reports se calcule avec Tranches et taux. Mais ces deux erniers sont indépendants.

    A plus,

    PGZ

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Par défaut
    bonjour,

    une erreur avec l'utilisation de <case Is>... voir aide d'Access
    Mettre plutot case XX to YY

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Case Is <= 6000 '3%
    ...
    Case 6001 To 10500 '5%
    ...
    cordialement,

    Philippe

  11. #11
    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

    J'ai utilisé ton code avec les tableaux, ça marche à merveille mais maintenant le formulaire ne s'arrete pas au dernier enregistrement.

    Y a-t-il un probleme dans ce code.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Function ParcourirFormulaire(s As String)
     On Error GoTo erreur
     DoCmd.OpenForm s          'ouverture du formulaire
     Do
      DoCmd.GoToRecord acDataForm, s, acNext            'enregistrement suivant
       Loop
     Exit Function
    erreur:
     If Err = 2105 Then DoCmd.Close acForm, s   'fermeture sur erreur
    End Function

    dans mon formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub BtnLancer_Click()
    ParcourirFormulaire ("MonFrm")
    End Sub
    Merci de regarder.

  12. #12
    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
    pgz

    J'ai du modifier cette ligne pour que conformer à la logique de calcul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Calcul_test = ((Me.TAXABLE - Tranches(i - 1)) * Taux(i - 1)) + Reports(i - 1)

  13. #13
    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
    mais maintenant le formulaire ne s'arrete pas au dernier enregistrement.
    Il s'arrêtait avant?

    Je te conseillerait de faire plutôt ainsi :
    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
    Public sub ParcourirFormulaire(s As String)
    Dim rst as DAO.RecordSet, frm as form
     
    DoCmd.OpenForm s          'ouverture du formulaire
    set frm = Forms(s)
    set rst = frm.RecordsetClone
     
    rst.Movefirst
     
    while not rst.EOF
        frm.Bookmark = rst.Bookmark
        rst.MoveNext
    Wend
     
    end sub
    et donc bien sûr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub BtnLancer_Click()
    Call ParcourirFormulaire ("MonFrm")
    End Sub
    PGZ

  14. #14
    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
    PGZ> Hello!
    Tu montres comment tu fais?
    je disais:
    je pense que les valeurs sont le produit d'une formule logique je ne pense pas qu'ils s'agissent de valeur aléatoire.
    si tu regarde un peu de plus près: les valeurs suivent une belle courbe logique autant pour les tranches que pour les reports.
    soit: champ=f(x) on retrouve x=f-1(x) en prenant sont entier x0=ent(x), on obtient la valeur de base pour le calcul:
    g(x)=(f(x)-f(x0))*p(x0)+h(x0)
    g(x):résultat
    p(x):pourcentage en fonction de x
    h(x):report en fonction de x
    x0: ent(f-1(x))

    si lucienkany applique une certaine logique on pourrait avoir ces fonctions et obtenir le résultat en une seul ligne.

    toutefois sans vouloir faire cela tu as une autre solution pour obtenir cela en une seule ligne avec la fonction VraiFaux (je suppose que tu connais donc je t'apprendrais rien):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    =VraiFaux((X>=0) AND (X<=6000); Me.CHAMPSTEST.Value * 0.03;
     VraiFaux((X>6000) AND (X<=10500); Me.CHAMPSTEST.Value - 6001) * 0.05) + 180;
     VraiFaux((X>10500) AND (X<=10500); Me.CHAMPSTEST .Value - 10501) * 0.1) + 404.35;
    ....)))))
    ca c'est pour le fun, histoire de dire que c'est fait sur une ligne ... parceque pour la maj de nouvelles valeurs...
    mais c'est mieux que de parcourir tous les enregistrements

    sinon si cela vous interesse random avait posté dans une discution ici
    en date du 05/04/2007, 09h32
    une solution pour établir des tranches aléatoires
    en s'inspirant de cette logique il est possible d'obtenir une fonction qui donne le calcul par requete.
    encore que... je dirais plus: il est possible d'obtenir le calcul uniquement par requete.
    et ainsi disposer uniquement d'une table pour les valeurs.

    mais bon sont prob est visiblement résolu bien que je ne pense pas que cela soit la meilleur facon de procéder.

  15. #15
    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
    Hello Vodiem.

    J'ai l'impression qu'on envahit un peu la discussion de Lucien!
    J'ai compris maintenant ce que tu voulais dire. Mais si on y va par là, je préfèrerais encore faire autrement :
    - soit n'enregistrer que les valeurs "champtest", et calculer résultat qd j'en ai besoin,
    - soit calculer et enregistrer chaque résultat à la saisie de chaque valeur de "champtest",
    suivant le contexte de l'application. Et faire bien sûr la fonction de calcul avec passage du paramètre en valeur.

    Bon dimanche,

    PGZ

  16. #16
    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
    Hello pgz, lucienkany (et les autres qui nous lit)
    oui mais c'est pas incompatible avec le fait de faire en requete:
    - soit n'enregistrer que les valeurs "champtest", et calculer résultat qd j'en ai besoin
    un champ calcul dans une requete, pas de stockage et le calcul se fait qd t'as besoin.
    - soit calculer et enregistrer chaque résultat à la saisie de chaque valeur de "champtest"
    stoker le champ calcul de la requete par une requete "INSERT INTO" après saisie.

    entre nous, faire une boucle sur l'ensemble des enregistrements à l'ouverture du form c'est le boulot d'une requete

    en clair pour toutes les manipulations des données je privilégie le SQL si vraiment je ne peux pas alors DAO
    et je réserve le codage pour de chose plus épineux.

    Bon dimanche à vous aussi.

  17. #17
    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
    Bonjour,

    Après tout ce que je viens de découvrir, je suis poussé à ne plus me retenir de poser cette question.

    Et si j'enregistre les taux et reports dans une table?

    Comment sera le code?

    Merci de m'éclairer

  18. #18
    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
    vodiem;
    Je n'ai pas vu ton post avant de poster (j'ai laissé la page ouverte pendant des heures, désolé)

    faire une boucle sur l'ensemble des enregistrements à l'ouverture du form c'est le boulot d'une requete
    En effet, c'est la solution que j'utilise mais ce cas était difficile pour moi;

    Je m'explique:

    Je travaille sur une base de données de calcul de la paie, dans laquelle je calcule aussi les provisions congés et les préavis, dans les trois cas une taxe(champstest) est prélevée et vous avez vu les taux par tranches et les reports(je n'en ai pas parlé au début mais tu l'as découvert c'est ça qui me plait sur ce forum)

    J'ai donc procédé comme suit (vu mon niveau en VBA)

    J'ai crée une requête selection pour chaque tranche et chaque cas
    11 pour la paie mensuelle
    11 pour les congés
    11 pour les préavis
    Puis j'ai crée une requête action pour chaque tranche et chaque cas qui ajoute les données de chaque cas dans une table.

    ce qui fait au total 66 requêtes.

    Et lorsque je modifie quelque chose, je suis obligé de passer sur au moins 11 requêtes.

    Si quelqu'un peut m'aider à écrire une seule requête par cas!

    Merci encore pour votre aide

  19. #19
    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
    effectivement c'est pas l'idéale, en général tant que ca marche je dirais faut pas trop se prendre la tête.

    mais si tu veux vraiment tout chanbouler:
    il te faut :
    .une requete avec un champ supplémentaire:tranche (c'est là que réside le pb: soit par fonction soit par vraifaux soit par une autre requete)
    .une autre requete qui reprend la requete précédente et qui va lier tranche avec la table contenant les taux,... par tranches. un champ supplémentaire calcul contenant la formule.

    c'est pas si compliqué que ca en a l'air si tu n'arrives pas mets nous les noms des tables, le nom de leur champ.

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