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

Résolu/Fermé
Signaler
Messages postés
17
Date d'inscription
mercredi 25 janvier 2017
Statut
Membre
Dernière intervention
2 janvier 2019
-
Messages postés
17
Date d'inscription
mercredi 25 janvier 2017
Statut
Membre
Dernière intervention
2 janvier 2019
-
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

Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 005
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
Messages postés
17
Date d'inscription
mercredi 25 janvier 2017
Statut
Membre
Dernière intervention
2 janvier 2019

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
Messages postés
18308
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 janvier 2022
1 002 >
Messages postés
17
Date d'inscription
mercredi 25 janvier 2017
Statut
Membre
Dernière intervention
2 janvier 2019

je me demande si datediff ne demande pas un paramètre supplémentaire, par exemple:
DATEDIFF("yyyy",NOW(),T_Stagiaire.Date_Naissance_Stagiaire)
0
Messages postés
17
Date d'inscription
mercredi 25 janvier 2017
Statut
Membre
Dernière intervention
2 janvier 2019

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
Messages postés
18308
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 janvier 2022
1 002 >
Messages postés
17
Date d'inscription
mercredi 25 janvier 2017
Statut
Membre
Dernière intervention
2 janvier 2019

moi je ferais ainsi:
DATEDIFF("yyyy",NOW(),avg(T_Stagiaire.Date_Naissance_Stagiaire))
0
Messages postés
17
Date d'inscription
mercredi 25 janvier 2017
Statut
Membre
Dernière intervention
2 janvier 2019

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
Messages postés
18308
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 janvier 2022
1 002
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
Messages postés
17
Date d'inscription
mercredi 25 janvier 2017
Statut
Membre
Dernière intervention
2 janvier 2019

Bonjour et merci,

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