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

Access Discussion :

[Débutant] Création d'une formule de calcule avec condition


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 12
    Points
    12
    Par défaut [Débutant] Création d'une formule de calcule avec condition
    Bonjour a tous,
    Voila je viens de decouvrir Access et je dois effectuer une base de donnée sur des employés et leur salaire.

    Voila mes 2 tables principales:

    Personnel:
    Nom_pers (clé primaire) (le nom de l'employé)
    Société


    Salaire
    Nom_pers (clé primaire en relation 1-1 avec Personnel)
    Salaire brut mens
    %aug_Individuel (augmentation de salaire ex: 0.05 (pour 5%))
    Mois aug Indivi (mois durant lequela lieu l'augmentation)
    %aug_Infla (augmentation de salaire due a l inflation identique a tous les employés)
    Mois aug Infla (Le mois de l augmentation identique a tous les employés)
    Salaire tot (Le salaire totale avec les augmentations que je cherche a calculer)
    ….


    Etant donné que %aug_Infla et Mois aug Infla sont identiques a tous les employés je ne sais pas s’il y a moyen de les déclarer en temps que variable « global » car elles doivent pouvoir être mise a jour par l’utilisateur. (Si vous avez des suggestions a ce sujet, j’ai pensé a créer une table contenant uniquement ces 2 variables mais je n’ai pas réussi à la relier à la table Salaire)

    Le réel problème que j'ai donc est de calculer le salaire brut annuel d'un employé. vu que les mois des 2 augmentation (inflation et individuel) sont différents ( >, <, ou = ), je ne vois pas comment le faire a part en incluant des Conditionnel (IF).

    En gros la formule/requete que je veux faire ressemble a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    =IF ( [Mois aug_Indivi] > [Mois aug Infla] ) THEN
    salaire tot =( [Salaire brut mens] * [Mois aug Infla] )+(( [Salaire brut mens] *(1+  [%aug_Infla] ))*( [Mois aug_Indivi] - [Mois aug Infla] ))+((( [Salaire brut mens] *(1+[%aug_Infla] ))*(1+ [%aug_Individuel] ))*(13- [Mois aug_Indivi] ))
     
    ELSEIF  ( [Mois aug_Indivi] < [Mois aug Infla] )) THEN 
    Salaire tot = ( [Salaire brut mens] * [Mois aug_Indivi] )+(( [Salaire brut mens] *(1+[%aug_Individuel]  ))*( [Mois aug Infla] - [Mois aug_Indivi] ))+((( [Salaire brut mens] *(1+ +[%aug_Individuel] ))*(1+ [%aug Infla] ))*(13- [Mois augInfla] ))
     
    ELSIF (( [Mois aug_Indivi] = [Mois aug Infla] )) THEN 
    Salaire tot = ( [Salaire brut mens] * [Mois aug_Indivi] )+(( [Salaire brut mens] *(1+[%aug_Individuel]+[%aug_Infla])*(13 - Mois aug_Indivi))

    J’ai essayé avec des requêtes, mais ce fut sans résultat. Je viens aussi d’essayer en VB mais ne connaissant pas ce langage j’avoue que j’y vais a tâtons malgré les excellent tutoriels présent sur le site.
    (Voila ce que j'ai essayé de faire en VB dans mon fomulaire salaire qui affiche toute la table Salaire)

    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
     
    Private Sub FormuleFinale_LostFocus()
    SQL = "SELECT [salaire tot] as tot FROM SALAIRE WHERE (((Nom_pers)='" & Me.Nom_pers & "'));"
    Set Rcd = CurrentDb.OpenRecordset(SQL)
     
    If (Me.Mois_aug_Indivi > Me.Mois_aug_Infla) Then
    Me.FormuleFinale = ([Salaire brut mens] * [Mois aug Infla]) + (([Salaire brut mens] * (1 + [%aug_Infla])) * ([Mois aug Indivi] - [Mois aug Infla])) + ((([Salaire brut mens] * (1 + [%aug_Infla])) * (1 + [%aug_Individuel])) * (13 - [Mois aug Indivi]))
    End If
     
    If (Me.Mois_aug_Indivi < Me.Mois_aug_Infla) Then
    Me.FormuleFinale = ([Salaire brut mens] * [Mois aug Indivi]) + (([Salaire brut mens] * (1 + [%aug_Individuel])) * ([Mois aug Infla] - [Mois aug Indivi])) + ((([Salaire brut mens] * (1 + [%aug_Individuel])) * (1 + [%aug_Infla])) * (13 - [Mois aug Infla]))
    End If
     
    If (Me.Mois_aug_Indivi = Me.Mois_aug_Infla) Then
    Me.FormuleFinale = ([Salaire brut mens] * [Mois aug Indivi]) + (([Salaire brut mens] * (1 + [%aug_Individuel] + [%aug_Infla])) * (13 - [Mois aug Indivi]))
    End If
     
    Rcd.Close
     
    End Sub

    Bon je viens de réussir a effectuer la somme, je voudrais juste savoir s'il n'y a pas un moyen autre que LostFocus() pour que la somme se fasse automatiquement a chaque "repaint()" (JAVA quand tu nous tiens )

    Je vous remercie.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 346
    Points : 23 809
    Points
    23 809
    Par défaut
    Salut et bienvenu dans le monde merveilleux d'Access.

    Quelques remarques de conception :
    ========================

    1) Le nom d'une personne est une trés mauvaise clef primaire car plusieurs personnes différentes peuvent avoir les mêmes noms et prénoms. La solution est d'attribuer un numéro de personne (pas son num de sécu !) et de l'utiliser comme identifiant.

    2) Généralement, pour les systèmes de paye on crée 1 enr par période de paye (en France au mois). Cela simplifie grandement les problèmes et permet de conserver un historique des salaires versés pour les cumuls annuels.

    Donc on fait une liaison 1-n entre personne et paie.

    3) Par précaution il est recommandé d'éviter les caractères comme % ou les lettres accentués dans les noms de champ.

    4) Pour ton taux d'inflation, il faut clairement faire une table accessible à l'utilisateur. Je te suggère les champs suivant dans ta table :

    Année (éventuellement mois et jours)
    Taux

    Pas d'idée pour ton LostFocus et généralement c'est Access qui gère le Repaint donc on a pas vraiment de soucis. L'événement le plus logique serait Current (Sur activation) mais cela dépend de ton appli.

    Une remarque d'ordre générale :
    =====================
    Il existe d'excélents logiciels de paye sur le marché qui vont te sauver ENORMEMENTS de tracas :-) et à part si c'est pour un exercice, c'est ma solution recommandée.

    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse je vais remanier la conception de la base et voir pour la table paie .

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

Discussions similaires

  1. [XL-2010] Insérer une formule de calcul avec une boucle
    Par jessylfoh dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/09/2014, 20h13
  2. Réponses: 5
    Dernier message: 06/12/2007, 22h16
  3. Mauvais résultat aprés une formule de calcul complexe
    Par poufouille dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 00h12
  4. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28
  5. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58

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