IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Access - vba recordset sous-formulaire


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 54
    Points
    54
    Par défaut Access - vba recordset sous-formulaire
    Bonjour à tous,

    Je vous contacte pour un projet que je fais en Access VBA.
    Je suis débutant c'est à dire que j'apprend sur le tas et là je suis obligé de m'en remettre à vous car je bloque sur les sous-formulaire.
    Après de nombreuses recherches je n'arrive pas à trouver satisfaction.
    Voici mon soucis :

    J'ai un formulaire principal et un sous formulaire.
    Après la validation sur un bouton du formulaire, j'exécute une requète avec deux paramètres qui sont saisie dans deux textbox du formulaire principal en VBA.
    Le soucis, c'est que j'aimerais que mon sous formulaire se remplissent de mon recordset mais cela ne marche pas, bien que j'ai trouvé plusieurs informations comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    Dim dbCurrent As Database
    Dim rs As DAO.Recordset
    Dim strQuery As String
     
    Set dbCurrent = CurrentDb()
     
     
    strQuery = "SELECT COUNT([NUM_AFFAIRE]) AS nbaff, [NUM_AFFAIRE], [TypeBoite] "
    strQuery = strQuery & "FROM [T_ArcBoite] INNER JOIN [T_ARCAFFAIRE] "
    strQuery = strQuery & "ON [T_ArcBoite].[NumBoite] = [T_ARCAFFAIRE].[NUM_BOITE] "
    strQuery = strQuery & "WHERE [T_ArcBoite].[NumBoite] = " & Me.txtNumBoite.value & " "
    strQuery = strQuery & "AND [T_ARCAFFAIRE].[SITE_ARCHIVAGE] = '" & queryProtectStr(Me.lstSiteArc.value) & "' "
    strQuery = strQuery & "GROUP BY [NUM_AFFAIRE], [TypeBoite]"
    strQuery = strQuery & "ORDER BY [NUM_AFFAIRE], [TypeBoite] "
     
     
    Set rs = dbCurrent.OpenRecordset(strQuery, dbOpenSnapshot)
     
    Set Me.AFFParNumBoite_sous_formulaire.Form.Recordset = rs
    J'espère que vous pourrais me venir en aide.

    Merci d'avance.

    Jedi186

  2. #2
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 54
    Points
    54
    Par défaut
    Personne n'a vraiment d'idées ?

    Pour être plus bref,
    Je cherche à savoir comment je peux faire afficher tout le résultat de mon RecordSet dans un formulaire, voire un sous formulaire.

    Exemple : mon recordset contient 3 valeurs :

    Alors j'aimerais qu'il y est trois textbox qui contiennent le résultat (il y a autant de textbox que de résultat.)

    Mais bon le mieux serait que mon sous formulaire récupère les information de ma requete VBA mais cela ne marche pas.

    J'espère que j'ai pu être plus clair.

    Merci d'avance !

    Jedi186

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    Bonjour,
    je te recommande de regarder l'aide sur la propriété
    N'hésite pas à nous revenir.

  4. #4
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 54
    Points
    54
    Par défaut
    Merci pour ta réponse, mais c'est justement là que ça bloque, j'ai chercher plein de truc notamment sur le recordSource, j'ai employé celui ci sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![ArcRechAFFBoite]![sousFormAFF].Form.RecordSource = strQuery
    Mais rien !

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    Ok,
    autre méthode à regarder,
    mettre dans la source du formulaire cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "SELECT COUNT([NUM_AFFAIRE]) AS nbaff, [NUM_AFFAIRE], [TypeBoite] 
    FROM [T_ArcBoite] INNER JOIN [T_ARCAFFAIRE] ON [T_ArcBoite].[NumBoite] = [T_ARCAFFAIRE].[NUM_BOITE] GROUP BY [NUM_AFFAIRE], [TypeBoite]
    ORDER BY [NUM_AFFAIRE], [TypeBoite]"
    et utiliser dans la foulée
    des exemples ici
    http://access.developpez.com/faq/?pa...#PreremplChamp

  6. #6
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 54
    Points
    54
    Par défaut
    oula je fatigue, j'essai depuis toute la journée je trouve pas.

    Humm tu pourrais plus détailler ta methode stp ?

    Je la met ma requete dans quel source , celle du formulaire principal ou du sous formulaire.
    Et comment j'indique les condition de mon WHERE car il faut que je precisise le numéro de boite et le site d'archivage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strQuery = strQuery & "WHERE [T_ArcBoite].[NumBoite] = " & Me.NumBoite.value & " "
    strQuery = strQuery & "AND [T_ARCAFFAIRE].[SITE_ARCHIVAGE] = '" & queryProtectStr(Me.lstSiteArc.value) & "' "
    désolé et merci

  7. #7
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    Une fois que tu affectes/modifies un recordset d'un sous formulaire (ou même d'un formulaire) : penses à actualiser le sous formulaire.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ' modification de la source du formulaire
        Forms![fRecherche]![sfVehicule].Form.RecordSource = SQL
        ' rafraichit le sous formulaire au moyen de la méthode Requery
        Me.sfVehicule.Form.Requery


    Edit : tu as ici 2 syntaxes différentes pour accéder au sous formulaire.
    Pour plus d'infos : la syntaxe des objets Access

  8. #8
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 54
    Points
    54
    Par défaut
    Oui Oui c'est vrai, j'avais oublié de le mettre dans le code que je vous ai montré, mais ça ne fait rien du tout.

    Pour la syntaxe, désolé, c'est juste que j'ai cherché sur tellement de forum ou de site ou d'aide, que j'ai fait plein de test et après j'ai des truc différent.
    Je me perd un peu a vrai dire !

  9. #9
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut


    Qu'affectes tu à la propriété RecordSource ? Une chaine de caractère j'espère ?
    Le Recordset n'est pas accepté.

    Peux tu poster le code qui tu as actuellement ?

  10. #10
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 54
    Points
    54
    Par défaut
    Le truc qui me rend fou, c'est que je veux juste afficher le résultat d'une requete qui contient plusieurs valeurs en VBA, et je n'arrive pas à le faire.
    On m'avais indiquer par un sous-formulaire, alors j'ai testé, ça doi^t être tout bête mais bon j'y arrive pas.

    Le truc c'est que j'ai vu que l'on peut le faire en choisissant une table ou une requête créée en Access, mais en passsant par VBA c'est à dire une requete avec en condition deux champs à saisir et valider, ben je trouve pas !

    (désolé je me défoule un peu)

  11. #11
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 54
    Points
    54
    Par défaut
    Oui oui un chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    Dim dbCurrent As Database
    Dim rs As Recordset
    Dim strQuery As String
     
    Set dbCurrent = CurrentDb()
     
    strQuery = "SELECT [NUM_AFFAIRE] "
    strQuery = strQuery & "FROM [T_ArcBoite] INNER JOIN [T_ARCAFFAIRE] "
    strQuery = strQuery & "ON [T_ArcBoite].[NumBoite] = [T_ARCAFFAIRE].[NUM_BOITE] "
    strQuery = strQuery & "WHERE [T_ArcBoite].[NumBoite] = " & Me.NumBoite.value & " "
    strQuery = strQuery & "AND [T_ARCAFFAIRE].[SITE_ARCHIVAGE] = '" & queryProtectStr(Me.lstSiteArc.value) & "' "
    strQuery = strQuery & "GROUP BY [NUM_AFFAIRE]"
    strQuery = strQuery & "ORDER BY [NUM_AFFAIRE] "
     
    'Set rs = dbCurrent.OpenRecordset(strQuery)
     
    Forms![ArcRechAFFBoite]![sousFormAFF].Form.RecordSource = strQuery
    Forms![ArcRechAFFBoite].Form![sousFormAFF].Form.Requery
     
     
    rs.Close
    Set rs = Nothing
    dbCurrent.Close
    Set dbCurrent = Nothing
    Voilà en clair j'ai ça lol c'est à dire rien !

    Est ce qu'il faut que je regle quelque chose dans les proprieté de mes formulaire ?

  12. #12
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Il n'y a rien de spécial à modifier.

    Voici uniquement ce dont tu as besoin pour ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim strQuery As String
     
    strQuery = "SELECT [NUM_AFFAIRE] "
    strQuery = strQuery & "FROM [T_ArcBoite] INNER JOIN [T_ARCAFFAIRE] "
    strQuery = strQuery & "ON [T_ArcBoite].[NumBoite] = [T_ARCAFFAIRE].[NUM_BOITE] "
    strQuery = strQuery & "WHERE [T_ArcBoite].[NumBoite] = " & Me.NumBoite.value & " "
    strQuery = strQuery & "AND [T_ARCAFFAIRE].[SITE_ARCHIVAGE] = '" & queryProtectStr(Me.lstSiteArc.value) & "' "
    strQuery = strQuery & "GROUP BY [NUM_AFFAIRE]"
    strQuery = strQuery & "ORDER BY [NUM_AFFAIRE] "
     
     
    Forms![ArcRechAFFBoite]![sousFormAFF].Form.RecordSource = strQuery
    Forms![ArcRechAFFBoite]![sousFormAFF].Form.Requery
    Maintenant, est ce que ta chaine SQL renvoi bien le résultat escompté ?

  13. #13
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 54
    Points
    54
    Par défaut
    Ben j'ai rien qui se passe en fait.

    Est ce que le sous formulaire doit être en indépendant ??

    Car en indépendant, il me fait : l'expression entrée fait référence à un objet fermé ou supprimé ...

  14. #14
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Sous formulaire dépendant (un formulaire ayant comme source de données T_ARCAFFAIRE dans ton cas), pas de lien champs père/fils.

    Edit :
    C'est quoi ça queryProtectStr() ??

  15. #15
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 54
    Points
    54
    Par défaut
    Ok je vais vite voir ce que ça donne.
    Je vais bientot partir du boulot donc je te laisse traquile.
    Et je te recontacte demain sur ce POST.

    Merci encore pour ton temps et ton aide, Bonne soirée.

    EDIT : C'est un fonction qui a été créé par les développeur de l'application sur laquelle je travail servant à vérifier et retourner les chaine de caractaire comme celle qui on des apostrophes pour les convertir en caractère compréhensible par l'ordinateur. lors des requête par exemple.

  16. #16
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 54
    Points
    54
    Par défaut
    Salut,
    Comme prévu je vous recontacte pour mon problème de hier.

    Alors c'est résolu, ma syntaxe était correct, j'utilisais bien ce qu'il fallais.
    Mais le problème venait de access lol enfin plutôt de la configuration des propriétés de mon sous-formulaire, il fallait mettre :

    affich par defaut : Mode continu

    et bien faire correspondre la textbox de mon sous formulaire au champs de ma table voulu.

    Voià, désolé pour le dérangement hier et merci encore pour l'écoute.
    A bientot.

    Jedi186

  17. #17
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Je me permet de poster sur ce poste car j'ai un peu le même problème.

    J'ai suivi vos conseils et cela à l'air de fonctionner, je m'explique :

    - J'ai une table Livre avec 3 champs (Id, Titre, Auteur).
    - Un formulaire principal "FormRecherche" avec deux champs :
    -> Un listebox "Champs" (permettant le choix du critère de recherche, donc soir Livre soit Auteur).
    -> Un Textbox "Valeur" permettant de saisir la valeur (par exemple on choisit Auteur et on saisit toto).
    - Un second formulaire "SFRecherche" indépendant, avec pour source de donnée la table Livre et avec deux textbox pour afficher Titre et Auteur.

    Donc j'utilise le second formulaire comme sous formulaire dans le premier pour afficher les valeurs du Recordset.

    Voici mon code VBA du bouton "Rechercher" du formulaire FormRecherche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Private Sub BtRecherche_Click()
     
        Dim db As DAO.Database, rst As DAO.Recordset, fld As DAO.Field
        Dim requete As String
        Dim resultat As String
     
        ' Ouverture de la base de données
        Set db = DBEngine.OpenDatabase(CurrentDb.Name)
        requete = "SELECT * FROM Livre WHERE " & Champs.Value & " LIKE '*" & Valeur.Value & "*'"
     
        ' Ouverture du recordset
        Set rst = db.OpenRecordset(requete, dbOpenForwardOnly, dbReadOnly)
     
        If rst.EOF Then
            Texte6.Value = "Aucun résultat trouvé !!!"
        Else
            Forms![FormRecherche]![SFRecherche].Form.RecordSource = requete
            Forms![FormRecherche]![SFRecherche].Form.Requery
     
        End If
     
        ' Fermeture du Recordset
        rst.Close
     
    End Sub
    Donc je dis que cela semble fonctionner car dans le sous formulaire le nombre d'enregistrement trouvé est correct (par exemple 5 si je met * comme valeur recherchée, sachant que ma table contient 5 enregistrements c'est correct) MAIS les champs ne sont pas remplis !!!

    Comment peut on préciser le nom des champs du sous formulaire à remplir (enfin si c'est bien là le problème).

    Merci d'avance.

  18. #18
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    C'est bon j'ai trouvé, il fallait créer le sous formulaire en sélectionnant directement les champs à partir de la table livre (facile sous access 2007 je vais voir pour le transposer sur 2003 mais ça doit pas être compliqué).

    Désolé pour le dérangement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] recordset sous-formulaire access
    Par olivier41 dans le forum VBA Access
    Réponses: 4
    Dernier message: 22/02/2011, 05h00
  2. Réponses: 4
    Dernier message: 17/11/2008, 22h04
  3. [ACCESS XP] pbm sous-formulaire différents ..
    Par gribouille dans le forum Access
    Réponses: 3
    Dernier message: 03/07/2006, 17h13
  4. [VBA] acces sous-formulaire dépendant
    Par menguygw dans le forum Access
    Réponses: 2
    Dernier message: 03/05/2006, 15h46
  5. Access 2k : problème sous formulaire
    Par cuicui08 dans le forum Access
    Réponses: 1
    Dernier message: 30/03/2006, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo