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 :

Déclaration de paramètres dans QueryDef [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur en hydraulique urbaine
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en hydraulique urbaine

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut Déclaration de paramètres dans QueryDef
    Bonjour à tous,

    Tout d'abord, félicitation pour l'excellent tenue de ce forum et pour son immense richesse.
    Cela fait maintenant quelques semaines que mon patron m'a chargé de développer une application Acces pour simplifier la vie de nos assistantes. Il me l'a confié à moi car j'ai quelques bases d'Access et que je me suis déjà fait plusieurs outils pour accélérer mon travail.
    J'ai réussi à développer l'intégralité de l'outil sans trop de soucis. Normal, j'ai découvert votre forum et à chaque gros problème, hop le tutoriel correspondant
    Cependant, aujourd'hui je bloque sur une épine à laquelle je n'arrive pas trouver de réponse :

    Pour X raison, il me faut développer un export d'une requête paramétrée vers Excel (d'ailleurs il y aura plusieurs exports à faire, mais bon, si j'arrive pour une, les autres devraient suivre). Les paramètres sont des dates (la requête s'exécute entre DateD et dateF).

    A noter que la requête est une requête sélection, avec les paramètres date de début et date de fin selon un formulaire indépendant. Cette requête sélection une dizaine de champ entre dateD et DateF et répondant au critère [Etat] = "Gangné" ou "Perdu" ou "En-Cours""

    J'ai donc mis en place une automation vers Excel, avec un QueryDef (merci les tutoriels du forum )

    Lorsque j'exécute mon code (procédure sur l'évènement clic d'un bouton) j'ai, au choix, deux messages d'erreur :

    Erreur de conversion de type de données (code 3421) si j'utilise ce 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
    Private Sub Commande19_Click()
        Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim i As Long
        Dim vtemp As Variant
        Dim qdf As DAO.QueryDef
        Dim rec As DAO.Recordset
     
      'référence à la requête
        Set qdf = CurrentDb.QueryDefs("RQSelect_Propositions_Affaires")
     
      'Mise en forme des paramètres
        DateD_0 = "#" & Format(Me.DateD.Value, "dd/mm/yyyy") & "#"
        DateF_0 = "#" & Format(Me.DateF.Value, "dd/mm/yyyy") & "#"
     
      'Spécification des paramètres qdf
        qdf.Parameters("DateD") = DateD_0
        qdf.Parameters("DateF") = DateF_0
     
        Set rec = qdf.OpenRecordset()
    Ou "Type de donnée incompatible dans l'expression du critère" (Code 3464) si j'utilise ce 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
    Private Sub Commande19_Click()
        Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim i As Long
        Dim vtemp As Variant
        Dim qdf As DAO.QueryDef
        Dim rec As DAO.Recordset
     
      'référence à la requête
        Set qdf = CurrentDb.QueryDefs("RQSelect_Propositions_Affaires")
     
      'Mise en forme des paramètres
        DateD_0 = "#" & Format(Me.DateD.Value, "dd/mm/yyyy") & "#"
        DateF_0 = "#" & Format(Me.DateF.Value, "dd/mm/yyyy") & "#"
     
      'Spécification des paramètres qdf
        qdf.Parameters("DateD") = Me.DateD.Value
        qdf.Parameters("DateF") = Me.DateF.Value
     
        Set rec = qdf.OpenRecordset()
    En outre, j'ai essayé de charger Microsoft DAO object librairy 3.6 mais quand je fais OK (après avoir coché la case correspondante) il me dit : "Nom de module, de projet ou de bibliothèque d'objet déjà utilisée" alors que dans la liste des références elle apparait décochée

    Merci d'avance à ceux qui pourront me débloquer et désolé si j'ai loupé un sujet sur le forum ou si mon post n'est pas au bon endroit.


    Edit :

    Après avoir relu les règle de modération j'ai supprimé la seconde partie du code de mon bouton, il n'avait rien avoir avec la question puisqu'il expliquait comment, après avoir chargé le recordset je construisais ma feuille Excel. A noter cependant que le post n°3 fait référence avec cette partie de code supprimée et pointe vers la méthode .Copyfromrecordset pour éviter de faire une copie ligne à ligne. Merci à la personne qui m'a suggéré cette méthode, qui fonctionne à merveille, même si elle ne résous pas mon problème initial.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 106
    Par défaut
    Bonjour,

    je suppose que vous avez défini vos paramètres dans votre requête RQSelect_Propositions_Affaires comme des dates (PARAMETERS DateD Date, DateF Date; ...).
    Si c'est le cas, il faut donc renvoyer des dates comme paramètres de votre queryfdef. Or dans les 2 exemples que vous avez montrés vous renvoyez une chaine de caratères (même avec des #, il s'agit bien d'un type String).
    Je vous suggère de simplement mettre les valeurs de vos champs de votre formulaire comme paramètres de votre querydef :
    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
     
    Private Sub Commande19_Click()
        Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim i As Long
        Dim vtemp As Variant
        Dim qdf As DAO.QueryDef
        Dim rec As DAO.Recordset
     
      'référence à la requête
        Set qdf = CurrentDb.QueryDefs("RQSelect_Propositions_Affaires")
     
      'Spécification des paramètres qdf
        qdf.Parameters("DateD") = Me.DateD.Value
        qdf.Parameters("DateF") = Me.DateF.Value
     
        Set rec = qdf.OpenRecordset()
    Cordialement,

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur en hydraulique urbaine
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en hydraulique urbaine

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut
    Il me semblait que c'est bien ce que je faisais dans la deuxième solution puisque même si je garde le code pour attribuer les dates à DateD_O et dateF_O, ils ne sont pas utilisés dans la définition des paramètres
    Dans le deuxième extrait j'utilise bien les valeurs du champ.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'référence à la requête
        Set qdf = CurrentDb.QueryDefs("RQSelect_Propositions_Affaires")
    
      'Spécification des paramètres qdf
        qdf.Parameters("DateD") = Me.DateD.Value
        qdf.Parameters("DateF") = Me.DateF.Value
         
        Set rec = qdf.OpenRecordset()
    A noter que dans ce cas, l'erreur est sur la ligne rouge et qu'il s'agit de l'erreur 3464.

    Par contre, j'ai effectivement déclaré des paramètres dans ma requêtes, alors que d'habitude, pour lier une requête à des champs de formulaires, je ne déclare pas des paramètres mais utilise ce genre de critère :

    Entre [Formulaires]![Form_GenerationEtat].[DateD] Et [Formulaires]![Form_GenerationEtat].[DateF]

    Où DateD et DateF sont les nom des zones de texte (au format Date réduite jj/mm/yyyy, remplis par sélection du calendrier) de mon formulaire.

    Dans le cas de la génération vers Excel, j'avais cru comprendre qu'il ne fallait pas utiliser cette syntaxe mais mettre des vrais paramètres (dommage du coup, car je ne sais plus faire le lien entre les champs de mon formulaire et ma requête pour par exemple imprimer l'état --> il me demande les paramètres, ce qui est logique, et ne tient pas compte de la valeur des champs)

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour à tous,

    Guibar18, je te suggère pour ton export vers excel de t'inspirer de cette discussion car pour une question de performance, il est préférable d'utilise .Copyfromrecordset pour importer les données dans excel.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur en hydraulique urbaine
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en hydraulique urbaine

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut
    Alors,

    Merci pour le lien, je vais m'en inspirer.
    La méthode de .Copyfromrecordset me semble pas mal, elle évite effectivement de faire du code ligne à ligne.

    Edit
    J'ai pris bonne note et je vais modifier mon code en conséquence pour ne pas avoir à faire du "ligne à ligne". Effectivement ça économise un petit bout de code puisqu'il suffit d'une ligne ... ... Merci pour l'info, maintenant, ça ne résous pas mon problème : je n'ai toujours rien à copier


    Par contre, cela ne résous pas mon premier problème qui est d'ouvrir le recordset. Tant qu'il n'est pas chargé, dans tous les cas, impossible de copier

  6. #6
    Membre Expert
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 885
    Par défaut
    bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ......................
    'Mise en forme des paramètres
        DateD_0 = "#" & Format(Me.DateD, "mm/dd/yyyy") & "#"
        DateF_0 = "#" & Format(Me.DateF, "mm/dd/yyyy") & "#"
     
      'Spécification des paramètres qdf
        qdf.Parameters("DateD") = Me.DateD
        qdf.Parameters("DateF") = Me.DateF
    Allège ton code Me.DateD c'est la meme chose que ça Me.DateD.value

    @+

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur en hydraulique urbaine
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en hydraulique urbaine

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut
    On en apprend tous les jours, merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/08/2013, 17h54
  2. Réponses: 4
    Dernier message: 30/03/2008, 21h56
  3. Ajout de paramètres dans le path du forward
    Par sylvain_neus dans le forum Struts 1
    Réponses: 6
    Dernier message: 14/11/2007, 17h31
  4. [jsp][struts] paramètre dans un iframe.
    Par ultimax dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 12/10/2004, 09h25
  5. [CR] insérer une image paramétrer dans une étiquette
    Par yoyothebest dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 22/08/2004, 11h58

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