Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comment récupérer les enregistrements d'un sous-formulaire

2 réponses
Avatar
Flo
Bonjour,

j'ai une base de données Access de gestion d'adhérents et j'ai fait un
formulaire de recherche multi critères qui affiche tous les adhérents dans
un sous-formulaire à l'ouverture puis les enregistrements sont filtrés en
fonction des sélections ; ça, ça fonctionne

mon problème est qu'ensuite je voudrais pouvoir faire une boucle sur les
enregistrements du sous-formulaire pour récupérer toutes les adresses mail,
par exemple ; et là je ne sais pas comment faire, ni si c'est possible (je
suis pas très douée en Access :-) )

ai-je un moyen de m'en sortir ou faut-il que je m'y prenne autrement,
c'est-à-dire, plutôt créer une requête SQL à partir des choix fait dans le
formulaire ?

si ça peut aider, voici le code VBA :
- mon problème est dc que je voudrais récupérer les enregistrements
contenus dans le sous-formulaire frm_ls_adh

si quelqu'un peut m'aiguiller, ce serait super, merci d'avance


Option Compare Database
Public strFiltre As String

Private Sub btnOK_Click()
Dim strStatut As String

' Filtre sur le Classement
On Error Resume Next
strFiltre = ""
If Not IsNull(Me.Classement) Then
strFiltre = "([Classement]='" & Me.Classement & "')"
End If

' Filtre sur la catégorie d'âge
If Not IsNull(Me.catégorie) Then
If strFiltre <> "" Then strFiltre = strFiltre & " AND "
strFiltre = strFiltre & "([Annee_Naiss]>=" & Me!catégorie.Column(1) & "
AND [Annee_Naiss]<=" & Me!catégorie.Column(2) & ")"
End If

' Filtre sur le code équipe (Championnat)
If Not IsNull(Me.Championnat) Then
strFiltre = strFiltre & "([code_eq1]=" & Me.Championnat & " OR
[code_eq2]=" & Me.Championnat & ")"
End If

' Filtre sur le statut
Select Case Me.Sexe
Case 1: strStatut = "F"
Case 2: strStatut = "H"
Case 3: strStatut = Null
Case Else: strStatut = ""
End Select
If strStatut <> "" Then
If strFiltre <> "" Then strFiltre = strFiltre & " AND "
strFiltre = strFiltre & "([Sexe]='" & strStatut & "')"
End If

' Afficher le résultat
Me.lblSQL.Caption = strFiltre

' Filtrer le sous-formulaire
With Me.frm_ls_adh.Form
.Filter = strFiltre
.FilterOn = True
End With
End Sub

2 réponses

Avatar
Raymond [mvp]
Bonjour.

tu peux passer par un recordset basé sur ton sous-formulaire et faire une
boucle pour récupérer toutes tes données.
Dim Rs As DAO.Recordset
Set Rs = Forms!formulaireprincipal!sous_formulaire.Form.Recordset
Rs.MoveFirst
Do Until Rs.EOF
MsgBox Rs!monchamp ' par exemple
Loop
Set Rs = Nothing


--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Flo" a écrit dans le message de news:

Bonjour,

j'ai une base de données Access de gestion d'adhérents et j'ai fait un
formulaire de recherche multi critères qui affiche tous les adhérents dans
un sous-formulaire à l'ouverture puis les enregistrements sont filtrés en
fonction des sélections ; ça, ça fonctionne

mon problème est qu'ensuite je voudrais pouvoir faire une boucle sur les
enregistrements du sous-formulaire pour récupérer toutes les adresses
mail,
par exemple ; et là je ne sais pas comment faire, ni si c'est possible (je
suis pas très douée en Access :-) )

ai-je un moyen de m'en sortir ou faut-il que je m'y prenne autrement,
c'est-à-dire, plutôt créer une requête SQL à partir des choix fait dans le
formulaire ?

si ça peut aider, voici le code VBA :
- mon problème est dc que je voudrais récupérer les
enregistrements
contenus dans le sous-formulaire frm_ls_adh

si quelqu'un peut m'aiguiller, ce serait super, merci d'avance


Avatar
Flo
super, merci pour la réponse
j'ai juste rajouté Rs.MoveNext dans la boucle

j'ai maintenant un autre problème car en fait cela me sert à concaténer
des adresses mail et ouvrir une fenetre de messagerie :

Dim strInput As Variant
Application.FollowHyperlink strInput, , True

et ça a l'air de planter lorsque strInput est trop long ; quelqu'un
saurait-il quelle est la limite ?

merci d'avance

Bonjour.

tu peux passer par un recordset basé sur ton sous-formulaire et faire une
boucle pour récupérer toutes tes données.
Dim Rs As DAO.Recordset
Set Rs = Forms!formulaireprincipal!sous_formulaire.Form.Recordset
Rs.MoveFirst
Do Until Rs.EOF
MsgBox Rs!monchamp ' par exemple
Loop
Set Rs = Nothing