Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

Réponse
 
Outils de la discussion
Vieux 26/05/2006, 13h10   #1 (permalink)
Membre à l'essai
 
Date d'inscription: mai 2006
Messages: 46
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 :
 
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 :
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 :
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
Svart26 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 26/05/2006, 13h18   #2 (permalink)
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 42
Messages: 7 741
Envoyer un message via Skype™ à bbil
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 :
With ActiveSheet.QueryTables.Add(Connection :=Array((Array_
" ODBC ;DSN=MS Acces Database ;DBQ=" &  x & "  ; " _
),Array(_
__________________
bbil : Impératif "A LIRE AVANT DE POSTER"
bbil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 26/05/2006, 13h29   #3 (permalink)
Membre à l'essai
 
Date d'inscription: mai 2006
Messages: 46
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 )
Svart26 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS MS-OFFICEFAQs OFFICETUTORIELS OFFICELIVRES OFFICESOURCES VBA

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 14h52.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter
Copyright 2000-2009 www.developpez.com - Legal informations