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:
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 Open ThisWorkBook.Path & "\" & " monfichier.ini" For Input As #1 Line Input #1,x
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)
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)
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. :
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.
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 "
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
Partager