Convertir sql en vba

Résolu/Fermé
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020 - 6 oct. 2019 à 19:27
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020 - 14 oct. 2019 à 12:33
Bonjour,

après mainte tentative sans succès à vouloir convertir cette instruction sql en vba qui m'a d'ailleurs été fourni sur ce forum , j'ai décidé de le poster en espérant trouver la solution

SELECT Sum([taux]*(IIf([salaire]>[fin_tranche],[fin_tranche],[salaire])-[debut_tranche])) AS IUTS
FROM taux_impot
WHERE (((taux_impot.salaire)>=[debut_tranche]));


Configuration: Windows / Chrome 77.0.3865.90

2 réponses

yg_be Messages postés 22905 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juin 2024 1 480
6 oct. 2019 à 23:32
bonjour, qu'as-tu essayé? que veux-tu obtenir, dans quel contexte?
0
je fait appel à cette requête depuis mon formulaire paie par la fonction RechDom. ensuite transportée dans mon champs IUTS à l'aide d'une requête Ajout collée à un bouton de mon formulaire. je trouve le mécanisme trop long et j'aimerais le convertir en VBA pour l'accroché directement à mon champs IUTS à partir de mon formulaire
0
yg_be Messages postés 22905 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juin 2024 1 480 > Begounou
Modifié le 7 oct. 2019 à 14:55
IUTS est un champ d'une table? il est en général recommandé de ne pas enregistrer de champ calculé dans les tables.
quand le code VBA sera-t'il exécuté? via un bouton? automatiquement?
exemple de code:
Dim rstaux As DAO.Recordset, sql As String, rsiuts As Recordset, iuts As Single

sql = "SELECT Sum([taux]*(IIf( " + CStr(Me.salaire) + " >[fin_tranche],[fin_tranche],[salaire])-[debut_tranche])) AS IUTS " _
    + " FROM taux_impot " _
    + " WHERE (( " + CStr(Me.salaire) + " >=[debut_tranche]))"
Set rstaux = CurrentDb.OpenRecordset(sql)
iuts = rstaux!iuts
Set rsiuts = CurrentDb.OpenRecordset("nom de la table iuts", dbOpenDynaset)
rsiuts.AddNew
rsiuts!iuts = iuts
rsiuts!salaire = Me.salaire
rsiuts.Update
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
7 oct. 2019 à 15:43
IUTS n'est pas calculé dans le champs mais je le récupère pour la suite de mes requêtes. quant au code VBA, j'aimerai que sa soit automatique via les procédures événementielles.
0
yg_be Messages postés 22905 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juin 2024 1 480 > begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
7 oct. 2019 à 16:08
IUTS est-il un champ d'une table?
0
Oui c'est un champs de la table paie
0
yg_be Messages postés 22905 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juin 2024 1 480
8 oct. 2019 à 14:31
peux-tu utiliser les balises de code quand tu postes du code?
peux-tu indiquer à quelle ligne se produit l'erreur?
peux-tu examiner ce que contient la variable sql et la tester comme source d'une requête?
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
8 oct. 2019 à 15:35
Private Sub Bn_Calculer_Click()
Dim rstaux As DAO.Recordset, sql As String, rsiuts As Recordset, IUTS As Single

sql = "SELECT Sum([taux]*(IIf( " + CStr(Me.RNI) + " >[fin_tranche],[fin_tranche],[RNI])-[debut_tranche])) AS IUTS " _
+ " FROM taux_impot " _
+ " WHERE (( " + CStr(Me.RNI) + " >=[debut_tranche]))"
Set rstaux = CurrentDb.OpenRecordset(sql)
IUTS = rstaux!IUTS
Set rsiuts = CurrentDb.OpenRecordset("t_Paie", dbOpenDynaset)
rsiuts.AddNew
rsiuts!IUTS = IUTS
rsiuts!RNI = Me.RNI
rsiuts.Update
End Sub
0
yg_be Messages postés 22905 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juin 2024 1 480 > begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
8 oct. 2019 à 17:34
peux-tu utiliser le type de code "basic" avec les balises de code quand tu postes du code VBA?
peux-tu examiner ce que contient la variable sql et la tester comme source d'une requête?
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
10 oct. 2019 à 21:36
Bonjour yg_be a vrai dire ce que j'ai renoncé à l'idée d'enregistrer IUTS dans ma table paie après avoir compris son inconvenient dans mes recherches sur internet. alors depuis j'ai écarté la table taux_impôt en l'insérant tranche par tranche dans ma table paie exemple:
debut_tranche1, fin_tranche1, taux_tranche1
ainsi de suite jusqu'au tranche8 qui est la fin des tranches.
dans ma requête qui sert d'historique, je calcul l'iuts de chaque tranche comme cela : ([taux_tranche1]*(vrai/faux([rni]>[fin_tranche1],[fin_tranche1],[rni])-[debut_tranche1])) bien sûr en condition que [rni] soit >= à [début_tranche1] tout marche, jusqu'à ce que je constate qu'au niveau des tranche supérieures à [RNI] les champs calculs m'affiche des chiffres negatifs. ma question est il possible de faire la somme des IUTS uniquement pour la tranche concernée ?
0
yg_be Messages postés 22905 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juin 2024 1 480 > begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
11 oct. 2019 à 00:54
peut-être ainsi:
[taux_tranche1]*(vrai/faux([rni]<[debut_tranche1],0,vrai/faux([rni]>[fin_tranche1],[fin_tranche1],[rni]))-[debut_tranche1])
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
11 oct. 2019 à 13:30
je ne sais pas ce qui n'a pas marché mais ce message d'erreur s'affiche : l'expression comporte un point, un point d'exclamation ou des parenthèses non valide. j'ai essayer de voir où sa bloc mais en vain
0