OVH Cloud OVH Cloud

ajout de champs dans une requête via un formulaire

13 réponses
Avatar
chev92
Bonjour à tous,
Sur une table contenant les champs nommés A,B,C,D,E ,etc ... je voudrais
créer automatiquement une requête à partir de choix multiples faits dans un
formulaire avec des cases à cocher.
Par exemple : si je coche A,B et D dans le formulaire, la requête me
retourne les infos contenues dans les champs A,D et D de la table.
Ce sont donc les choix faits dans le formulaire qui vont définirles colonnes
des items de la requête.
Comment cela peut-il se construire ou se programmer ?
Merci d'avance de votre aide.

10 réponses

1 2
Avatar
3stone
Salut,

"chev92"
| Sur une table contenant les champs nommés A,B,C,D,E ,etc ... je voudrais
| créer automatiquement une requête à partir de choix multiples faits dans un
| formulaire avec des cases à cocher.
| Par exemple : si je coche A,B et D dans le formulaire, la requête me
| retourne les infos contenues dans les champs A,D et D de la table.
| Ce sont donc les choix faits dans le formulaire qui vont définirles colonnes
| des items de la requête.
| Comment cela peut-il se construire ou se programmer ?
| Merci d'avance de votre aide.


Il suffit que tu construise ta "chaîne SQL" selon les cases cochées...



Dim sSQL as String
sSQL = "Select "
if case1=true then
sSQL = sSQL & "ChampA ,"
end if
if case2 = true then
sSQL = sSQL & "ChampB,"
end if
if caseN
...
end if

'supprimer la dernière virgule
sSQL = Left(sSQL, Len(sSQL)-1)

sSQL = sSQL & " From TableMachin;"


c'est juste le principe :o)


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
chev92
OK, impeccable : je crée la xchaîne SQL que je souhaite en fonction des choix
cochés.
Maintenant, l'étape suivante :
1- puis-je sauvegarder cette chaîne SQL en tant que requête ?
2- comment puis programmer l'éxécution de cette chaîne pour extraire les
infos de ma table ?
J'ai essayé pas mal d'instructions en VBA mais à chaque fois, j'ai eu des
non-éxécutions et des messages d'erreur plus ou moins explicites.

Merci d'avance à tous ceux qui m'enverront des suggestions.


Salut,

"chev92"
| Sur une table contenant les champs nommés A,B,C,D,E ,etc ... je voudrais
| créer automatiquement une requête à partir de choix multiples faits dans un
| formulaire avec des cases à cocher.
| Par exemple : si je coche A,B et D dans le formulaire, la requête me
| retourne les infos contenues dans les champs A,D et D de la table.
| Ce sont donc les choix faits dans le formulaire qui vont définirles colonnes
| des items de la requête.
| Comment cela peut-il se construire ou se programmer ?
| Merci d'avance de votre aide.


Il suffit que tu construise ta "chaîne SQL" selon les cases cochées...



Dim sSQL as String
sSQL = "Select "
if case1=true then
sSQL = sSQL & "ChampA ,"
end if
if case2 = true then
sSQL = sSQL & "ChampB,"
end if
if caseN
...
end if

'supprimer la dernière virgule
sSQL = Left(sSQL, Len(sSQL)-1)

sSQL = sSQL & " From TableMachin;"


c'est juste le principe :o)


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/




Avatar
3stone
Salut,

"chev92"
| Maintenant, l'étape suivante :
| 1- puis-je sauvegarder cette chaîne SQL en tant que requête ?


évidement... regarde :

CreateQueryDef (NomDeLaRequete, strSQL)



| 2- comment puis programmer l'éxécution de cette chaîne pour extraire les
| infos de ma table ?


Pour juste afficher la requête ?

DoCmd.OpenQuery "NomDeLaRequête"


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
chev92
Merci de ce complément d'information.
Je me heurte maintenant à un problème de définition de cette fonction
CerateQueryDef. C'est sûrement tout bête, mais je rame parce que je suis
complètement néophyte dans en matière de programmation dans Access.
Pour être plus efficace, voici le texte de la procédure événementielle de
sortie de mon formulaire "form Multichoix" (par action sur un bouton
"Éxécuter"), pour créer une requête qui devrait s'appeler "req Multichoix"
[AnMInEl et Echant sont des tables de ma DB] :
=============================== Private Sub Exécuter_Click()
On Error GoTo Err_Exécuter_Click

Dim sSQL As String
sSQL = "SELECT Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait,"
If Option_S = True Then
sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![S]))) & "" ± "" &
CStr(Fix(StDev([AnMinEl]![S]))),"
End If
If Option_Cu = True Then
sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Cu]))) & "" ± "" &
CStr(Fix(StDev([AnMinEl]![Cu]))),"
End If
If Option_Fe = True Then
sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Fe]))) & "" ± "" &
CStr(Fix(StDev([AnMinEl]![Fe]))),"
End If
sSQL = Left(sSQL, Len(sSQL) - 1)
sSQL = sSQL & " FROM Échant INNER JOIN AnMinEl ON Échant.Échant_Numéro =
AnMinEl.Échant_Numéro" & _
" GROUP BY Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait" & _
" HAVING (((Échant.Or_Ethnic)=[Formulaires]![form Multichoix]![Choix
Origine_Ethnique]) AND" & _
" ((Échant.TypeCheveu)=[Formulaires]![form Multichoix]![Choix
Type_Cheveux])" & _
" AND ((Échant.NbTrait)=0));"
MsgBox (sSQL)
Set sQDF = Me.CreateQueryDef("req Multichoix", sSQL)
MsgBox ("REQ CREEE")
DoCmd.OpenQuery ("req Multichoix")

Exit_Exécuter_Click:
Exit Sub

Err_Exécuter_Click:
MsgBox Err.Description
Resume Exit_Exécuter_Click

End Sub
===============================
Je ne vois pas ce qui cloche, mais peut-être aurez-vous un regard plus
expérimenté que le mien.
Par avance, merci.
Cordialement.


Salut,

"chev92"
| Maintenant, l'étape suivante :
| 1- puis-je sauvegarder cette chaîne SQL en tant que requête ?


évidement... regarde :

CreateQueryDef (NomDeLaRequete, strSQL)



| 2- comment puis programmer l'éxécution de cette chaîne pour extraire les
| infos de ma table ?


Pour juste afficher la requête ?

DoCmd.OpenQuery "NomDeLaRequête"


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/





Avatar
3stone
Salut,

Que représente ceci ? & "" ± "" &


Attention aussi au VBA qui n' utilise que les expressions anglaises !

=[Formulaires]![form Multichoix]....

devient =Forms![form Multichoix]...

éviter aussi "form Multichoix" et préférer "frmMultichoix"


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/


"chev92"
| Je me heurte maintenant à un problème de définition de cette fonction
| CerateQueryDef. C'est sûrement tout bête, mais je rame parce que je suis
| complètement néophyte dans en matière de programmation dans Access.
| Pour être plus efficace, voici le texte de la procédure événementielle de
| sortie de mon formulaire "form Multichoix" (par action sur un bouton
| "Éxécuter"), pour créer une requête qui devrait s'appeler "req Multichoix"
| [AnMInEl et Echant sont des tables de ma DB] :
| =============================== | Private Sub Exécuter_Click()
| On Error GoTo Err_Exécuter_Click
|
| Dim sSQL As String
| sSQL = "SELECT Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait,"
| If Option_S = True Then
| sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![S]))) & "" ± "" &
| CStr(Fix(StDev([AnMinEl]![S]))),"
| End If
| If Option_Cu = True Then
| sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Cu]))) & "" ± "" &
| CStr(Fix(StDev([AnMinEl]![Cu]))),"
| End If
| If Option_Fe = True Then
| sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Fe]))) & "" ± "" &
| CStr(Fix(StDev([AnMinEl]![Fe]))),"
| End If
| sSQL = Left(sSQL, Len(sSQL) - 1)
| sSQL = sSQL & " FROM Échant INNER JOIN AnMinEl ON Échant.Échant_Numéro | AnMinEl.Échant_Numéro" & _
| " GROUP BY Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait" & _
| " HAVING (((Échant.Or_Ethnic)=[Formulaires]![form Multichoix]![Choix
| Origine_Ethnique]) AND" & _
| " ((Échant.TypeCheveu)=[Formulaires]![form Multichoix]![Choix
| Type_Cheveux])" & _
| " AND ((Échant.NbTrait)=0));"
| MsgBox (sSQL)
| Set sQDF = Me.CreateQueryDef("req Multichoix", sSQL)
| MsgBox ("REQ CREEE")
| DoCmd.OpenQuery ("req Multichoix")
|
| Exit_Exécuter_Click:
| Exit Sub
|
| Err_Exécuter_Click:
| MsgBox Err.Description
| Resume Exit_Exécuter_Click
|
| End Sub
| ================================
Avatar
chev92
Voir réponses ci-dessous, merci :


Salut,

Que représente ceci ? & "" ± "" &
Il s'agit d'une chaîne de caractères qui est concaténée avec les résultats,

convertis en texte, des calculs de la moyenne et de l'écart-type, sous la
forme m ± s.


Attention aussi au VBA qui n' utilise que les expressions anglaises !

=[Formulaires]![form Multichoix]....

devient =Forms![form Multichoix]...

éviter aussi "form Multichoix" et préférer "frmMultichoix"

Les termes en français dans les requêtes proviennent d'Access tel qu'il m'a

été installé, c'est pourquoi je les ai repris dans l'expression de la chaîne
SQL.

--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/


