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 :

Requête VBA <- SQL, problème probable dans la syntaxe, besoin d'aide SVP.


Sujet :

Macros et VBA Excel

  1. #1
    ffs69
    Invité(e)
    Par défaut Requête VBA <- SQL, problème probable dans la syntaxe, besoin d'aide SVP.
    Bonjour à tous,

    Je suis en train d'essayer d'intégrer une requête SQL dans VBA Excel afin d'afficher ma table dans une feuille avant d'en extraire les données.

    Mon problème est que depuis 1 mois que je me penche sur le sujet, je faisais des essais en consultant une base de données, ça fonctionnait et je me concentrais alors sur le reste du code VBA.

    L'objectif final du fichier est de pouvoir faire la même chose pour 5 bases de données distinctes mais lorsque je transpose le code pour une autre BDD ça ne fonctionne pas, erreur 1001 sur ".Refresh BackgroundQuery:=False"

    Afin de fabriquer mon code j'étais passé par l'enregistreur de macro comme me l'a suggéré mon frère avant de faire des retouches. (Je débute en VBA dsl)

    Je pense que mon problème vient de ma requête sql mais je ne comprends pas que ça marche pour une base et pas pour les autres.

    Ma requête pour la premiere base est la suivante :
    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
     
    Dim strSQLa1 As String
     
    strSQLa1 = ""
    strSQLa1 = strSQLa1 & ""...
     
        With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
            "OLEDB;Provider=MSDASQL.1;Persist Security Info=True;Extended Properties=""DSN=pr****es;Description=PR****ES;UID=Administrateur;APP=Micr" _
            , "osoft Office 2003;WSID=;DATABASE=PR****ES"""), Destination:= _
            Range("$C$1")).QueryTable
            .CommandType = xlCmdSql
            .CommandText = strSQLa1
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .ListObject.DisplayName = _
            "Tableau_SQL_Queries___PR****ES__192.168.*.*____9.16.2.x1"
            .Refresh BackgroundQuery:=False
        End With
    Cette version fonctionne étrangement, si je change les infos de connexion sur une autre base (en remplaçant DSN= notamment) ça me met donc l'erreur sur la ligne .Refresh BackgroundQuery:=False avant d'importer les données.

    J'ai voulu me documenter, fabriquer ma propre ligne de commande pour la rendre plus propre et fonctionnelle mais ça ne marche pas, je sais même pas si l'idée était bonne du coup :

    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
     
    Dim strSQLc1 As String
     
    strSQLc1 = ""
    strSQLc1 = strSQLc1 & ""...
     
        With ActiveSheet.QueryTable.Add(Connection:=Array(Array( _
            "ODBC;DSN=pro*******ne;UID=administrateur;PWD=), Destination:= _
            Range("$C$1"))
            .CommandText = strSQLc1
            .Name = "ESSAI"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .Refresh BackgroundQuery:=False
        End With
    Dans ce code j'ai une erreur sur Range("$C$1") : Erreur de compilation: Attendu : séparateur de liste ou ).
    Si je décale un peu les lignes l'erreur passe sur les $ $ comme des caractères non compatibles.

    J'espère que vous pourrez m'aider à résoudre ce problème de requête sql dans vba, après ça je commencerai à être un peu plus opérationnel et je pourrai de nouveau dormir la nuit sans m'arracher les cheveux^^

    Par avance merci.

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Points
    6 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Par défaut
    Bonsoir,

    Alors, comme je n'utilise pas ce type de connexion, je peux pas t'aider mais pour le problème
    Dans ce code j'ai une erreur sur Range("$C$1") : Erreur de compilation: Attendu : séparateur de liste ou ).
    Si je décale un peu les lignes l'erreur passe sur les $ $ comme des caractères non compatibles.
    il te manque le guillemet de fermeture après Destination:= afin de pouvoir ajouter ta valeur variable se trouvant dans le range et ensuite, comme tu ouvre 4 parenthèses, il t'en faut 4 de fermeture, par contre, je ne sais pas si la connexion fonctionnera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    With ActiveSheet.QueryTable.Add(Connection:=Array(Array("ODBC;DSN=pro*******ne;UID=administrateur;PWD=, Destination:=" & Range("$C$1"))))
    0 mon avis, tu as un Array inutile puiqu'il contient qu'un élément (l'autre Array) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    With ActiveSheet.QueryTable.Add(Connection:=Array("ODBC;DSN=pro*******ne;UID=administrateur;PWD=, Destination:=" & Range("$C$1")))
    Hervé.

Discussions similaires

  1. Réponses: 12
    Dernier message: 05/06/2014, 13h00
  2. Réponses: 5
    Dernier message: 18/04/2011, 18h20
  3. [SQL] Problème insertion dans Base SQL après saisie d'un formulaire
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 15/05/2007, 14h44
  4. [SQL] Problème de " dans requête SQL
    Par cciocc dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/05/2006, 11h22
  5. [VBA vs SQL] Et vous, dans tout ça?
    Par LeScandinave dans le forum Access
    Réponses: 10
    Dernier message: 14/11/2005, 18h07

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