Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/04/2011, 11h04   #1
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Par défaut Créer/Remplir un sous-formulaire à l'aide d'une requête

Bonjour,

Ma question est peut-être bête mais je débute en Access et je dois réaliser une application pour mon stage. Je vous explique le problème :

J'ai un formulaire "Opérateur" qui contient une combobox et des onglets. Je travaille actuellement sur l'onglet "Fiches de poste" qui me permet de voir les fiches de l'opérateur sélectionné.
J'ai donc fait pour l'instant une liste dans cet onglet, contenant toutes les fiches de poste de l'opérateur. Lors du changement d'opérateur dans la liste de recherche, la liste des fiches se met à jour, il n'y a pas de soucis à ce niveau.

Maintenant, j'aimerais afficher lors de la sélection d'une fiche de poste la liste de tous les éléments de la fiche de poste dans un tableau. Pour cela, j'imagine que j'ai donc besoin d'un sous-formulaire, dont la requête sera modifiée en fonction du changement de fiche et d'opérateur.
Comment peut-on, à partir d'une requête en VBA, parcourir un Recordset pour afficher les lignes du tableau une par une? Ou faut-il procéder autrement?

Je vous remercie d'avance pour vos réponses.

Cordialement,
Prettyletter
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 11h50   #2
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
Bonjour,

Je ne suis pas sûr d'avoir bien compris à 100%ce que tu veux faire!

Mais une solution simple consiste peut être à créer une table temporaire à partir de ta requête SQL (SELECT INTO) puis d'avoir un formulaire qui pointe dessus.

Sinon tu peux aussi créer un sous formulaire dont tu changeras la requête SQL source quand nécessaire (évènement after_update par exemple)
Code :
Me.NomSousFormulaire.Form.RecordSource = "Requête SQL"
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 12h58   #3
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Je te remercie d'avoir répondu!

J'avais essayé déjà ta deuxième solution mais j'avais des erreurs. Je vais réessayer!
Sinon, j'ai eu l'idée de créer un sous-formulaire avec champs pères et champs fils mais je ne sais pas comment récupérer la valeur sélectionnée dans la liste pour faire cela..
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/04/2011, 14h01   #4
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
Personnellement j'utilise beaucoup cette solution et ça fonctionne très bien.

Pour éviter les erreurs je te conseille de:
1 - Créer le formulaire qui te servira de sous formulaire
2 - Lui ta chaîne SQL en propriété record source (basé sur une fiche de poste test) afin de tester
3 - Une fois que ça marche tu peux mettre le code que je t'ai donné dans le formulaire parent
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 14h02   #5
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
J'ai peut-être un début de solution mais, évidemment, il me faudrait la fin!

J'ai donc utilisé un sous-formulaire contenant toutes les informations dont j'ai besoin, créé avec l'assistant. L'idée est d'avoir en champs père l'identifiant de l'opérateur ET l'identifiant de la fiche, et en champs fils les champs correspondants. En revanche, je ne peux pas sélectionner dans les champs père l'identifiant de la fiche. J'ai donc essayé de le modifier par VB, mais ça ne fonctionne pas. Voici ce que j'ai écrit :

Code :
1
2
3
4
5
6
7
8
9
' Evènements lors de la sélection d'une fiche de poste dans la liste
Private Sub lst_Fiches_poste_AfterUpdate()
 
Dim str_Modules As String
 
Me.sf_Modules_FP_Op.LinkMasterFields = Me.lst_Fiches_poste & ";" & Me.cbo_Operateurs
Me.sf_Modules_FP_Op.LinkChildFields = "[IDX ID_FP];[IDX ID_OP]"
 
End Sub
Je ne suis pas sûr de mon coup pour la concaténation de deux champs pères non plus. Si quelqu'un a une idée, je suis preneur!
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 14h10   #6
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
Je crois qu'il te faut mettre des virgules plutôt que des points virgules.

Personnellement je n'utilise jamais cette fonction. J'aurais donc du mal à te fournir plus d'aide!
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 14h12   #7
Membre actif
 
Homme Lionel Garnier
Consultant informatique
Inscription : octobre 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Lionel Garnier
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Industrie

Informations forums :
Inscription : octobre 2007
Messages : 134
Points : 179
Points : 179
Et je crois aussi que ça serais plutot quelque chose comme:
Code :
1
2
Me.sf_Modules_FP_Op.LinkMasterFields = "lst_Fiches_poste,cbo_Operateur"
Me.sf_Modules_FP_Op.LinkChildFields = "[IDX ID_FP],[IDX ID_OP]"
(mais là encore je ne suis pas sûr à 100%...)
yonnel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 14h13   #8
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
Je vais plutôt faire ce que tu m'as dit, je pense que tu sais mieux que moi! C'est peut-être ma requête SQL qui était incorrecte, je vais revérifier et je posterai ma solution quand j'aurai trouvé. Merci beaucoup
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 14h21   #9
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
J'ai fait comme tu m'as dit mais ça ne veut pas fonctionner. A chaque fois que je sélectionne une fiche dans la liste, j'obtiens d'abord une fenêtre me demandant un paramètre avec pour intitulé "2" puis une autre, la même avec "5".

Voici mon code VBA :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
' Evènements lors de la sélection d'une fiche de poste dans la liste
Private Sub lst_Fiches_poste_AfterUpdate()
 
Dim str_Modules As String
 
' Sélection des modules et des infos concernant leur acquisition par l'opérateur
str_Modules = "SELECT CODE, [LIBELLE], [FORMATEUR], [DATE_ACQ], [OBSERVATIONS]" _
            & " FROM [MODULES], [OPERATEURS_MODULES]" _
            & " WHERE [MODULES].[IDX ID] IN (SELECT [IDX ID_MOD]" _
            & " FROM [MODULES_FP] WHERE [IDX ID_FP] = " & Me.lst_Fiches_poste & ")" _
            & " AND [OPERATEURS_MODULES].[IDX ID_OP] = " & Me.cbo_Operateurs & ";"
 
Me.sf_Modules_FP_Op.Form.RecordSource = str_Modules
 
End Sub

Edit :
Après vérification, je me suis trompé dans l'inclusion du sous-formulaire, j'ai mis une requête au lieu du formulaire. Je n'ai plus de boites de dialogue mais je n'ai pas de résultat et je vois un message s'afficher pendant une fraction de seconde dans la barre d'état du logiciel : "Impossible de mettre à jour ce jeu d'enregistrements"...
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2011, 15h52   #10
Nouveau Membre du Club
 
Homme Marc Bellêtre
Étudiant
Inscription : mars 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Marc Bellêtre
Âge : 20
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2011
Messages : 59
Points : 26
Points : 26
L'erreur venait bien de la requête qui ne fonctionnait pas. Résolu! Merci beaucoup!
Prettyletter est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h17.


 
 
 
 
Partenaires

Hébergement Web