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 :

RowSource d'un etat VBA qui ne marche pas [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Points : 75
    Points
    75
    Par défaut RowSource d'un etat VBA qui ne marche pas
    Bonjour,

    j'ai le code suivant qui me permet de parcourir un état précis le code ci dessous plante ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     strSQL = Reports("MyReport").RowSource
    et me renvoie l'erreur: 2465. Comment définir mon recordset basé sur ce report?

    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
     Private Sub Report_Open(Cancel As Integer)
     
    Dim strSQL As String
    Dim rsData, rst As DAO.Recordset
     
    strSQL = Reports("MyReport").Recordset
    Set rst = CurrentDb.OpenRecordset(strSQL, CurrentProject.Connection, adOpenKeyset)
     
     
    Do While rst.EOF = False
     
      Debug.Print rst.Fields(1).Name
      rsData.MoveNext
     
    Loop
    Merci

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 784
    Points : 14 838
    Points
    14 838
    Par défaut
    Bonsoir,
    RowSource n'est pas une propriété pour les états mais pour les zones de liste, il faut utiliser la propriété RecordSource. Si ton état utilise des sources de données différentes (sinon je ne vois pas l'intérêt de charger le RecordSource dynamiquement) tu peux utiliser OpenArgs pour alimenter le RecordSource et l'ouvrir ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenReport "MyReport", acViewPreview, , , , "MySource"
    MySource peut être le nom d'une table, d'une requète ou d'un instruction SQL.
    Puis sur l'événement Form_Open de ton état tu mets ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Report_Open(Cancel As Integer)
    ' Chargement de la source de l'état
    If Not IsNull(Me.OpenArgs) Then
        Me.RecordSource = OpenArgs
    Else
        Cancel = True
    End If
     
    End Sub

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Points : 75
    Points
    75
    Par défaut
    Merci mais je veux ouvrir un recordset sur un etat afin de parcourir un champ de cet etat et récuperer ensuite ses valeurs pour un export excel.

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 784
    Points : 14 838
    Points
    14 838
    Par défaut
    Bonsoir,
    j'avoue avoir du mal à comprendre le cheminement : ouvrir un état pour ensuite parcourir les valeurs d'un champ du recordset pour enfin exporter le résultat sur Excel n'est pas très conventionnel.
    Pourquoi ne pas simplement créer une requète contenant le champ que tu exporterais vers Excel ?
    Cela dit, ce n'était pas non plus la question posée au départ...

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Points : 75
    Points
    75
    Par défaut
    la source de mon état est une requête paramétrée qui permet de limiter l'ensemble d'enregistrements qu'il renvoie.

    à l'ouverture de l' état deux boîtes de dialogue s'affichent demandant le mois et le nom du client sur lequel l'état doit porter. J' utilise plutôt un état pour plusieurs raisons:

    1- avec une requête on peut juste faire une copie dans Excel alors qu'avec un état on peut automatiser l'export. C.a.d Vba Access prend le contrôle d'une instance d'Excel et manipule des objets du tableur.

    2- ce n'est pas tout les éléments de la requête que je veux exporter. Pour cela ,je dois parcourir mon état ligne par ligne pour sélectionner les champs à exporter.

    Merci

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 784
    Points : 14 838
    Points
    14 838
    Par défaut
    Voici comment utiliser le recordsource d'un état en RecordSet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Report_Open(Cancel As Integer)
    ' 
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset(Me.RecordSource)
     
        While Not rs.EOF
            ' ici ton code
            rs.MoveNext
        Wend
     
    rs.Close
    Set rs = Nothing
     
    End Sub

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Points : 75
    Points
    75
    Par défaut
    Si la source de mon état était une requête simple, ça allait marcher mais elle est paramétrée.
    Donc à l'ouverture de l' état deux boîtes de dialogue s'affichent demandant le mois et le nom du client sur lequel l'état doit porter. Lorsque j' entre un mois et nom du client ,VBa Access me renvoie l'erreur suivante.

    erreur 3061 trop peu de paramètres. 2 attendu.

    Que faire pour remédier à cette erreur

    merci

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 784
    Points : 14 838
    Points
    14 838
    Par défaut
    Bonsoir,
    voici une solution en VBA (et sans passer par un état) qui te permet d'exécuter une requète paramétrée à l'aide de 2 inputbox
    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
    Function LanceurRequeteParametree()
    '
    Dim Qry As DAO.QueryDef
    Dim Rst As DAO.Recordset
    Set Qry = CurrentDb.QueryDefs("Marequete")
     
    Qry.Parameters(0) = InputBox("Entre le nom du client", "Nom du client")
    Qry.Parameters(1) = InputBox("Entrez la date (jj/mm/aaaa)", "Date")
     
    Set Rst = Qry.OpenRecordset
     
        While Not Rst.EOF
            ' + Ton code
            Debug.Print Rst.Fields(0)
            Rst.MoveNext
        Wend
     
    Rst.Close
    Set Qry = Nothing
    Set Rst = Nothing
     
    End Function

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Points : 75
    Points
    75
    Par défaut
    j'aimerai plutôt passer par un état parce que je peux y faire facilement mes calcul et mon export Excel
    Merci

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 784
    Points : 14 838
    Points
    14 838
    Par défaut
    Bonsoir,
    la solution fonctionne en VBA mais tu peux toujours essayer de l'intégrer dans ton état. Après tout, je te donne des solutions et tu en fais ce que tu veux. Si tu persistes à vouloir absolument passer par un état c'est ton problème, mais je te rappelle que tu es sur un site d'entre aide, pas un site marchand avec obligation de résultats. Donc "j'aimerai ceci ou cela" est à éviter.
    Merci.

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Points : 75
    Points
    75
    Par défaut
    Merci tee_grandbois. J'ai suivi ton conseil et tout a finalement bien marché .

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

Discussions similaires

  1. [AC-2003] Requête INSERT INTO sous VBA qui ne marche pas
    Par Shinoda00 dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/03/2011, 09h56
  2. [AC-2003] Requête qui ne marche pas quand je l'utilise en VBA ?
    Par [ZiP] dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 31/03/2010, 10h28
  3. VBA Access : Fonction find qui ne marche pas
    Par leeloo35 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/02/2008, 16h56
  4. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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