[VBAccess] Modifier une requete ?
Résolu/Fermé
Lazarey
Messages postés
3239
Date d'inscription
vendredi 3 novembre 2006
Statut
Membre
Dernière intervention
21 mai 2012
-
22 mai 2007 à 11:07
Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 - 22 mai 2007 à 15:57
Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 - 22 mai 2007 à 15:57
A voir également:
- [VBAccess] Modifier une requete ?
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Modifier une story facebook - Guide
- Comment modifier un pdf - Guide
- Modifier sa voix en direct - Guide
10 réponses
blux
Messages postés
26610
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
20 janvier 2025
3 326
22 mai 2007 à 13:10
22 mai 2007 à 13:10
C'est assez simple :
ta requête sera à lancer lors d'un certain évènement (puisque tu voulais en modifier une existante, je suppose donc que tu voulais le faire à un moment précis).
Il faut donc créer un peu de VBA dans un évènement pour modifier la source d'un formulaire.
Supposons que c'est fait en appuyant sur un bouton :
- tu as un formulaire nommé "F_Client" basé sur une requête SELECT NOM, PRENOM FROM Tab_Client WHERE VILLE = 'PARIS'
- tu souhaites modifier le formulaire pour afficher les NOM, PRENOM rattachés à 'LYON'
- dans ton bouton, sur l'évènement 'sur clic' tu rajoutes ce code là :
A toi de voir pour la suite : paramétrage de cette requête, récupération de valeurs via boites de dialogue ou de zones du formulaire... La liste n'est pas exhaustive...
ta requête sera à lancer lors d'un certain évènement (puisque tu voulais en modifier une existante, je suppose donc que tu voulais le faire à un moment précis).
Il faut donc créer un peu de VBA dans un évènement pour modifier la source d'un formulaire.
Supposons que c'est fait en appuyant sur un bouton :
- tu as un formulaire nommé "F_Client" basé sur une requête SELECT NOM, PRENOM FROM Tab_Client WHERE VILLE = 'PARIS'
- tu souhaites modifier le formulaire pour afficher les NOM, PRENOM rattachés à 'LYON'
- dans ton bouton, sur l'évènement 'sur clic' tu rajoutes ce code là :
Dim StrSql As String StrSql = "SELECT * FROM Tab_Client WHERE VILLE = 'LYON';" Forms.F_Client.RecordSource = StrSqlDorénavant, lorsque tu appuieras sur le bouton, le formulaire n'affichera plus que les NOM, PRENOM rattachés à LYON...
A toi de voir pour la suite : paramétrage de cette requête, récupération de valeurs via boites de dialogue ou de zones du formulaire... La liste n'est pas exhaustive...
blux
Messages postés
26610
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
20 janvier 2025
3 326
22 mai 2007 à 11:35
22 mai 2007 à 11:35
Salut,
c'est effectivement possible, mais le plus simple ne serait-il pas de paramétrer une requête temporaire pour la mettre en source d'un formulaire ?
c'est effectivement possible, mais le plus simple ne serait-il pas de paramétrer une requête temporaire pour la mettre en source d'un formulaire ?
Lazarey
Messages postés
3239
Date d'inscription
vendredi 3 novembre 2006
Statut
Membre
Dernière intervention
21 mai 2012
745
22 mai 2007 à 11:42
22 mai 2007 à 11:42
Salut,
Je suis entièrement d'accord, mais comment faire ?? :-)
Je suis entièrement d'accord, mais comment faire ?? :-)
Utilisateur anonyme
22 mai 2007 à 13:49
22 mai 2007 à 13:49
Bonjour,
C'est aussi possible de modifier la requête par programmation :
exemple :
Lupin
C'est aussi possible de modifier la requête par programmation :
exemple :
Private Sub lbxAcronyme_AfterUpdate() Dim Chaine As String Dim Critere As String Dim varAcronyme As String On Error GoTo Err_lbxAcronyme_AfterUpdate If (Forms![formclients].[lbxAcronyme] <> "") Then varAcronyme = Forms![formclients].[lbxAcronyme] Chaine = "Select * from [tabClients] where [Acronyme] Like " Critere = Chaine & """" & varAcronyme & "*" & """" If (ChangeRequeteDef("reqAcronymeSpecifique", Critere)) Then DoCmd.OpenForm "formAcronymeSpecifique", acNormal, "", "[Acronyme]", , acNormal End If InitZoneRecherche End If Exit_lbxAcronyme_AfterUpdate: Exit Sub Err_lbxAcronyme_AfterUpdate: MsgBox Error$ Resume Exit_lbxAcronyme_AfterUpdate End Sub '
Public Function ChangeRequeteDef(ChaineRequete As String, ChaineSQL As String) As Boolean Dim Definition As Variant If ((ChaineRequete = "") Or (ChaineSQL = "")) Then ChangeRequeteDef = False Else Set Definition = CurrentDb.QueryDefs(ChaineRequete) Definition.SQL = ChaineSQL Definition.Close RefreshDatabaseWindow ChangeRequeteDef = True End If End Function '
Lupin
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Lazarey
Messages postés
3239
Date d'inscription
vendredi 3 novembre 2006
Statut
Membre
Dernière intervention
21 mai 2012
745
22 mai 2007 à 14:21
22 mai 2007 à 14:21
Merci,
En fait c'es bien ça que je veux faire : je veux changer la source du sous formulaire en fonction de l'endroit où appuie l'utilisateur : 2 boutons à bascule.
J'ai assayé ce que tu m'a donné, mais cela ne fonctionne pas. Dans ma proc
mais cela ne marche pas.
ne marche pas non plus.
Access me dit : Propriété ou méthode non gérée par cet objet.
Voici mon code :
Mon formulaire s'appelle 'Ajout voies' et mon sous formulaire s'appelle 'SF Liste voies par quartier'.
Ma requete fonctionne, j'ai pu voir tout ce qu'elle affiche avec une boucle et un débug.print.
Merci...
En fait c'es bien ça que je veux faire : je veux changer la source du sous formulaire en fonction de l'endroit où appuie l'utilisateur : 2 boutons à bascule.
J'ai assayé ce que tu m'a donné, mais cela ne fonctionne pas. Dans ma proc
Private Sub Bascule20_Click()je n'arrive pas à modifier la source du sous formulaire. Voici ce que j'ai assayé :
Forms![Ajout voies]![SF Liste voies par quartier].RecordSource = req
mais cela ne marche pas.
Forms.SF_Liste_voies_par_quartier.RecordSource = req
ne marche pas non plus.
Access me dit : Propriété ou méthode non gérée par cet objet.
Voici mon code :
Private Sub Bascule20_Click() Dim req As String req = "SELECT Voies.num_voie, Types_voies.nom_type_voie, Voies.nom_voie, Voies.valide, Voies.num_quartier, Voies.num_type_voie FROM (Voies INNER JOIN Types_voies ON Voies.num_type_voie = Types_voies.num_type_voie) INNER JOIN Quartiers ON Voies.num_quartier = Quartiers.num_quartier WHERE(((Voies.valide) = True) And ((Voies.num_quartier) = " & Modifiable7 & ")) ORDER BY Voies.nom_voie;" Forms![Ajout voies]![SF Liste voies par quartier].RecordSource = req [Forms]![Ajout voies]![SF Liste voies par quartier].Requery End Sub
Mon formulaire s'appelle 'Ajout voies' et mon sous formulaire s'appelle 'SF Liste voies par quartier'.
Ma requete fonctionne, j'ai pu voir tout ce qu'elle affiche avec une boucle et un débug.print.
Merci...
blux
Messages postés
26610
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
20 janvier 2025
3 326
22 mai 2007 à 14:26
22 mai 2007 à 14:26
Ton sous-formulaire ne serait pas déjà lié au formulaire le contenant en relation père-fils ? (si tu l'as créé en glisser-déposer)
Lazarey
Messages postés
3239
Date d'inscription
vendredi 3 novembre 2006
Statut
Membre
Dernière intervention
21 mai 2012
745
22 mai 2007 à 14:37
22 mai 2007 à 14:37
Quand je passe en mode création, je sélectionne le sous formulaire, champ père est vide, champ fils aussi. Faut'il modifier ça ?
blux
Messages postés
26610
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
20 janvier 2025
3 326
22 mai 2007 à 14:53
22 mai 2007 à 14:53
Non, ça veut dire que ton sous-form n'est pas lié au form (à moins que tu ne l'aies fait en VBA :-))
Là, typiquement, c'est le sous-formulaire qui n'accepte pas d'être changé, je ne vois pas pourquoi...
Là, typiquement, c'est le sous-formulaire qui n'accepte pas d'être changé, je ne vois pas pourquoi...
blux
Messages postés
26610
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
20 janvier 2025
3 326
22 mai 2007 à 15:03
22 mai 2007 à 15:03
Je viens de tester, ça ne marche pas, je cherche pourquoi c'est bon en form mais pas en s/form...
Lazarey
Messages postés
3239
Date d'inscription
vendredi 3 novembre 2006
Statut
Membre
Dernière intervention
21 mai 2012
745
22 mai 2007 à 15:03
22 mai 2007 à 15:03
Enfin, si en quelque sorte il est lié. Lorsque je choisi un élément d'une liste modifiable du sous formulaire, je recalcule la requete de ce sous formulaire automatique. Ma liste modifiable est présente dans ma requete. Peut-être est-ce le lien.
Si cela ne t'aide pas beaucoup plus, merci beaucoup pour m'avoir consacré un peu de ton temps. Et peut-être que demain j'aurais une révélation, qui sait... ;-)
Si cela ne t'aide pas beaucoup plus, merci beaucoup pour m'avoir consacré un peu de ton temps. Et peut-être que demain j'aurais une révélation, qui sait... ;-)
blux
Messages postés
26610
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
20 janvier 2025
3 326
22 mai 2007 à 15:13
22 mai 2007 à 15:13
Ca y est :
Forms![A]![Tab_Client].Form.RecordSource = StrSql
A est le form qui contient Tab_Client...
Forms![A]![Tab_Client].Form.RecordSource = StrSql
A est le form qui contient Tab_Client...
EBasta
Messages postés
37
Date d'inscription
mercredi 16 mai 2007
Statut
Membre
Dernière intervention
25 mai 2007
31
22 mai 2007 à 15:42
22 mai 2007 à 15:42
Bonjour,
Si [Ajout voies] et [SF Liste voies par quartier] ne sont pas activés/sélectionnés, la commande devrait être :
Forms![Ajout voies]![SF Liste voies par quartier].Form.RecordSource = req
Sinon, il est possible d'activer avant le formulaire parent/père et de saisir...
Me![SF Liste voies par quartier].Form.RecordSource = req
... ou avant d'activer le sous-formulaire [SF Liste voies par quartier], et de saisir :
Me.Recordsource = req
Derrière, il faut garder le Requery.
Si je ne me trompe pas, ça devrait marcher !
Si [Ajout voies] et [SF Liste voies par quartier] ne sont pas activés/sélectionnés, la commande devrait être :
Forms![Ajout voies]![SF Liste voies par quartier].Form.RecordSource = req
Sinon, il est possible d'activer avant le formulaire parent/père et de saisir...
Me![SF Liste voies par quartier].Form.RecordSource = req
... ou avant d'activer le sous-formulaire [SF Liste voies par quartier], et de saisir :
Me.Recordsource = req
Derrière, il faut garder le Requery.
Si je ne me trompe pas, ça devrait marcher !
Lazarey
Messages postés
3239
Date d'inscription
vendredi 3 novembre 2006
Statut
Membre
Dernière intervention
21 mai 2012
745
22 mai 2007 à 15:57
22 mai 2007 à 15:57
MERCI MERCI BLUX et EBASTA !!!!!!!
C'est bon ça fonctionne impec.
Merci de m'avoir aidé !!!!!!!!!
Et Blux merci bcp de m'avoir accordé de ton temps !!!!!!!!
Je peux donc classer le problème comme RÉSOLU !!!!!!!!!!
C'est bon ça fonctionne impec.
Merci de m'avoir aidé !!!!!!!!!
Et Blux merci bcp de m'avoir accordé de ton temps !!!!!!!!
Je peux donc classer le problème comme RÉSOLU !!!!!!!!!!