IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

VBA et SQL à la fois


Sujet :

Requêtes et SQL.

  1. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    Je me suis mal expliquée, je voulais dire un dans chaque IIF.

    donc si j'ai bien compris ta transposition :
    [MonChamp] est compris ENTRE, si datetoday > 31/07, alors date1=01/08/N, sinon 01/08/N-1 ET si datetoday > 31/07, alors date2=31/07/N+1, sinon 31/07/N

    Non ?

  2. #22
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    oui:
    [MonChamp] est compris ENTRE:
    date1 qui vaut: si datetoday > 31/07, alors date1=01/08/N, sinon 01/08/N-1
    ET
    date2 qui vaut: si datetoday > 31/07, alors date2=31/07/N+1, sinon 31/07/N

  3. #23
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    Chouette ! Je progresse !
    Donc maintenant, promis je te laisse tranquille après (euh...on verra), je voudrais faire une autre requête (même structure que celle que tu m'as aidée à construire) avec la condition suivante :
    - si today < 31/07 de l'année N en cours, alors afficher tout au delà du 31/07/N
    - si today > 31/07/N, alors afficher tout au delà de 31/07/N+1 (s'entend ainsi également N+2 etc...)
    Là pour le coup il n'y a pas de "entre date1 et date2"

    J'ai fait ça mais .... pas bon, where's the mistake ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT iif(AFFAIRES.[Transaction en cours]=-1,"Transactions en cours hors exercice") AS Libellé, Count(AFFAIRES.[Transaction en cours]) AS Volume, Count(AFFAIRES.[Transaction aboutie])/(SELECT Count(AFFAIRES.Réfaffaires) AS CompteDeRéfaffaires FROM AFFAIRES) AS Taux, Sum(AFFAIRES.[Montant honoraires HT]) AS CA
    FROM AFFAIRES
    WHERE (((AFFAIRES.[Transaction en cours])=True)) AND IIF((AFFAIRES.[Signature définitive prévue le])< DateSerial(Year(Date()), 7, 31),1,DateSerial(Year(Date()) + 1, 7, 31))
    GROUP BY AFFAIRES.[Transaction en cours];
    Pour info, j'ai 5 affaires en cours dont 4 sur l'exercice et 1 hors exo. Ma requête m'affiche 5 hors exo et 4 sur exo...

  4. #24
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    pour:
    - si today < 31/07 de l'année N en cours, alors afficher tout au delà du 31/07/N
    - si today > 31/07/N, alors afficher tout au delà de 31/07/N+1 (s'entend ainsi également N+2 etc...)
    tu dois avoir dans le where une condition de cette forme:
    iif(date<"limite date", [champdate]>"limite date", [champdate]>("limite date"+1))

    IIF((AFFAIRES.[Signature définitive prévue le])< DateSerial(Year(Date()), 7, 31),1,DateSerial(Year(Date()) + 1, 7, 31))
    est de la forme:
    iif(date<"limite date",1,"limite date"+1)
    cad: cela renvoie 1 ou une date dans la clause where qui n'accepte que 0/-1, faux/vrai

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    Ok je vois ça de suite et te dis
    Petite question au passage, existe t-il une syntaxe pour dire à l'infini ?
    Je m'explique : comme je voudrais avoir tout ce qu'il y au delà de (N ou N+1), ça veut dire N+2 ou +3 ou plus loin. Si je mets +1 dans ma requête, ça limitera à N+1, non ?

  6. #26
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    T un génie !!!
    ça fonctionne

  7. #27
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    comme je voudrais avoir tout ce qu'il y au delà de (N ou N+1), ça veut dire N+2 ou +3 ou plus loin. Si je mets +1 dans ma requête, ça limitera à N+1, non ?
    non, puisque tu as un inégalité stricte ">" c'est tout ce qui est audelà.

    he ben voilà, tu vas pouvoir clore la discution maintenant, non...?

  8. #28
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    Tu as peur ?????
    Roulement de tambour...................
    Eh bah non ! lol !
    Une toute petite dernière.

    Comme tu l'as remarqué, il s'agit d'une requête union, donc je ne peux pas aller n mode création de requête. Or, je voudrais que la feuille de données que j'ai m'affiche les différents types de transaction dans un ordre précis.
    Actuellement il m'affiche par ordre alphabétique (Transactions abouties, avortées, en cours hors exo, en cours sur exo

    Moi je voudrais : abouties, en cours sur exo, en cours hors exo, avortées...

    C'est possible ?

    Après tu seras en RTT vis-à-vis de moi

  9. #29
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    oui c'est possible.

    je ne suis pas non plus convaincu que ce soit la meilleur mais voici une possibilité de résoudre ce pb:
    order by iif([typeTransaction]='abouties',1,iif([typeTransaction]='en cours sur exo',2,iif([typeTransaction]='en cours hors exo',3,null)))
    etc...

    et avant de rentrer en RTT: remerciement aussi à tous les participants de la discution.

  10. #30
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    Ne t'inquiète pas, je n'oublie jamais de remercier le ou les particpants.

    Pour ta solution, je la mettrais en fin de requête ?
    Il y a un hic qui risque de coincer : [type transaction] je suppose que tu fais référence au champ qui concerne les types de transaction dans ma table AFFAIRES. Seulement dans ma table, ce sont 3 champs "cases à cocher" et il n'a pas de libellé "transaction sur exercice", ni "transaction hors exercice". Il y a juste 3 libellés : "Transaction aboutie" , "Transactions avortée" et "Transaction en cours". c'est cette dernière que j'ai scindée en deux (sur exo et hors exo) dans ma requête union avec des WHERE. La requête UNION est donc basée sur 3 champs que j'ai juste renommés...

    J'ai donc transformé ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Order by iif(AFFAIRES.[Transaction aboutie]='Transactions abouties',1,iif(AFFAIRES.[Transaction en cours]='Transactions en cours sur exercice',2,iif(AFFAIRES.[Transaction en cours]='Transactions en cours hors exercice',3,iif(AFFAIRES.[Transaction avortée]='Transactions avortées',4,null))));
    mais sans succès, peut-être mal placé (j'ai essayé un peu partout)

  11. #31
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    effectivement c'est un peu différent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    order by iif([Transaction aboutie],1,iif([Transactions avortée],2,iif([Transaction en cours],3,null)))

  12. #32
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    toi alors !!!
    Elle est plus simple que celle que j'ai postée.
    Mais je la place où ????

  13. #33
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    oui, j'oubliais; order by: toujours en fin de requete

  14. #34
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    Vi mais j'en ai 4 ! lol !
    Quand j'ai tenté à la fin de la dernière, ça m'a marqué qu'il y avait une instrcution après le ;
    J'ai enlevé le ;, ça ne marchait (un autre message d'erreur me disant je ne sais plus quoi)
    Je l'ai mis à la fin de chaque requête, nada aussi !

  15. #35
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    mouais, effectivement dans une requete avec des unions c'est pas top...

    essai:
    select * from ("ici la requete avec les unions sans order") order by ...

  16. #36
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    J'ai pas compris ce que tu me demandais là !

  17. #37
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    tu rajoutes dans ta requete union devant le code sql:
    et à la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ) order by iif([Transaction aboutie],1,iif([Transactions avortée],2,iif([Transaction en cours],3,null)))

  18. #38
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    Je crois que je vais laisser tomber et mettre en résolu !

    Merci à vous tous en tout cas.

  19. #39
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    tu dois avoir une requete de cette forme:
    (j'ai repris ta requete union d'origine)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    select * from (
    
    SELECT iif(AFFAIRES.[Transaction aboutie]=-1,"Transactions abouties") AS Libellé, Count(AFFAIRES.[Transaction aboutie]) AS Volume, Count(AFFAIRES.[Transaction aboutie])/(SELECT Count(AFFAIRES.Réfaffaires) AS CompteDeRéfaffaires FROM AFFAIRES) AS Taux, Sum(AFFAIRES.[Montant honoraires HT]) AS CA
    FROM AFFAIRES
    WHERE (((AFFAIRES.[Transaction aboutie])=True)) 
    GROUP BY AFFAIRES.[Transaction aboutie];
     
    UNION
     
    SELECT iif(AFFAIRES.[Transaction en cours]=-1,"Transactions en cours") AS Libellé, Count(AFFAIRES.[Transaction en cours]) AS Volume, Count(AFFAIRES.[Transaction aboutie])/(SELECT Count(AFFAIRES.Réfaffaires) AS CompteDeRéfaffaires FROM AFFAIRES) AS Taux, Sum(AFFAIRES.[Montant honoraires HT]) AS CA
    FROM AFFAIRES
    WHERE (((AFFAIRES.[Transaction en cours])=True)) 
    GROUP BY AFFAIRES.[Transaction en cours];
     
    UNION
    
    SELECT iif(AFFAIRES.[Transaction avortée]=-1,"Transactions avortées") AS Libellé, Count(AFFAIRES.[Transaction avortée]) AS Volume, Count(AFFAIRES.[Transaction aboutie])/(SELECT Count(AFFAIRES.Réfaffaires) AS CompteDeRéfaffaires FROM AFFAIRES) AS Taux, Sum(AFFAIRES.[Montant honoraires HT]) AS CA
    FROM AFFAIRES
    WHERE (((AFFAIRES.[Transaction avortée])=True)) 
    GROUP BY AFFAIRES.[Transaction avortée];
     
    ) order by iif([Transaction aboutie],1,iif([Transactions avortée],2,iif([Transaction en cours],3,null)))

    c'est pas bo d'abandonner ainsi...

    ps: si tu n'as pas de requete union tu met seulement le order à la fin

  20. #40
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Par défaut
    C'est juste que je me rends compte que je n'aurai pas l'ordre alphabétique que je souahite. Le order by ne me donnera pas l'ordre si je me base sur les champs entre [].
    Dnc je ne m'en sortirai pas !
    Trop compliqué, lourd également pour vous donc voilà

    En plus ça me met "erreur de syntaxe FROM"

    no comment !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [VBA-E+SQL] Message d'erreur et excel qui plante
    Par Deejoh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/02/2006, 16h28
  2. [VBA] Requête SQL sur un fichier excel ?
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/01/2006, 23h06
  3. VBA et SQL
    Par molene34 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/01/2006, 21h58
  4. [VBA-W] Executer plusieurs fois la même procédure
    Par delamarque dans le forum VBA Word
    Réponses: 3
    Dernier message: 05/12/2005, 13h39
  5. [VBA vs SQL] Et vous, dans tout ça?
    Par LeScandinave dans le forum Access
    Réponses: 10
    Dernier message: 14/11/2005, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo