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 :

[VBA-E] Requète SQL avec chemin de base de données variable


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Points : 35
    Points
    35
    Par défaut [VBA-E] Requète SQL avec chemin de base de données variable
    Bonjour à tous,

    Mon but est de trouver le moyen de réaliser, via du vba sous Excel, une requète permettant d’afficher un contenu filtré issue d’une base de données (sous Acces)

    Or, le chemin de la base de données n’est pas fixe, puisque le programme que je réalise sera integré dans un logiciel installé sur un serveur. Ainsi, chacun des utilisateurs, ayant chacun leur propre base de données, devra pouvoir utiliser le logiciel automatiquement.

    Ainsi, au préalable, un utilisateur devra indiquer le chemin de sa base de données dans un fichier .ini sur son propre ordinateur. (fichier .ini se situant dans le même repertoire que le fichier Excel contenant le code)

    Voici les pistes que j’ai abordé :

    Piste1 :

    Une fois le fichier excel ouvert par l’utilisateur, lecture du chemin de la base de donné, écrit dans le .ini. Ensuite je mets ce chemin dans une variable x de type string:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Open ThisWorkBook.Path &  "\"  & " monfichier.ini"  For Input As #1
    Line Input #1,x
    Enfin je lance ma requète dont le début du code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With ActiveSheet.QueryTables.Add(Connection :=Array((Array_
    " ODBC ;DSN=MS Acces Database ;DBQ= x ; " _
    ),Array(_
    " DriverID=25 ;FIL=MS Acces ;MaxBufferSize=2048 ;PageTimeout=5 ; " _
    )),Destination:=Range(" A1" ))
    .CommandText = Array(_
    " SELECT ‘ panne’  etc…(arrive le code classique d’une requète, FROM blabla, et autres paramètres)
    Mais où viens mon problème, c’est que là où est écrit le x, il faut normalement écrire l’adresse de la base de données. Or ici x, en temps que variable contient ce chemin, mais Excel interprète ce x comme la lettre de l’alphabet, sans lire son contenu ! Donc Excel tente d’ouvrir une base de données situé dans le repertoire courant ayant pour nom x (arf)

    Piste2 :
    Pour contrer ce problème, j’ai donc décidé dans le programme de changer le repertoire courant. Dans le fichier .ini, je vais lire le repertoire contenant la base de données, puis je remplace le repertoire courant par cette adresse. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chdrive " la lettre du disc contenant la base de données" 
    ChDir " le chemin du repertoire de la base de données "
    Et donc, à la place du x précédent, dans la requète, il suffit d’écrire le nom de la base de données (fixe pour tous les utilisateur). Ainsi, le programme est capable d’ouvrir une base de données situé n’importe où et d'y effectuer la requète.

    Mais encore problème…Après l’instruction ChDrive il faut écrire une lettre représentant le nom du disc contenant la base de données (C, D etc…)
    Or dans mon cas, sur le réseau, les disc durs, de nom C, E etc... ont des « surnoms » (je connais pas le terme exacte). En fait C : équivaut à \\Vps\test et E: équivaut à \\Vpc01\essai (par exemple), et ce sont ces surnoms qui doivent être utilisés (vive les complications…)
    Or ChDir "\\Vps\test" ne fonctionne pas.
    Donc il m’est impossible de changer le repertoire courant…et donc ma méthode2 tombe à l’eau…

    Quelqu’un sait il donc :
    -Soit substituer à x son contenu dans la requète (méthode 1)
    -Soit Changer le repertoire courant, avec des discs ayant des noms commencant par \\ (Méthode2)


    Merci de votre lecture , et de vos éventuelles propositions !
    A bientôt
    PS: je n'ai pas trouvé de sujets similaires

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Déjà piste 1 :
    pour utiliser une varible pour générer ta requête il faut la sortir des " ... du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ActiveSheet.QueryTables.Add(Connection :=Array((Array_
    " ODBC ;DSN=MS Acces Database ;DBQ=" &  x & "  ; " _
    ),Array(_

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Arf, suis-je bête, il me semble ne pas avoir essayé ceci...

    Merci du conseil, j'essairai ça Lundi...(vive le pont )

Discussions similaires

  1. [Toutes versions] Requête SQL avec VBA qui ne retourne rien
    Par Roums dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/01/2011, 10h37
  2. Réponses: 1
    Dernier message: 24/06/2010, 18h31
  3. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 16h15
  4. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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