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

Requêtes et SQL. Discussion :

Problème export excel sur une requete avec critère


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut Problème export excel sur une requete avec critère
    Bonjour à tous,


    J'ai un petit souci, j'ai un code qui marche très bien sur ma requete lorsque je n'ai pas de critère dans celle-ci.
    Mais lorsque je rajoute un critère ("comme formulaire") sur un champ. Il me sort le message suivant
    Erreur execution 3061 trop peu de paramètres. 2 attendu



    Avez vous une idée, SVP???

    Ps: voici le code pour infos

    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
    Private Sub Commande11_Click()
    Call Exportation("SYNTHESE_PORT_NAT_HORS_INTRA", "D:\Analyse_Avoirs_(annee_mois_debut)_(annee_mois_fin).xls", "Extraction")
    End Sub
     
    Sub Exportation(requete As String, fichier As String, onglet As String)
     
     Dim xlA As Object, xlW As Object, t As DAO.Recordset
     Dim s As String, NumChamp As Long, ligne As Long
     
     Set xlA = CreateObject("excel.application")    'lance Excel
     xlA.Visible = True
     xlA.workbooks.Open (fichier)       'ouvre le fichier
     Set xlW = xlA.activeworkbook
     ligne = 1
      Set t = CurrentDb.OpenRecordset(requete)    'ouvre la requete
     Do Until t.EOF
       ligne = ligne + 1            'ligne suivante dans la feuille Excel
       For NumChamp = 0 To 10        'pour chaque colonne de la requete
           s = t(NumChamp)       'recupération des données au format Texte
        xlW.Sheets(onglet).cells(ligne, NumChamp + 1) = "'" & s 'ecriture dans la cellule
       Next NumChamp
       t.MoveNext                    'enregistrement suivant
      Loop
     t.Close
     xlW.Save
     xlA.Quit
     Set xlA = Nothing    ' puis libère la référence.
     
    End Sub
    MErci beaucoup d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Apparement c'est un problème avec la requête, ce serait bien d'avoir plutot la requete ou au moins sa partie Where.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Voici les sql de ma requete si ça peut t'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CONSO_BASE_HI_CODE_COM.annee_mois, CONSO_BASE_HI_CODE_COM.REGION, CONSO_BASE_HI_CODE_COM.no_societe, CONSO_BASE_HI_CODE_COM.nom_societe, BASE_Plan_comm.no_agence_comm, BASE_Plan_comm.compute_0004 AS agence_comm, BASE_Plan_comm.no_commercial, BASE_Plan_comm.compute_0006 AS commercial, CONSO_BASE_HI_CODE_COM.typologie, Count(CONSO_BASE_HI_CODE_COM.typologie) AS NB, Sum(CONSO_BASE_HI_CODE_COM.montant_TTC) AS SommeDemontant_TTC
    FROM CONSO_BASE_HI_CODE_COM LEFT JOIN BASE_Plan_comm ON CONSO_BASE_HI_CODE_COM.IDCODE = BASE_Plan_comm.ID
    GROUP BY CONSO_BASE_HI_CODE_COM.annee_mois, CONSO_BASE_HI_CODE_COM.REGION, CONSO_BASE_HI_CODE_COM.no_societe, CONSO_BASE_HI_CODE_COM.nom_societe, BASE_Plan_comm.no_agence_comm, BASE_Plan_comm.compute_0004, BASE_Plan_comm.no_commercial, BASE_Plan_comm.compute_0006, CONSO_BASE_HI_CODE_COM.typologie
    HAVING (((CONSO_BASE_HI_CODE_COM.annee_mois) Between [Formulaires]![Export]![annee_mois_debut] And [Formulaires]![Export]![annee_mois_fin]));

    Merci encore

  4. #4
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    bjr,

    il faut renseigner les paramètres, il ne va pas les chercher tout seul dans ce cas de figure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim qdf As DAO.QueryDef
    Dim rs As DAO.Recordset
    Dim db As DAO.Database
    Set db = CurrentDb
    Set qdf = db.QueryDefs(requete)
    qdf.Parameters("[Formulaires]![Export]![annee_mois_debut]").Value = [Formulaires]![Export]![annee_mois_debut]
    qdf.Parameters("[Formulaires]![Export]![annee_mois_fin]").Value = [Formulaires]![Export]![annee_mois_fin]
    Set rs = qdf.OpenRecordset
    .....
    .....
    Set db = Nothing
    rs.Close
    Set rs = Nothing
    Set qdf = Nothing
    ou de manière générique (ça marche bien avec des critères comme les tiens):
    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
    Dim qdf As DAO.QueryDef
    Dim rs As DAO.Recordset
    Dim db As DAO.Database
    Dim i As Integer
    Set db = CurrentDb
    Set qdf = db.QueryDefs(requete)
    For i = 0 To qdf.Parameters.Count - 1
        qdf.Parameters(i).Value = Eval(qdf.Parameters(i).Name)
    Next
    Set rs = qdf.OpenRecordset
    ....
    ....
    Set db = Nothing
    rs.Close
    Set rs = Nothing
    Set qdf = Nothing

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Merci

    Ok ouah c'est un beu balèze.

    Si tu pouvais m'aider pour l'insérer, je t'en serais vraiment reconnaissant.


    Merci



  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    Pour copier les données du recordset dans ta feuille, tu peux aussi utiliser la méthode range.copyfromrecordset

    tu peux ainsi remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Do Until t.EOF
       ligne = ligne + 1            'ligne suivante dans la feuille Excel
       For NumChamp = 0 To 10        'pour chaque colonne de la requete
           s = t(NumChamp)       'recupération des données au format Texte
        xlW.Sheets(onglet).cells(ligne, NumChamp + 1) = "'" & s 'ecriture dans la cellule
       Next NumChamp
       t.MoveNext                    'enregistrement suivant
      Loop
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xlW.Sheets(onglet).cells(1, 1).copyfromrecordset t
    A+

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Ca doit ressembler à ça
    Au lieu de faire le recordset sur currentdb, on rajoute une couche : la requete qdf pour pouvoir définir ses paramètres
    J'ai rajouté un objet db parce que ça permet de le libérer à la fin (sinon l'utilisation de currentdb directement crée une instance de base de données jamais libérée, c'est pas un drame mais c'est mieux comme ça)

    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
    Private Sub Commande11_Click()
    Call Exportation("SYNTHESE_PORT_NAT_HORS_INTRA", "D:\Analyse_Avoirs_(annee_mois_debut)_(annee_mois_fin).xls", "Extraction")
    End Sub
    
    Sub Exportation(requete As String, fichier As String, onglet As String)
    
     Dim xlA As Object, xlW As Object, t As DAO.Recordset
     Dim qdf As DAO.QueryDef
     Dim db As DAO.Database
     Dim i as Integer
     Dim s As String, NumChamp As Long, ligne As Long
     
     Set xlA = CreateObject("excel.application")    'lance Excel
     xlA.Visible = True
     xlA.workbooks.Open (fichier)       'ouvre le fichier
     Set xlW = xlA.activeworkbook
     ligne = 1
     Set db = CurrentDb
     Set qdf = db.QueryDefs(requete)
     For i = 0 To qdf.Parameters.Count - 1
         qdf.Parameters(i).Value = Eval(qdf.Parameters(i).Name)
     Next
     Set t = qdf.OpenRecordset    'ouvre la requete
     Do Until t.EOF
       ligne = ligne + 1            'ligne suivante dans la feuille Excel
       For NumChamp = 0 To 10        'pour chaque colonne de la requete
           s = t(NumChamp)       'recupération des données au format Texte
        xlW.Sheets(onglet).cells(ligne, NumChamp + 1) = "'" & s 'ecriture dans la cellule
       Next NumChamp
       t.MoveNext                    'enregistrement suivant
      Loop
      t.Close
     Set t = Nothing
     Set qdf = Nothing
     Set db = Nothing
     xlW.Save
     xlA.Quit
     Set xlA = Nothing    ' puis libère la référence.
    
    End Sub
    Dans le cas où le critère est du style [Entrez la valeur recherchée], alors la fonction Eval ne fonctionnera pas.
    Il suffit de changer la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf.Parameters(i).Value = Eval(qdf.Parameters(i).Name)
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        On Error Resume Next
        qdf.Parameters(i).Value = Eval(qdf.Parameters(i).Name)
        If Err.number = 2482 Then ' Paramètre non évaluable
            ' Demande la saisie du paramètre dans une inputbox
            qdf.Parameters(i).Value = InputBox(qdf.Parameters(i).Name)
        End If
        On Error GoTo 0
    pour demander la saisie du paramètre dans une inputbox.

  8. #8
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Ca marche nickel.


    Super et merci

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

Discussions similaires

  1. Problème sur une requete avec fonction
    Par amelyfred dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/07/2015, 08h12
  2. Requete SUM sur une table avec critère sur une autre
    Par wail00 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/05/2007, 16h58
  3. Pb sur une requete avec jointure droite
    Par crashyear dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/02/2007, 08h06
  4. erreur sur une requete avec param curentuser
    Par laurent.w dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 17/01/2007, 13h39
  5. Problème sur une requete avec champ date
    Par islande dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2006, 19h39

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