Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/02/2011, 11h42   #1
Invité régulier
 
Homme Guillaume BARJOT
Ingénieur en hydraulique urbaine
Inscription : février 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Guillaume BARJOT
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : février 2011
Messages : 28
Points : 5
Points : 5
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 :
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 :
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.
GuiBar18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 11h57   #2
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
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 :
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,
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h09   #3
Invité régulier
 
Homme Guillaume BARJOT
Ingénieur en hydraulique urbaine
Inscription : février 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Guillaume BARJOT
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : février 2011
Messages : 28
Points : 5
Points : 5
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 :
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)
GuiBar18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h10   #4
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 255
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : août 2007
Messages : 2 255
Points : 2 979
Points : 2 979
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.
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h18   #5
Invité régulier
 
Homme Guillaume BARJOT
Ingénieur en hydraulique urbaine
Inscription : février 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Guillaume BARJOT
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : février 2011
Messages : 28
Points : 5
Points : 5
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
GuiBar18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h31   #6
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
bonjour
Code :
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

@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h35   #7
Invité régulier
 
Homme Guillaume BARJOT
Ingénieur en hydraulique urbaine
Inscription : février 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Guillaume BARJOT
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : février 2011
Messages : 28
Points : 5
Points : 5
On en apprend tous les jours, merci
GuiBar18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h39   #8
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
Attention j'ai legerement modifier ton code; à ce niveau:
"mm/dd/yyyy" au lieu de "dd/mm/yyyy"


@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 15h41   #9
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
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
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 15h57   #10
Invité régulier
 
Homme Guillaume BARJOT
Ingénieur en hydraulique urbaine
Inscription : février 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Guillaume BARJOT
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : février 2011
Messages : 28
Points : 5
Points : 5
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 :
Set rec=qdf.Openrecerdset()
Edit 2 :
Voici le code SQL de ma requête :
[code]
Code SQL :
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é
GuiBar18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 14h25   #11
Invité régulier
 
Homme Guillaume BARJOT
Ingénieur en hydraulique urbaine
Inscription : février 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Guillaume BARJOT
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : février 2011
Messages : 28
Points : 5
Points : 5
Alors, entre temps vos posts m'ont donné des idées et j'ai finit par tester ceci :

Code :
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).
GuiBar18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 17h16   #12
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
bonjour
Et le débogueur, il s'arrête sur quelle ligne?
peux-tu nous montrer cette partie du code en entier?

@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 17h45   #13
Invité régulier
 
Homme Guillaume BARJOT
Ingénieur en hydraulique urbaine
Inscription : février 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Guillaume BARJOT
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : février 2011
Messages : 28
Points : 5
Points : 5
Comme dit plus haut, le débogueur s'arrête sur
Code :
1
2
 
Set qdf = CurrentDb.QueryDefs("RQSelect_Propositions_Affaires")
Sauf dans mon dernier essai ou il s'arrête sur
Code :
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 :
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
GuiBar18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 20h27   #14
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
bonsoir
Un detail: mm / dd / yyyy
c'est plutot comme ça:"mm/dd/yyyy"; non?
Code :
qdf.Parameters("DateD") = Format(Me.DateD, mm / dd / yyyy)
la propriété Format c'est comme ceci:
Code :
qdf.Parameters("DateD") = Format(Me.DateD, "mm/dd/yyyy")
Les double-quotes! tu as essayé avec ça?

@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 08h22   #15
Invité régulier
 
Homme Guillaume BARJOT
Ingénieur en hydraulique urbaine
Inscription : février 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Guillaume BARJOT
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : février 2011
Messages : 28
Points : 5
Points : 5
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 :
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 :
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
Type de fichier : jpg Vue des références.JPG (42,8 Ko, 1 affichages)
Type de fichier : jpg Si chargement DAO.JPG (11,4 Ko, 3 affichages)
GuiBar18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 10h26   #16
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
Bonjour
essaie comme ça pour voir:
laisse Me.DateD et Me.DateF au format date.
Code :
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()

@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 10h35   #17
Invité régulier
 
Homme Guillaume BARJOT
Ingénieur en hydraulique urbaine
Inscription : février 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Guillaume BARJOT
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : février 2011
Messages : 28
Points : 5
Points : 5
En faisant cette opération, le message d'erreur se déplace sur la ligne en rouge ci-après :

Code :
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)
GuiBar18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 04h47   #18
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
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 :
qdf.Parameters("DateD") = cdbl(Me.DateD)
pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 08h28   #19
Invité régulier
 
Homme Guillaume BARJOT
Ingénieur en hydraulique urbaine
Inscription : février 2011
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Guillaume BARJOT
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : février 2011
Messages : 28
Points : 5
Points : 5
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 :
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.
GuiBar18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 10h50   #20
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
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
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h31.


 
 
 
 
Partenaires

Hébergement Web