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

  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

  8. #8
    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
    Attention j'ai legerement modifier ton code; à ce niveau:
    "mm/dd/yyyy" au lieu de "dd/mm/yyyy"


    @+

  9. #9
    Membre Expert
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 946
    Par défaut
    Bonjour

    3 petites choses :
    - au niveau du débuggage, avez-vous utilisé l'assistant de requête pour vérifier et trouver où cela coince?
    - peut-être faut-il envisager non de passer par "parameters", mais de changer la source SQL de la requête?
    - enfin, personnellement, je ne travaille plus avec le format date. Les dates sont au format "Double"; j'affiche cette valeur en formatant avec un format date.

    Pierre

  10. #10
    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, pour répondre :
    • Le requête s'exécute normalement en mode requête
    • Si la requête est correcte pour Acces, je ne comprend pas le second point
    • Je vais tester avec des réels double pour voir si cela change quelque chose


    Note :
    J'entends par "Exécuter normalement" que lorsque depuis la requête on fait "Executer", il demande les valeurs de DateD et DateF (via une text box) puis, en fonction des date rentrée, il fait la sélection demandée.


    A noter en ce qui concerne le second point : je n'ai pas compris mais essayons tout de même. Me suggérez-vous de ne pas passer par un QueryDef mais de directement mettre la chaine SQL de ma requête dans l'expression Openrecordset("ChaineSQL") ?
    Si c'est cela, pourquoi pas. Seulement c'est ce que je faisais au début et comme ma requête sélectionne 18 champs en tout la syntaxe n'est pas des plus légère. En outre, dans les différents tutoriels présentés, tout le mode passe par QueryDef lorsqu'il s'agit de charger un recordset sur une requête paramétrée, il doit donc y avoir une raison (même si celle ci est hors de ma portée) et des pour et des contres dans les deux sens j'imagine.
    Dans tous les cas, utiliser directement la chaine SQL de la requête dans Open recordset ne fonctionne pas. Evidemment je n'ai pas injecté la requête telle quelle, en réalité j'ai procédé comme suit :

    J'ai adapté la syntaxe de ma requête à cette méthode avent de la tester


    Edit :

    Utiliser des réels doubles dans les critères ne change rien, j'ai toujours le joli message d'erreur 3464 "Type de données incompatibles dans l'expression du critère" au niveau de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec=qdf.Openrecerdset()
    Edit 2 :
    Voici le code SQL de ma requête :
    [code]
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PARAMETERS DateD DateTime, DateF DateTime;
    SELECT Echeancier.N°Dossier, Pôle.Id_pôle, Etat_Avancement.[Etat d'avancement], Echeancier.IA, Left([codepostal],2) AS Dep, Clients.Client, Echeancier.Intitulé, Echeancier.[Type de marché], Echeancier.Date_Reponse, Donnes_Financière.Valeur_Globale, Donnes_Financière.Valeur_ajoutee, Echeancier.[Probabilité d'obtention], Echeancier.Commentaires, *
    FROM Etat_Avancement INNER JOIN (Pôle INNER JOIN ((Clients INNER JOIN Echeancier ON Clients.N°Client = Echeancier.Client) INNER JOIN Donnes_Financière ON Echeancier.N°Dossier = Donnes_Financière.N°Dossier) ON Pôle.N°Pôle = Echeancier.Secteur_Activite) ON Etat_Avancement.N°Avancement = Echeancier.[Etat de l'Offre]
    WHERE (((Etat_Avancement.[Etat d'avancement])="Gagné" Or (Etat_Avancement.[Etat d'avancement])="Perdu" Or (Etat_Avancement.[Etat d'avancement])="En-cours") AND ((Echeancier.Date_Reponse) Between "DateD" And "DateF"));

    Edit :
    Je viens de relire les règles de Post du forum j'ai donc adapté ce post avec la Balise "SQL" (en plus de la balise Code, pour une meilleure lisibilité

  11. #11
    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, entre temps vos posts m'ont donné des idées et j'ai finit par tester ceci :

    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
     
    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") = Format(Me.DateD, mm / dd / yyyy)
        qdf.Parameters("DateF") = Format(Me.DateF, mm / dd / yyyy)
     
        Set rec = qdf.OpenRecordset()
    Avec deux tests différents DateD et dateF en "DateTime" et en "RéeelDouble".
    dans les deux cas, j'obtiens un nouveau message d'erreur :

    Erreur d'exécution 6 : dépassement de capacité

    Derrière ce test, je voulais tester ce que donnait le format date au standard anglais (mm/dd/yyyy).

  12. #12
    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
    Et le débogueur, il s'arrête sur quelle ligne?
    peux-tu nous montrer cette partie du code en entier?

    @+

  13. #13
    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
    Comme dit plus haut, le débogueur s'arrête sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set qdf = CurrentDb.QueryDefs("RQSelect_Propositions_Affaires")
    Sauf dans mon dernier essai ou il s'arrête sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    qdf.Parameters("DateD") = Format(Me.DateD, mm / dd / yyyy)
    Pour ce qui est de montrer la partie du code en entier, je remet un extrait de comme il est actuellement :

    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 Commande56_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
        qdf.Parameters("DateF") = Me.DateF
     
        Set rec = qdf.OpenRecordset() '<--Le déboguer s'arrête ici
     
        'J'initialise mes variables
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Add

  14. #14
    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
    bonsoir
    Un detail: mm / dd / yyyy
    c'est plutot comme ça:"mm/dd/yyyy"; non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf.Parameters("DateD") = Format(Me.DateD, mm / dd / yyyy)
    la propriété Format c'est comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf.Parameters("DateD") = Format(Me.DateD, "mm/dd/yyyy")
    Les double-quotes! tu as essayé avec ça?

    @+

  15. #15
    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, je viens d'essayer d'une part avec le format anglo-saxon (mm/dd/yyyy) et d'autre part avec le format français (dd/mm/yyyy).
    Dans les deux cas, j'obtiens une erreur 3464 : "Type de données incompatible dans l'expression du critère" à la ligne en rouge dans 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
    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") = Format(Me.DateD, "dd/mm/yyyy")
        qdf.Parameters("DateF") = Format(Me.DateF, "dd/mm/yyyy")
             
        Set rec = qdf.OpenRecordset()
    Par acquis de conscience, je vais vérifier en mettant non pas des dates dans le format des paramètres mais des réels double. Je commence aussi à me demander si il ne s'agit pas d'un problème au niveau des deux textbox qui permettent de saisir la date (je les ai bloquée au format date abrégée)

    Edit :
    Si je donne des paramètres au format réel double dans ma requête, j'obtiens une erreur 3421 : "Erreur de conversion de type de données" à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf.Parameters("DateD") = Format(Me.DateD, "dd/mm/yyyy")
    Edit 2 :
    Par ailleurs, il y a ce problème d'avoir un message d'erreur au chargement de la référence Microsoft office DAO (quelle que soit la version) me disant que celle-ci est déjà chargée alors que dans la liste elle n'apparait pas cochée. Je vais mettre une copie d'écran du message d'erreur. La source de mon problème est peut-être à cet endroit
    La première image montre les librairies chargée dans mon projet, la seconde le message que j'obtiens si je coche la référence DAO et que je fais OK.
    Images attachées Images attachées   

  16. #16
    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
    essaie comme ça pour voir:
    laisse Me.DateD et Me.DateF au format date.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ................
    qdf.Parameters("DateD") = "#" & Format(Me.DateD, "dd/mm/yyyy") & "#" 
    qdf.Parameters("DateF") =  "#" & Format(Me.DateF, "dd/mm/yyyy") & "#" 
     
    Set rec = qdf.OpenRecordset()

    @+

  17. #17
    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
    En faisant cette opération, le message d'erreur se déplace sur la ligne en rouge ci-après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      'Spécification des paramètres qdf
        qdf.Parameters("DateD") = "#" & Format(Me.DateD, "dd/mm/yyyy") & "#"
        qdf.Parameters("DateF") = "#" & Format(Me.DateF, "dd/mm/yyyy") & "#"
             
        Set rec = qdf.OpenRecordset()
    Il s'agit du message 3421 "Erreur de conversion de type de données"

    Note :
    Sans trop d'espoir (mais on ne sait jamais) j'ai aussi testé (suite à un des post) de tout mettre en variable de type string. Cela ne marche pas non plus (il bloque au niveau du chargement du recordset avec le message habituel)
    Je vais essayer aussi de tester sans faire appel aux textbox du formulaire mais via un popup de saisie des dates (généré depuis VBA)

  18. #18
    Membre Expert
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 946
    Par défaut
    Bonjour

    Vous évoquiez des text box au format "date abrégé".

    Or vous avez un message d'erreur de conversion.

    Donc essayez de convertir d'abord vos paramètres.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf.Parameters("DateD") = cdbl(Me.DateD)
    pierre

  19. #19
    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
    J'ai essayé la conversion en Réel Double. J'obtiens toujours le même message d'erreur, au même endroit.
    Le critère viens faire une comparaison sur un champ au format date (recherche des enregistrements entre deux dates), il me semble donc logique que si je fait la recherche à partir d'un paramètre de type double, la requête ne puisse s'exécuter complètement.
    A noter que j'ai testé la conversion en réel double (via CDbl) en changeant la nature de ma requête (paramètre placés au format "Réels doubles " et non plus date/heure).


    Je veux bien essayer de changer la nature du champ qui sert de base à ma requête en mettant un champ de type "réel double" avec un masque de saisie correspondant à une date, mais du coup, j'ai un peu peur de mettre le bazar dans les enregistrements déjà présents ... ... si vous pouviez me rassurer sur ce point alors je fais le test.

    Edit :
    J'ai aussi essayé la fonction CDate, de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'référence à la requête
        Set qdf = CurrentDb.QueryDefs("RQSelect_Propositions_Affaires")
     
      'Spécification des paramètres qdf
        qdf.Parameters("DateD") = CDate(Me.DateD)
        qdf.Parameters("DateF") = CDate(Me.DateF)
     
        Set rec = qdf.OpenRecordset()
    Toujours le même message, toujours au même endroit.

  20. #20
    Membre Expert
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 946
    Par défaut
    Bonjour

    Je ne peux pas trop vous rassurer...

    Par contre ce que vous pouvez faire, c'est créer un nouveau champ, pour faire les tests.

    Pierre

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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