Convertir sql en vba

Résolu
begounou Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   -  
begounou Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   -
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, qu'as-tu essayé? que veux-tu obtenir, dans quel contexte?
0
Begounou
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Begounou
 
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   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > begounou Messages postés 42 Date d'inscription   Statut Membre Dernière intervention  
 
IUTS est-il un champ d'une table?
0
Begounou
 
Oui c'est un champs de la table paie
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > begounou Messages postés 42 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > begounou Messages postés 42 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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