Fonction IIF dans Access 2003

mooma
1 contribution
Membre depuis le 04/02/2024
Envoyé le 04/02/2024 à 16:27


Bonjour,

Comment calculer les tableaux ci-joints avec la fonction IIF dans une requête Access 2003 ?

Cordialement.





Répondre à ce message

Bipbipcoyote Bipbipcoyote
4 287 contributions
Membre depuis le 06/03/2001
Envoyé le 04/02/2024 à 18:59 Modifié par Bipbipcoyote


Bonjour,
Dans Access on ne doit pas faire de redondance,
la solution que je propose c'est de tout mettre dans une seule table avec les champs suivants
DE A Tranche A Tranche B Tranche C
et ensuite il suffit de créer les différentes requêtes (3 Vues où l'on ne place qu'un seul champ Tranche ...) ensuite un formulaire principal avec une liste déroulante qui va ouvrir l'une des vues suivant la donnée sélectionnée
un peu de code, un peu de macro pour afficher ou masquer les différends formulaires
Télécharger cette solution - fichier zip

2ème solution
Comme ici il n'y a pas beaucoup de lignes, tu pourrais regrouper toutes tes lignes dans une table, avec un champ supplémentaire que tu nommes "Tranche" et dans lequel tu entres la valeur A, B ou C et de ce fait, tu peux alors filtrer les enregistrements avec la liste déroulante (utilise l'assistant quand tu crées la liste déroulante) Tu n'as alors qu'une seule requête et un seul formulaire mais on peut alors reprocher que l'on a 3 fois les mêmes lignes, la seule différence est le champ Tranche, mais les puristes vont hurler car si le nombre de lignes étaient plus importants ce serait vite ingérable...

3ème solution
ce serait avec un champ indépendant pour y afficher le % et une liste déroulante pour choisir la Tranche et avec un peu de code VBA, tester les valeurs De ou A et la tranche choisie, afficher le % correspondant

Je te conseille de parcourir la page suivante et les liens qui y sont regroupés pour améliorer tes connaissances

Si tu as des calculs à faire, tu dois les faire dans des champs indépendants dans les requêtes, c'est là que tu dois y mettre tes formules, mais ici tu utilises une plage de valeurs, on ne peut pas calculer, car par exemple 7% de 2500000 ne donne pas le même résultat que 7% de 3000000...
Donc il faut utiliser un champ indépendant dans un formulaire pour y entrer une somme d'argent, y sélectionner le % et provoquer le calcul
D'ailleurs tes tableaux en Excel tels qu'ils se présentent là ne peuvent pas être calculés, tu dois avec une case dans laquelle tu entres une somme et dans une autre la tranche et faire une recherche verticale pour vérifier si ta somme est incluse entre les bornes de De et de A
un peu comme ici

Access est un gestionnaire de base de données, ce n'est pas un tableur
Donc en principe, contrairement à ce que l'on voit à l'écran, Access ne travaille que sur un SEUL enregistrement à la fois, pour se référer à d'autres enregistrements pour faire des calculs, il faut jouer avec de la programmation comme ici ou utiliser des formules qui concerne un domaine
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Bipbipcoyote Bipbipcoyote
4 287 contributions
Membre depuis le 06/03/2001
Envoyé le 05/02/2024 à 13:38


Bonjour,
Nouvelle version de la base de données j'ai ajouté des contrôles indépendants sur les formulaires, et des macros pour faire le calcul, ce qui donne par exemple pour le Tableau A
Option Compare Database

Private Sub Calculer_Click()

Dim vSomme As Double
'ici on teste s'il y a quelque chose dans le contrôle indépendant nommé Somme
If IsNull(Me.Somme) Then
MsgBox "Entrez une somme !", vbOKOnly
Exit Sub
End If
'ici on teste si Somme ne dépasse pas un certain montant
If Me.Somme > 1000000000 Then
MsgBox "La somme est trop grande"
Exit Sub
End If

'ici on récupère la somme que l'utilisateur entre dans le contrôle indépendant
vSomme = Me.Somme

'on initialise le recordset en mémoire.
'un recordset est une copie d'une table ou d'une requête dans la mémoire de l'ordi
Dim db As DAO.Database, rs1 As DAO.Recordset
Dim strSQL1 As String
Set db = CurrentDb
strSQL1 = "SELECT * FROM Table1"
Set rs1 = db.OpenRecordset(strSQL1)
Dim vDebut As Double
Dim vFin As Double
'on va parcourir le recordset pour vérifier si la Somme est comprise entre les limites fixées dans les champs De et A
'on se positionne sur le premier enregistrement
rs1.MoveFirst
'on boucle
Do
'on récupère à chaque boucle les valeurs des champs
vDebut = rs1("De")
vFin = rs1("A")
'Si on est entre les valeurs, on récupère le % et on calcule la somme dûe
If vSomme > vDebut And vSomme < vFin Then
Me.Taux = rs1("Tranche A")
Me.MontantDu = vSomme + (vSomme * rs1("Tranche A") / 100)
End If
'on passe à l'enregistrement suivant
rs1.MoveNext
'on boucle jusqu'à la fin du recordset
Loop Until rs1.EOF = True


End Sub

Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions

Participer à cette discussion

« Retour sur la liste des messages de ce forum