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

VBA Access Discussion :

il ne trouve pas une requête que j'ai créée


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut il ne trouve pas une requête que j'ai créée
    Bonjour,

    je souhaite envoyez un message avec en pièce jointe une requête qui n'existe pas mais que je créé dynamiquement.

    voici le code

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Function Envoi_Prefac_Transporteur()
    On Error GoTo Envoi_Prefac_Transporteur_Err
     
    'définit les variables
    Dim CodeTrans As String 'code Transporteur
    Dim SQL As String
    Dim Mail As String 'adresse e-mail
    'Dim Corps As String 'corps du message
    'Dim sujet As String 'objet du message
     
    'définit les paramêtres
    CodeTrans = InputBox("Quel est le code transporteur", "Question", , 100, 100)
    SQL = "SELECT [3_Valorisation_expéditions_VN_renault-nissan].[N° CHASSIS], [3_Valorisation_expéditions_VN_renault-nissan].FAMILLE, " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[LIBELLE FAMILLE], [3_Valorisation_expéditions_VN_renault-nissan].[TYPE VEHICULE], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].CONSTRUCTEUR, [3_Valorisation_expéditions_VN_renault-nissan].[CATEGORIE VEHICULE], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[POINT ORIGINE AFF EXT], [3_Valorisation_expéditions_VN_renault-nissan].[DESTINATION TRANSPORT], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[LIBELLE DESTINATION TRANSPORT], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[LOCALITE DESTINATION TRANSPORT], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[CODE PAYS DISTRIBUTION DESTINATION TRANSPORT], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[ZONE DISTRIBUTION DESTINATION TRANSPORT], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[DATE CHARGEMENT], [3_Valorisation_expéditions_VN_renault-nissan].TRANSPORTEUR, " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[LIBELLE TRANSPORTEUR], [3_Valorisation_expéditions_VN_renault-nissan].[NOM CHAUFFEUR], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[N° EXPEDITION], [3_Valorisation_expéditions_VN_renault-nissan].[N° BON LIVRAISON], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[N° MATRICULE OU N° WAGON], [3_Valorisation_expéditions_VN_renault-nissan].[N° REMORQUE], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[N° EXPEDITION CLIENT], [3_Valorisation_expéditions_VN_renault-nissan].[N° LOT], " _
    & "[3_Valorisation_expéditions_VN_renault-nissan].[FACTURE D ACHAT]" _
    & "FROM [3_Valorisation_expéditions_VN_renault-nissan] WHERE ((([3_Valorisation_expéditions_VN_renault-nissan].TRANSPORTEUR)='&CodeTrans&'));"
     
    'envoi le mail
    DoCmd.SendObject acQuery, SQL, "MicrosoftExcelBiff8(*.xls)", Mail, "", "", "Prefacture", "Bonjour,     En pièce jointe vous retrouverez une version électronique de la préfacture sur le Benelux.     Bien à vous,      Facturation Cat Benelux", True, ""
     
     
    Envoi_Prefac_Transporteur_Exit:
        Exit Function
     
    Envoi_Prefac_Transporteur_Err:
        MsgBox Error$
        Resume Envoi_Prefac_Transporteur_Exit
     
    End Function
    et il dit qu'il ne trouve pas la requête. est ce la méthode utilisée qui n'est pas la bonne? avez vous une piste?

    merci d'avance.

    Gabrieel

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 148
    Points
    148
    Par défaut
    Bonsoir..

    Et pour cause !
    tu ne crées pas de requete même en dynamique.
    Tu écris simplement une chaine de texte SQL qui contient les instructions..
    Mais ensuite il faut exécuter l'action qui créera la requete.

    d'abord définir un environnement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim LaBd As DAO.Database
    Dim LaQry As Querydef
    Set LaBd = CurrentDb
    Set LaQry = LaBd.CreateQueryDef(NomRequete, ChaineSql)
    Ensuite tu peux exporter la requete exécutée en Excel..

    Bon courage

    Didier71

  3. #3
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Merci Beaucoup, grace a vos réponse j'ai compris beaucoup de chose.

    par contre, j'ai un autre message d'erreur

    le type d'une expression entrée pour un des arguments est incorrect.
    zavez une piste?

    merci d'avance,

    Gabrieel

  4. #4
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    ok, je viens de comprendre une chose. les instructions suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim LaBd As DAO.Database
    Dim LaQry As Querydef
    Set LaBd = CurrentDb
    Set LaQry = LaBd.CreateQueryDef(NomRequete, ChaineSql)
    créer une requête, malheureusement cela ne me convient pas car en fait ce que je cherche a faire c'est d'envoyer une requête par mail ou au début j'introduit un paramêtre "CodeTrans" qui permettra a:
    1. Filtrer la requête sur le bon code transporteur
    2. chercher par la suite dans la table transporteur en fonction du code transporteur saisie dans codetrans trouver la bonne adresse email nécessaire


    merci d'avance de votre soutien. je continue de réfléchir de mon côté, mais si vous avez une piste je serait votre obligé.

    bien cordialement,

    Gabrieel

  5. #5
    Membre éclairé Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Points : 799
    Points
    799
    Par défaut
    Citation Envoyé par Gabrieel
    ce que je cherche a faire c'est d'envoyer une requête par mail ou au début j'introduit un paramêtre "CodeTrans"
    Je suppose que tu veux envoyer les données filtrées.

    Je te conseillerais de faire des recherches sur les requêtes paramétrées.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    je te conseillerais pour ma part quand tu as une table avec un nom aussi sympa que
    [3_Valorisation_expéditions_VN_renault-nissan]

    d'utiliser un alias cela rendra ton code plus lisible

    je préfère un

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select a.champ1, a.champ2,b.champ1
    from [table qui n'a pas un nom sympa du tout] as a
    inner join  [table qui a encore un nom moins sympa si c'est possible] as b

    ceci étant le conseil de ft035580 as x est excellent
    Elle est pas belle la vie ?

  7. #7
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    une remarque concernant cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    & "FROM [3_Valorisation_expéditions_VN_renault-nissan] WHERE ((([3_Valorisation_expéditions_VN_renault-nissan].TRANSPORTEUR)='&CodeTrans&'));"
    Il faut sortir ta variable CodeTrans de la chaîne chaîne de caractères.

    Si le champ TRANSPORTEUR est de type texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    & "FROM [3_Valorisation_expéditions_VN_renault-nissan] WHERE ((([3_Valorisation_expéditions_VN_renault-nissan].TRANSPORTEUR)='" & CodeTrans & "'));"
    Si le champ TRANSPORTEUR est de type numérique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    & "FROM [3_Valorisation_expéditions_VN_renault-nissan] WHERE ((([3_Valorisation_expéditions_VN_renault-nissan].TRANSPORTEUR)=" & CodeTrans & "));"

    Voici en plus développé ce que dit Didier71
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Function Envoi_Prefac_Transporteur()
    'définit les variables
    Dim CodeTrans As String 'code Transporteur
    Dim SQL As String
    Dim Mail As String 'adresse e-mail
     
    Dim LaBd As DAO.Database
    Dim LaQry As DAO.QueryDef
     
    On Error GoTo Envoi_Prefac_Transporteur_Err
     
    Set LaBd = CurrentDb
    ' On référence la requête R_Prefacture_Transporteur
    ' (en tant qu'objet requête de la base de données)
    On Error Resume Next
    Set LaQry = LaBd.QueryDefs("R_Prefacture_Transporteur")
    On Error GoTo Envoi_Prefac_Transporteur_Err
    ' Si la requête n'xiste pas on la crée
    If LaQry Is Nothing Then Set LaQry = LaBd.CreateQueryDef("R_Prefacture_Transporteur")
     
    'définit les paramêtres
    CodeTrans = InputBox("Quel est le code transporteur", "Question", , 100, 100)
    ' On met le code SQL de l'instruction SELECT dans la variable SQL
    SQL = "SELECT * FROM Table1 where champ1='" & CodeTrans & "'"
    ' On affecte ce code à la requête R_Prefacture_Transporteur
    LaQry.SQL = SQL
     
    ' A partir de ce point le code SQL de la requête R_Prefacture_Transporteur
    ' a été modifié
     
    ' ... suite du traitement ....
     
    Envoi_Prefac_Transporteur_Exit:
        Exit Function
     
    Envoi_Prefac_Transporteur_Err:
     
    End Function
    A chaque exécution de la fonction le code SQL de la requête "R_Prefacture_Transporteur" est modifié de manière à filtrer selon ton souhait.
    DoCmd.SendObject fonctionnera avec la requête "R_Prefacture_Transporteur" car c'est bien un objet base de données.

    Pour récupérer des infos sur le transporteur, son code étant dans la variable CodeTrans, tu peux utiliser DLookup.

    Si le champ TRANSPORTEUR est de type texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mail = DLookup("ChampEmail", "TableTransporteur", "TRANSPORTEUR='" & CodeTrans & "'")
    Si le champ TRANSPORTEUR est de type numérique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mail = DLookup("ChampEmail", "TableTransporteur", "TRANSPORTEUR=" & CodeTrans & "")
    A+

  8. #8
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Bonjour,

    merci a tous, vous êtes vraiment génial avec vos idées (en m'y basant) et avec l'aide d'autre la solution est apparue voici comment je procède

    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
    Dim rs As Recordset
    Dim Qry As QueryDef
    Set rs = CurrentDb.OpenRecordset("ADC_PrefacTranspSel")
    Set Qry = CurrentDb.QueryDefs("Make_tmp_Prefac_tpt")
     
     
    Do Until rs.EOF
        Qry.Parameters("CodeTrans") = rs!Transporteur
        Qry.Execute
        DoEvents
        DoCmd.SendObject acSendTable, "tmp_Prefac_tpt", acFormatXLS, rs![Email address], , , "Préfacturation", "Vous trouverez les données en préfacturation en attachment. Merci!", False
        DoEvents
        rs.MoveNext
    Loop
    Set rs = Nothing
    Set Qry = Nothing
    encore merci,

    Gabrieel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. une requête que je n'arrive pas à faire marcher
    Par JeanNoel53 dans le forum Firebird
    Réponses: 8
    Dernier message: 16/12/2013, 09h27
  2. Doit modifier une requête que je ne comprends pas
    Par dldstyle dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/08/2008, 09h36
  3. Une requête que je ne parviens pas à trier
    Par renaud26 dans le forum Requêtes
    Réponses: 16
    Dernier message: 02/04/2008, 20h49
  4. Une requête que je n'arrive pas à faire
    Par Denti-fritz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/12/2005, 13h53
  5. Je trouve pas la requête qu'il me faut...
    Par MyGoul dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 12/05/2005, 16h29

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