"chev92"
| Je me heurte maintenant à un problème de définition de cette fonction
| CerateQueryDef. C'est sûrement tout bête, mais je rame parce que je suis
| complètement néophyte dans en matière de programmation dans Access.
| Pour être plus efficace, voici le texte de la procédure événementielle de
| sortie de mon formulaire "form Multichoix" (par action sur un bouton
| "Éxécuter"), pour créer une requête qui devrait s'appeler "req Multichoix"
| [AnMInEl et Echant sont des tables de ma DB] :
| =============================== > | Private Sub Exécuter_Click()
| On Error GoTo Err_Exécuter_Click
|
| Dim sSQL As String
| sSQL = "SELECT Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait,"
| If Option_S = True Then
| sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![S]))) & "" ± "" &
| CStr(Fix(StDev([AnMinEl]![S]))),"
| End If
| If Option_Cu = True Then
| sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Cu]))) & "" ± "" &
| CStr(Fix(StDev([AnMinEl]![Cu]))),"
| End If
| If Option_Fe = True Then
| sSQL = sSQL & " CStr(Fix(Avg([AnMinEl]![Fe]))) & "" ± "" &
| CStr(Fix(StDev([AnMinEl]![Fe]))),"
| End If
| sSQL = Left(sSQL, Len(sSQL) - 1)
| sSQL = sSQL & " FROM Échant INNER JOIN AnMinEl ON Échant.Échant_Numéro > | AnMinEl.Échant_Numéro" & _
| " GROUP BY Échant.Or_Ethnic, Échant.TypeCheveu, Échant.NbTrait" & _
| " HAVING (((Échant.Or_Ethnic)=[Formulaires]![form Multichoix]![Choix
| Origine_Ethnique]) AND" & _
| " ((Échant.TypeCheveu)=[Formulaires]![form Multichoix]![Choix
| Type_Cheveux])" & _
| " AND ((Échant.NbTrait)=0));"
| MsgBox (sSQL)
| Set sQDF = Me.CreateQueryDef("req Multichoix", sSQL)
| MsgBox ("REQ CREEE")
| DoCmd.OpenQuery ("req Multichoix")
|
| Exit_Exécuter_Click:
| Exit Sub
|
| Err_Exécuter_Click:
| MsgBox Err.Description
| Resume Exit_Exécuter_Click
|
| End Sub
| =============================== >




Avatar
3stone
re,

"chev92"
| > Que représente ceci ? & "" ± "" &
| Il s'agit d'une chaîne de caractères qui est concaténée avec les résultats,
| convertis en texte, des calculs de la moyenne et de l'écart-type, sous la
| forme m ± s.


Ce genre de signe est à proscrire dans des noms de champ...
et nécessite d'être entouré de crochets par sécurité

[m ± s]



| >
| > Attention aussi au VBA qui n' utilise que les expressions anglaises !
| >
| > =[Formulaires]![form Multichoix]....
| >
| > devient =Forms![form Multichoix]...

| Les termes en français dans les requêtes proviennent d'Access tel qu'il m'a
| été installé, c'est pourquoi je les ai repris dans l'expression de la chaîne
| SQL.


Il ne faut pas récuperer cela dans "l'interface" utilisateur (grille de requête)
mais bien dans l'affichagede la requête en mode SQL


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
chev92
À toutes fins utiles, voici le texte du SQL de la requête souhaitée, copié à
partir de l'affichage SQL de cette requête que je viens de créer "à la main"
à l'aide de l'Assistant de création de requête : vous pouvez y constater
l'emploi des termes français. Par ailleurs, l'affichage du champ défin par un
expression faisant intervenir la chaîne de caractères " ± " s'effectue sans
problème.
Ce n'est donc pas cela qui est à l'origine des messages d'erreur observés
avec le CreateQueryDef ...


re,

"chev92"
| > Que représente ceci ? & "" ± "" &
| Il s'agit d'une chaîne de caractères qui est concaténée avec les résultats,
| convertis en texte, des calculs de la moyenne et de l'écart-type, sous la
| forme m ± s.


Ce genre de signe est à proscrire dans des noms de champ...
et nécessite d'être entouré de crochets par sécurité

[m ± s]



| >
| > Attention aussi au VBA qui n' utilise que les expressions anglaises !
| >
| > =[Formulaires]![form Multichoix]....
| >
| > devient =Forms![form Multichoix]...

| Les termes en français dans les requêtes proviennent d'Access tel qu'il m'a
| été installé, c'est pourquoi je les ai repris dans l'expression de la chaîne
| SQL.


Il ne faut pas récuperer cela dans "l'interface" utilisateur (grille de requête)
mais bien dans l'affichagede la requête en mode SQL


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/




Avatar
3stone
"chev92"
| Ce n'est donc pas cela qui est à l'origine des messages d'erreur observés
| avec le CreateQueryDef ...


et moi je te répête que tu dois utiliser des expressions anglaises dans le VBA ;-)

Le VBA n'ayant que faire de "Formulaires" !

--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
3stone
re,

"3stone"
| Le VBA n'ayant que faire de "Formulaires" !


et même le "sortir" de la chaine de caractères...

...HAVING (((Échant.Or_Ethnic)='" & [Forms]![form Multichoix]![Choix Origine_Ethnique]) & "' AND"


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
1 2