Transposition code VBA EN SQL

Résolu
castours Messages postés 2955 Date d'inscription   Statut Membre Dernière intervention   -  
castours Messages postés 2955 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je voudrai transposer ces conditions VBA ci-dessous dans une requete SQL
Les champs suivants sont utilisés: CoéfCharge, QuotePart,NbMoiset Franchise.
Le champ CoéfCharge est le champ qui doit recevoir le resultat.
Merci de votre aide

If NbMois > Vetuste Then
CoéfCharge = QuotePart

End If
If NbMois < Franchise Then
CoéfCharge = 100
End If
CoéfCharge = 100 - ((NbMois - Franchise) * PctMens)

5 réponses

  1. Leviathan49 Messages postés 267 Statut Membre 70
     
    Je verais bien quelque chose comme ca :
    SELECT 'CoéfCharge' = CASE  
      WHEN NbMois > Vetuste THEN QuotePart 
      WHEN NbMois < Franchise THEN 100 
      ELSE 100 - ((NbMois - Franchise) * PctMens)  
      END
    FROM Ta_Table 
    
    9
    1. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
       
      SELECT CASE, m'en souvenais plus... bien vu !
      0
    2. castours Messages postés 2955 Date d'inscription   Statut Membre Dernière intervention   217
       
      Bonjour
      Je vous remercie
      J'integre votre solution dans la requète si dessous?
      Je vais l'essayer..

      SELECT T_Facturation.CoéfCharge = case, T_Facturation.Franchise, T_Facturation.NbMois, T_Facturation.IdChif, T_Facturation.N°Fam, T_Facturation.Code, T_Facturation.[Dégradations imputables], T_Facturation.PrixUni, T_Facturation.Quantité, T_Facturation.Unité, T_Facturation.PctMens, T_Facturation.TVA, T_Facturation.Vetuste, T_Facturation.QuotePart, Nz([Quantité]*[PrixUni]) AS [Prix HT], Nz([MontantHt]*(1+[TVA])) AS [Prix TTC], T_Facturation.Observations, T_Facturation.MontantHt
      WHEN NbMois > Vetuste Then QuotePart
      WHEN NbMois < Franchise Then 100
      ELSE 100 - ((NbMois - Franchise) * PctMens)

      FROM T_Facturation;
      0
    3. castours Messages postés 2955 Date d'inscription   Statut Membre Dernière intervention   217
       
      Merci de votre aide.
      J'ai intégré la formule comme ceci.
      Est ce la bonne Syntaxe?

      SELECT T_Facturation.CoéfCharge = case, T_Facturation.Franchise, T_Facturation.NbMois, T_Facturation.IdChif, T_Facturation.N°Fam, T_Facturation.Code, T_Facturation.[Dégradations imputables], T_Facturation.PrixUni, T_Facturation.Quantité, T_Facturation.Unité, T_Facturation.PctMens, T_Facturation.TVA, T_Facturation.Vetuste, T_Facturation.QuotePart, Nz([Quantité]*[PrixUni]) AS [Prix HT], Nz([MontantHt]*(1+[TVA])) AS [Prix TTC], T_Facturation.Observations, T_Facturation.MontantHt

      WHEN NbMois > Vetuste Then QuotePart
      WHEN NbMois < Franchise Then 100
      ELSE 100 - ((NbMois - Franchise) * PctMens)

      FROM T_Facturation;

      J'ai essayé mais cela ne fonctionne pas
      Un message me dit:
      erreur de syntaxe opérateur absent sur les trois lignes ci dessus
      0
    4. Leviathan49 Messages postés 267 Statut Membre 70
       
      Euh non le case et le when doivent être côte à côte, la syntaxe c'est :
      case
      when ... then
      else
      end
      Ca donne donc plutôt :
      SELECT 'CoéfCharge' = CASE 
      WHEN NbMois > Vetuste Then QuotePart   
      WHEN NbMois < Franchise Then 100   
      ELSE 100 - ((NbMois - Franchise) * PctMens)    
      END   
      , T_Facturation.Franchise, T_Facturation.NbMois, T_Facturation.IdChif, T_Facturation.N°Fam, T_Facturation.Code, T_Facturation.[Dégradations imputables], T_Facturation.PrixUni, T_Facturation.Quantité, T_Facturation.Unité, T_Facturation.PctMens, T_Facturation.TVA, T_Facturation.Vetuste, T_Facturation.QuotePart, Nz([Quantité]*[PrixUni]) AS [Prix HT], Nz([MontantHt]*(1+[TVA])) AS [Prix TTC], T_Facturation.Observations, T_Facturation.MontantHt   
      FROM T_Facturation; 
      0
    5. castours Messages postés 2955 Date d'inscription   Statut Membre Dernière intervention   217
       
      Bonjour
      J'ai essayé mais toujours le meme message d'erreur.
      Erreur de syntaxe et opérateur absent dans l'espression.
      Manque t il des vergule, tréma ou autre signe de séparation ou de ponctuation?
      Si Oui lesquelles et Ou?
      merci de votre aide
      0
  2. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
     
    SQL ne permet pas de sélectionner des données avec des structures conditionnelles.

    Au passage, tout ceci ne sert à rien, puisque que l'on passe ou non dans tes structures conditionnelles, CoéfCharge sera toujours égal à 100 - ((NbMois - Franchise) * PctMens).

    0
  3. mariobros31
     
    salut host et castours

    je suis en collaboration avec castours sur ce sujet
    le hic c'est que le % age dépasse le 100 % avec cette formule de calcul et c'est ce qu'on ne veut pas car ensuite il sert dans un calcul général de prix TTC
    ex: 100% de 100e = 100e et 139% de 100e font plus...
    nb. possible de t'envoyer l'exemple?
    0
    1. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
       
      Je n'utilise plus Access depuis des années, donc j'aurais un peu de mal. Mais en tout cas SQL ne règlera pas votre problème, malheureusement.
      0
  4. mariobros31
     
    j'aurai cru avec un where par ex
    0
    1. HostOfSeraphim Messages postés 7340 Statut Contributeur 1 609
       
      La clause WHERE te permet de sélectionner des données en fonction de certaines conditions. Mais tu ne pourras pas, dans une requête, filtrer en te basant sur une donnée donc la valeur n'est pas fixe.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. castours Messages postés 2955 Date d'inscription   Statut Membre Dernière intervention   217
     
    Bonjour a tous
    Je vous remercie d'etre pencher sur mon probléme. D'autre part, j'ai une petite base qui me serre d'exemple pour le calcul d'ou on applique la fonction de calcul.
    On choisit un enregistrement qui affiche les données, puis un bouton qui nous renvoi le resultat dans unMsgBox.
    Si cela peut vous aider a touver une solution a mon problème je peux la joindre sur le forum et joindre la requete en SQL.
    Je vous remercie
    0