Convertir sql en vba

Résolu
begounou Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
begounou Messages postés 32 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

  1. 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?
    0
    1. 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
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > 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
    3. begounou Messages postés 32 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
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > begounou Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
       
      IUTS est-il un champ d'une table?
      0
    5. Begounou
       
      Oui c'est un champs de la table paie
      0
  2. 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?
    0
    1. begounou Messages postés 32 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
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > begounou Messages postés 32 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
    3. begounou Messages postés 32 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
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > begounou Messages postés 32 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
    5. begounou Messages postés 32 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