Convertir sql en vba
Résolubegounou Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
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]));
2 réponses
Il s'agit de convertir une instruction SQL en VBA pour calculer l'IUTS à partir de tranches de taux (fin_tranche, debut_tranche) et sommer uniquement la tranche concernée lorsque le salaire dépasse un seuil. Plusieurs intervenants discutent de l'enregistrement d'un champ calculé, proposent des versions de code VBA mêlant IIf et vérifications sur debut_tranche et fin_tranche, et suggèrent d'éviter l'enregistrement en table Paie. D'autres évoquent des difficultés comme l'erreur '3061' de paramètre insuffisant et proposent des tests du contenu de la variable sql et des ajustements pour éviter des chiffres négatifs. En cas de nécessité, injecter la valeur de RNI directement dans la requête SQL VBA et tester le résultat avant d'alimenter la table Paie est une approche utile.
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, qu'as-tu essayé? que veux-tu obtenir, dans quel contexte?-
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
-
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 -
-
-
-
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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?-
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 -
-
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 ? -
-
-