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
3668
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 janvier 2021
981
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
Messages postés
13910
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 janvier 2021
783 > Utilisateur anonyme
chez moi,
DATEDIFF("yyyy",avg(T_Stagiaire.Date_Naissance_Stagiaire),NOW())
fonctionne parfaitement. Microsoft Office traite les dates comme des nombres, et la moyenne des dates de naissance a tout son sens.
Utilisateur anonyme >
Messages postés
13910
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 janvier 2021

Oui, mais il avait fait
sql>sql = "SELECT DATEDIFF("yyyy",avg(YEAR(T_Stagiaire.Date_Naissance_Stagiaire)),NOW()) FROM
Messages postés
13910
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 janvier 2021
783 > Utilisateur anonyme
ah oui, je n'avais pas remarqué ce "petit" changement, en effet!
:-)
Messages postés
3668
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 janvier 2021
981
Bonjour,

En plus de la remarque d'HDU, ton erreur de syntaxe vient des guillemets, tu utilises les mêmes autour de yyyy et autour de toute la requête. Il faut les échapper ou, s'ils sont acceptés, utiliser des guillemets simples.

Xavier
Messages postés
17
Date d'inscription
mercredi 25 janvier 2017
Statut
Membre
Dernière intervention
2 janvier 2019

Bonjour,

Un grand merci (un peu en retard) à vous pour votre aide. En plus des erreurs que vous avez trouvé, j'avais oublié une parenthèse. Oups.
Messages postés
13910
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 janvier 2021
783
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  & "' "
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.