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 :

Transfert requete paramétrée vers excel [AC-2003]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Points : 35
    Points
    35
    Par défaut Transfert requete paramétrée vers excel
    Bonjour
    J'essaye désespérément d'envoyer le résultat d'une requête vers Excel, mais quel que soit le code utilisé, j'arrive tjs à un Message d'erreur : "Trop peu de paramètres.1 attendu."
    Ma requête contient 1 critère qui semble poser le pb : sans ce critère, mes codes fonctionnent (et copient 9000 valeurs dans Excel au lieu des 4-5 attendues...). Ce critère prend en compte 1 valeur contenue ds le formulaire en cours sur access.
    ex 1 : critère dans Access à la création de la requête (requête qui fonctionne bien si elle est lancée indépendamment sous Access)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim oApp As Object
        Dim oBook As Object
        Dim oSheet As Object
        Dim rec As Recordset
      Set oApp = CreateObject("Excel.Application")
      Set oBook = oApp.Workbooks.Add
      Set oSheet = oBook.Worksheets(1)
      Set rec = CurrentDb.OpenRecordset("Rq perso")
      oSheet.Cells(2, 1).CopyFromRecordset rec
    rec.Close
    oApp.Visible = True

    ex 2 : j'intègre le critère dans le code en DAO
    Codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim oDb As dao.Database
    Dim oRstFiltre As dao.Recordset
    Set oDb = CurrentDb
    Set oRstFiltre = oDb.OpenRecordset("SELECT * FROM [Rq perso] WHERE [Index camp] =" & "Me![Index4]", dbOpenDynaset)
    PLEASE HELP !!!!

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir,

    Il me semble que tu ne peux pas exploiter dans ce contexte une requête liée à un formulaire.

    Dans ton code 2, tu approches d'une solution ...

    Si tu as bien supprimé de [Rq perso] le lien avec le formulaire, essaie comme ceci (si Index camp est numérique):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRstFiltre = oDb.OpenRecordset("SELECT * FROM [Rq perso] WHERE [Index camp] =" & Me![Index4], dbOpenDynaset)
    Comme celà (si Index camp est de type texte):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRstFiltre = oDb.OpenRecordset("SELECT * FROM [Rq perso] WHERE [Index camp] ='" & Me![Index4] & "'", dbOpenDynaset)

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour anthurBB et mout1234 !

    La piste suivie en compagnie de mout1234 est tout à fait valable.

    Alternative possible: utiliser une fonction (déjà vue sur le forum) en lieu et place de l'appel à la méthode OpenRecordset.

    Voici un lien vers la discussion:
    Fonction générique pour ouvrir un Recordset avec "paramètres de formulaires"

    Je reprends ton exemple 1 (au passage, c'est vraiment déconseillé de ne travailler qu'avec le type Object ):
    Pour compiler ce code, il faut référencer les bibliothèques Microsoft Excel x.y Object Library et Microsoft DAO x.y Object Library (où x.y correspond aux n° de versions sur ton PC).
    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
     
        Dim oApp As Excel.Application
        Dim oBook As Excel.Workbook
        Dim oSheet As Excel.Worksheet
        Dim rec As DAO.Recordset
     
        Set oApp = CreateObject("Excel.Application")
        Set oBook = oApp.Workbooks.Add
        Set oSheet = oBook.Worksheets(1)
     
        Set rec = GenericOpenRecordset("Rq perso")
        oSheet.Cells(2, 1).CopyFromRecordset rec
        rec.Close
     
        oApp.Visible = True
    En espérant que cela fera ton bonheur.
    _

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Points : 35
    Points
    35
    Par défaut Ca marche !!!
    Merci ô grands seigneurs du code , le miracle s'est produit : j'ai récupéré mes données !!!!!!!!: (et j'ai même presque tout compris ...)
    Merci du temps passé à me répondre, et, pour tous les intervenants du forum, votre aide et vos tutoriels sont vraiment très utiles, clairs et hyper efficaces

    Voilà le code final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set oApp = CreateObject("Excel.Application")
        Set oBook = oApp.Workbooks.Add
        Set oSheet = oBook.Worksheets(1)
     
        Set rec = GenericOpenRecordset("Rq perso")
        oSheet.Cells(2, 1).CopyFromRecordset rec
        rec.Close
    avec en public function :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Public Function GenericOpenRecordset(strSQL As String, _
                                Optional intType As DAO.RecordsetTypeEnum = dbOpenDynaset, _
                                Optional intOptions As DAO.RecordsetOptionEnum, _
                                Optional intLock As DAO.LockTypeEnum, _
                                Optional pdb As DAO.Database) As DAO.Recordset
        Dim db As DAO.Database
        Dim qdf As DAO.QueryDef
        Dim rst As DAO.Recordset
        Dim prm As DAO.Parameter
        Dim sExpr As String
     
        If Not pdb Is Nothing Then
            Set db = pdb
        Else
            Set db = CurrentDb
        End If
     
        On Error Resume Next
     
        Set qdf = db.QueryDefs(strSQL)
        If Err = 3265 Then
            Set qdf = db.CreateQueryDef("", strSQL)
        End If
     
        For Each prm In qdf.Parameters
            Err.Clear
     
            sExpr = prm.Name
            sExpr = Replace(sExpr, "[Formulaires]!", "Forms!")
            sExpr = Replace(sExpr, "Formulaires!", "Forms!")
     
            prm.Value = Eval(sExpr)
     
            Select Case Err.Number
            Case 2482, 2450
                ' 2482 = Paramètre non évaluable.
                ' 2450 = Impossible de trouver le formulaire auquel il est fait référence
                '        dans une expression de macro ou un code Visual Basic.
                ' Demande la saisie du paramètre dans une inputbox
                prm.Value = InputBox(prm.Name)
            End Select
        Next
     
        On Error GoTo 0
     
        If intOptions = 0 And intLock = 0 Then
            Set rst = qdf.OpenRecordset(intType)
        ElseIf intOptions > 0 And intLock = 0 Then
            Set rst = qdf.OpenRecordset(intType, intOptions)
        ElseIf intOptions = 0 And intLock > 0 Then
            Set rst = qdf.OpenRecordset(intType, intLock)
        ElseIf intOptions > 0 And intLock > 0 Then
            Set rst = qdf.OpenRecordset(intType, intOptions, intLock)
        End If
        Set GenericOpenRecordset = rst
     
        Set prm = Nothing
        Set rst = Nothing
        Set qdf = Nothing
        Set db = Nothing
     
    End Function

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

Discussions similaires

  1. [Requete] Export vers Excel depuis Access
    Par Gylles_ dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 21/02/2014, 12h33
  2. Exportation d'une requete SQL vers excel
    Par snooopy007 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 27/07/2006, 17h00
  3. Réponses: 4
    Dernier message: 26/07/2006, 17h46
  4. Résultat d'une requete SQL vers Excel
    Par climz dans le forum Access
    Réponses: 6
    Dernier message: 09/05/2006, 15h44
  5. Exporter des données d'un requete SQL vers excel (csv)
    Par PrinceMaster77 dans le forum ASP
    Réponses: 9
    Dernier message: 08/10/2005, 22h28

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