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

Macros et VBA Excel Discussion :

Problème résultat d'un recordset partiel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Problème résultat d'un recordset partiel
    Bonjour,

    Je suis confronté à un problème étonnant. J'ai créé via VBA, une requête SQL interrogeant une base de données ACCESS afin d'afficher le résultat de cette requête dans une feuille de mon fichier Excel.
    Le résultat de ma requête doit comporter une ligne et 5 colonnes qui correspondent à des montants par année de 2010 à 2014. L'utilisateur choisit un mois et un établissement pour la restitution des résultats:

    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
        Dim fso As Object, Src$, Dest$, Fich$
        Set ObjAcc = CreateObject("Access.Application")
        Dim sSQL As String
        Dim rs As New ADODB.Recordset
        Dim cn As New ADODB.Connection
     
                        Set cn = New ADODB.Connection
                        cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=P:\BASES DE DONNEES\Base consommation\BASE-OMEDIT 05-11.accdb;Persist Security Info=False"
     
     
                        'requete TABMED
                        car1 = "SELECT sum(IIF(UCDconso.Période like 'M12-10*', Dépenses_accordées,0)) as dep09, sum(IIF(UCDconso.Période like 'M12-11*', Dépenses_accordées,0)) as dep10"
                        car2 = ",sum(IIF(UCDconso.Période like 'M12-12*', Dépenses_accordées,0)) as dep11, sum(IIF(UCDconso.Période like 'M12-13*', Dépenses_accordées,0)) as dep12,sum(IIF(UCDconso.Période='M" & mois & "-13' Or Période='M" & mois & "-13A' or Période='M" & mois & "-13E' or Période='M" & mois & "-13P' or Période='M" & mois & "-13L', Dépenses_accordées,0)) as dep" & mois2 & "12, sum(IIF(UCDconso.Période='M" & mois & "-14' Or Période='M" & mois & "-14A' or Période='M" & mois & "-14E' or Période='M" & mois & "-14P' or Période='M" & mois & "-14L', Dépenses_accordées,0)) as dep" & mois2 & "13 from UCDconso inner join Etablissement on "
                        car3 = "UCDconso.finess=Etablissement.finess where Etablissement.finess_structure=" & finess & ";"
     
                        'concaténation des 3 parties de la requete
                        sSQL = car1 & car2 & car3
     
                        'Affichage de la requete exécutée en Test
                        ActiveWorkbook.Sheets("TABMED").Cells(5, 1).Value = sSQL
     
     
                        Set rs = New ADODB.Recordset
                        rs.Open sSQL, cn
     
     
                        'Affichage du résultat de la requete
                        ActiveWorkbook.Sheets("TABMED").Cells(1, 1).CopyFromRecordset rs
    Mon problème, c'est que le résultat de la requête ne s'affiche que partiellement. Dans mon onglet Excel, seuls les montants des deux dernières années sont corrects, mais 0 s'affiche pour tous les autres.

    Et le plus étonnant, c'est que si j’exécute manuellement la requête sous Access en copiant la valeur de sSQL générée, elle fonctionne parfaitement.

    Si quelqu'un à une explication, je suis preneur.

    Cordialement,

    Erwan LEGRAND

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Penses-tu que la rubrique VBA Excel soit la plus indiquée pour poser des questions concernant des requêtes de base de données ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bojour,
    ton script sql vient d'access; les string dans access sont encadré par des double cotes en sql c'est pas bon ce son des simple cote replace les " par des '.
    Pour les like également remplace les * par des %

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Bojour,
    ton script sql vient d'access; les string dans access sont encadré par des double cotes en sql c'est pas bon ce son des simple cote replace les " par des '.
    Pour les like également remplace les * par des %
    Merci Beaucoup!! EN effet l'erreur venait des * utilisés avec les like. En remplacant par % cela fonctionne très bien, merci beaucoup




    Citation Envoyé par Menhir Voir le message
    Penses-tu que la rubrique VBA Excel soit la plus indiquée pour poser des questions concernant des requêtes de base de données ?
    Etant donné que mon erreur était liée à une syntaxe de code VBA, la rubrique VBA excel etait donc bien appropriée pour poser ma question. Merci quand même de ton intervention

  5. #5
    Invité
    Invité(e)
    Par défaut Bonjour,
    Citation Envoyé par ErwanLegrand Voir le message
    Etant donné que mon erreur était liée à une syntaxe de code VBA, la rubrique VBA excel etait donc bien appropriée pour poser ma question. Merci quand même de ton intervention
    effectivement sauf qu'il s'agit de la syntaxe Sql et vue que tu utilise un connecteur Adodb lier à vba c'est bien sur ce forum que la question devait être posé.

    ce qui explique en partie le confusion de Menhir, car tu aurais trouvé certainement la réponse dans un forum lié aux base de données autre qu'Access!

    Pour info ça c'est inutile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    car1 = "SELECT sum(IIF(UCDconso.Période like 'M12-10*', Dépenses_accordées,0)) as dep09, sum(IIF(UCDconso.Période like 'M12-11*', Dépenses_accordées,0)) as dep10"
    car2 = ",sum(IIF(UCDconso.Période like 'M12-12*', Dépenses_accordées,0)) as dep11, sum(IIF(UCDconso.Période like 'M12-13*', Dépenses_accordées,0)) as dep12,sum(IIF(UCDconso.Période='M" & mois & "-13' Or Période='M" & mois & "-13A' or Période='M" & mois & "-13E' or Période='M" & mois & "-13P' or Période='M" & mois & "-13L', Dépenses_accordées,0)) as dep" & mois2 & "12, sum(IIF(UCDconso.Période='M" & mois & "-14' Or Période='M" & mois & "-14A' or Période='M" & mois & "-14E' or Période='M" & mois & "-14P' or Période='M" & mois & "-14L', Dépenses_accordées,0)) as dep" & mois2 & "13 from UCDconso inner join Etablissement on "
    car3 = "UCDconso.finess=Etablissement.finess where Etablissement.finess_structure=" & finess & ";"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sql = "SELECT sum(IIF(UCDconso.Période like 'M12-10*', Dépenses_accordées,0)) as dep09, sum(IIF(UCDconso.Période like 'M12-11*', Dépenses_accordées,0)) as dep10"
    Sql = Sql & ",sum(IIF(UCDconso.Période like 'M12-12*', Dépenses_accordées,0)) as dep11, sum(IIF(UCDconso.Période like 'M12-13*', Dépenses_accordées,0)) as dep12,sum(IIF(UCDconso.Période='M" & mois & "-13' Or Période='M" & mois & "-13A' or Période='M" & mois & "-13E' or Période='M" & mois & "-13P' or Période='M" & mois & "-13L', Dépenses_accordées,0)) as dep" & mois2 & "12, sum(IIF(UCDconso.Période='M" & mois & "-14' Or Période='M" & mois & "-14A' or Période='M" & mois & "-14E' or Période='M" & mois & "-14P' or Période='M" & mois & "-14L', Dépenses_accordées,0)) as dep" & mois2 & "13 from UCDconso inner join Etablissement on "
    Sql = Sql & "UCDconso.finess=Etablissement.finess where Etablissement.finess_structure=" & finess & ";"
    Dernière modification par Invité ; 28/07/2014 à 12h38.

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

Discussions similaires

  1. problème résultat recordset
    Par marcuscircus dans le forum VBA Access
    Réponses: 4
    Dernier message: 21/08/2008, 09h51
  2. Problème chargement table dans Recordset
    Par chris76 dans le forum Access
    Réponses: 1
    Dernier message: 21/06/2006, 11h04
  3. [SGBD/JDBC] [JAVA/MS ACCESS] problème résultat requête
    Par mouuaahh dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 04/04/2006, 10h31
  4. Perte du contenu d'un résultat d'un recordset
    Par Ricardo_Tubbs dans le forum ASP
    Réponses: 9
    Dernier message: 09/02/2006, 11h34
  5. Réponses: 5
    Dernier message: 19/11/2004, 19h16

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