Erreur 3075 en VBA - Requête sql avec un SELECT

Résolu/Fermé
Noriam Messages postés 17 Date d'inscription mercredi 25 janvier 2017 Statut Membre Dernière intervention 2 janvier 2019 - Modifié le 11 sept. 2017 à 17:13
Noriam Messages postés 17 Date d'inscription mercredi 25 janvier 2017 Statut Membre Dernière intervention 2 janvier 2019 - 21 sept. 2017 à 13:41
Bonjour,

J'espère que vous pourrez m'aider.
Dans un formulaire, lorsque je clique sur Recherche, je lance mon code VBA et je souhaite inscrire le résultat d'une requête select dans un champs du même formulaire.
Sauf qu'il me marque qu'il y a une erreur d’exécution 3075 au niveau de la syntaxe et je ne trouve pas où (novice avec DAO). Une idée, s'il vous plait ?

Private Sub Cmd_RechMoyenneAge_Click()

Dim ASMAT As DAO.Database
Dim Moyenne As DAO.Recordset
Dim Sql As String

DoCmd.SetWarnings False

' Base de données et requète
Set ASMAT = CurrentDb

Sql = "SELECT AVG(DATEDIFF(NOW(),T_Stagiaire.Date_Naissance_Stagiaire)) FROM T_Stagiaire WHERE (T_Stagiaire.[Stage_Base]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Stage_PSC]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Stage_Appro]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Stage_Revision]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Numero_Inscription]='" & Me.Txt_Stage

' Ouverture du Recordset et inscription de la moyenne d'âge dans le formulaire
Set Moyenne = ASMAT.OpenRecordset(Sql, dbOpenDynaset, dbReadOnly)
Me.Txt_Moyenne = Moyenne

' Fermeture du Recordset
Moyenne.Close
ASMAT.Close

DoCmd.SetWarnings True

End Sub


Si vous avez une solution, merci d'avance.

2 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 11 sept. 2017 à 16:04
Bonjour,

À première vue, dans ton WHERE, tu ouvres une parenthèse et ne la refermes jamais.
Tu ne fermes pas non plus les guillemets sur le dernier champ.

Xavier
0
Noriam Messages postés 17 Date d'inscription mercredi 25 janvier 2017 Statut Membre Dernière intervention 2 janvier 2019
11 sept. 2017 à 17:07
Merci beaucoup.

J'ai corrigé ça. J'ai tellement la tête dedans que je ne l'avais même pas remarqué.

Maintenant, j'ai une autre erreur qui s'affiche :

Nombre d'arguments incorrect dans l'axpression AVG(DATEDIFF(NOW(),T_Stagiaire.Date_Naissance_Stagiaire))
0
Noriam Messages postés 17 Date d'inscription mercredi 25 janvier 2017 Statut Membre Dernière intervention 2 janvier 2019
11 sept. 2017 à 17:10
Mon problème, c'est que je n'ai que la date de naissance des stagiaires, mais qu'il me faut la moyenne d'âge des stagiaires par stage. Un vrai casse-tête.
Je vais peut-être faire un autre post pour ça. Merci d'avoir trouvé ma première erreur.
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > Noriam Messages postés 17 Date d'inscription mercredi 25 janvier 2017 Statut Membre Dernière intervention 2 janvier 2019
11 sept. 2017 à 17:12
je me demande si datediff ne demande pas un paramètre supplémentaire, par exemple:
DATEDIFF("yyyy",NOW(),T_Stagiaire.Date_Naissance_Stagiaire)
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > Noriam Messages postés 17 Date d'inscription mercredi 25 janvier 2017 Statut Membre Dernière intervention 2 janvier 2019
11 sept. 2017 à 20:09
moi je ferais ainsi:
DATEDIFF("yyyy",NOW(),avg(T_Stagiaire.Date_Naissance_Stagiaire))
0
Noriam Messages postés 17 Date d'inscription mercredi 25 janvier 2017 Statut Membre Dernière intervention 2 janvier 2019
Modifié le 11 sept. 2017 à 22:41
Bonsoir,

J'ai fait ça :
Sql = "SELECT DATEDIFF("yyyy",avg(YEAR(T_Stagiaire.Date_Naissance_Stagiaire)),NOW()) FROM T_Stagiaire WHERE (T_Stagiaire.[Stage_Base]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Stage_PSC]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Stage_Appro]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Stage_Revision]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Numero_Inscription]='" & Me.Txt_Stage & "')"


Il y a une erreur de syntaxe avec "yyyy" mais je vois pas.

En tout cas, un grand merci pour m'avoir déjà aidée.
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
Modifié le 11 sept. 2017 à 16:50
bonjour, si certains champs de la table sont de format numérique, tu ne peux pas les comparer à des chaines de caractères.
par exemple, si le dernier champ est numérique, tu pourrais faire ainsi:
Sql = "SELECT AVG(DATEDIFF(NOW(),T_Stagiaire.Date_Naissance_Stagiaire)) FROM T_Stagiaire WHERE T_Stagiaire.[Stage_Base]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Stage_PSC]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Stage_Appro]='" & Me.Txt_Stage & "' " & _
" OR T_Stagiaire.[Stage_Revision]='" & Me.Txt_Stage & "' " & _
" OR str(T_Stagiaire.[Numero_Inscription])=' " & Me.Txt_Stage  & "' "
0
Noriam Messages postés 17 Date d'inscription mercredi 25 janvier 2017 Statut Membre Dernière intervention 2 janvier 2019
11 sept. 2017 à 17:04
Bonjour et merci,

C'est bon ce champ est bien un texte court car il y a des lettres dedans.
0