l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, ce
fichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel a
enregistré ces informations dans le classeur
lui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec ce
dernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir (ouvrir)
la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre de
Query était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que l'on
décide de modifier le nom du Fichier source
des données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQuery
retrouve sa fonctionnalité. Et comme ces données ne sont pas visibles dans
une cellule, on peut les retrouver à l'aide
d'une procédure.
Voici une macro qui devrait faire le travail pour toutes les "QueryTable"
contenus dans un classeur. Évidemment cela
suppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)
Pour ceux qui ont une version antérieure à Excel 2000, ils doivent
utiliser "Application.Substitute(...) en lieu
et place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci :
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.Pays
FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source de
la requête. Si l'on doit changer son nom, il
est normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est le
même principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machine
où cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il utilise
le
dsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
par
erreur je n'ai pas récréer la même structure c'est à dire le même dossier
de
stockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le message de
news:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
message
denews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit dans
le
messagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
qui
dispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même Windows,
alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
non
trouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai de
refairelelien, j'ai aussi ces messages d'erreurs. Comment puis je faire
pourrétablirou refaire un lien ? Ou comment puis je trouver le chemin au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS et
EXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les erreurs),
j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, ce
fichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel a
enregistré ces informations dans le classeur
lui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec ce
dernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir (ouvrir)
la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre de
Query était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que l'on
décide de modifier le nom du Fichier source
des données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQuery
retrouve sa fonctionnalité. Et comme ces données ne sont pas visibles dans
une cellule, on peut les retrouver à l'aide
d'une procédure.
Voici une macro qui devrait faire le travail pour toutes les "QueryTable"
contenus dans un classeur. Évidemment cela
suppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)
Pour ceux qui ont une version antérieure à Excel 2000, ils doivent
utiliser "Application.Substitute(...) en lieu
et place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci :
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.Pays
FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source de
la requête. Si l'on doit changer son nom, il
est normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est le
même principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le message
de
news:uGcnXbPqDHA.2012@TK2MSFTNGP12.phx.gbl...
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machine
où cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il utilise
le
dsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
par
erreur je n'ai pas récréer la même structure c'est à dire le même dossier
de
stockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:Z%Srb.27869$Ng3.22694@charlie.risq.qc.ca...
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:uWkMP67pDHA.3180@TK2MSFTNGP11.phx.gbl...
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le message de
news:eNvtcN3pDHA.1728@TK2MSFTNGP09.phx.gbl...
arréte de poser la méme question sur les news excel et access ,
j'attrape
le tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de news: etPwuJ3pDHA.2676@TK2MSFTNGP11.phx.gbl...
Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le
message
de
news:ejX4$BtpDHA.2440@TK2MSFTNGP10.phx.gbl...
bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" <pabd@wanadoo.fr> a écrit dans le message de news:
#flJO6spDHA.1656@tk2msftngp13.phx.gbl...
Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans
le
message
de news: #IlmHZspDHA.2820@TK2MSFTNGP10.phx.gbl...
Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichier
EXCEL
2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamique
qui
utilise des données stockées dans ma base ACCESS 2000.(En
passant
par
source
externe au niveau de la création de Tableau croisé dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
qui
dispose de
ACCESS 2000 et EXCEL 2000 mais pas forcément le même Windows,
alors
quand
j'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
non
trouvée et
nom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai de
refaire
le
lien, j'ai aussi ces messages d'erreurs. Comment puis je faire
pour
rétablir
ou refaire un lien ? Ou comment puis je trouver le chemin au
ficiher
source
?
(J'ai biensur fait attention de copier les fichiers ACCESS et
EXCEL
dans
le
même dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les erreurs),
j'essai
dans
un nouveau classeur de Excel de refaire le Tableau croisé
dynamique,
je
n'ai
aucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, ce
fichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel a
enregistré ces informations dans le classeur
lui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec ce
dernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir (ouvrir)
la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre de
Query était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que l'on
décide de modifier le nom du Fichier source
des données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQuery
retrouve sa fonctionnalité. Et comme ces données ne sont pas visibles dans
une cellule, on peut les retrouver à l'aide
d'une procédure.
Voici une macro qui devrait faire le travail pour toutes les "QueryTable"
contenus dans un classeur. Évidemment cela
suppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)
Pour ceux qui ont une version antérieure à Excel 2000, ils doivent
utiliser "Application.Substitute(...) en lieu
et place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci :
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.Pays
FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source de
la requête. Si l'on doit changer son nom, il
est normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est le
même principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machine
où cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il utilise
le
dsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
par
erreur je n'ai pas récréer la même structure c'est à dire le même dossier
de
stockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le message de
news:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
message
denews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit dans
le
messagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
qui
dispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même Windows,
alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
non
trouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai de
refairelelien, j'ai aussi ces messages d'erreurs. Comment puis je faire
pourrétablirou refaire un lien ? Ou comment puis je trouver le chemin au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS et
EXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les erreurs),
j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, ce
fichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel a
enregistré ces informations dans le classeur
lui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec ce
dernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir (ouvrir)
la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre de
Query était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que l'on
décide de modifier le nom du Fichier source
des données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQuery
retrouve sa fonctionnalité. Et comme ces données ne sont pas visibles dans
une cellule, on peut les retrouver à l'aide
d'une procédure.
Voici une macro qui devrait faire le travail pour toutes les "QueryTable"
contenus dans un classeur. Évidemment cela
suppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)
Pour ceux qui ont une version antérieure à Excel 2000, ils doivent
utiliser "Application.Substitute(...) en lieu
et place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci :
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.Pays
FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source de
la requête. Si l'on doit changer son nom, il
est normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est le
même principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machine
où cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il utilise
le
dsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
par
erreur je n'ai pas récréer la même structure c'est à dire le même dossier
de
stockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le message de
news:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
message
denews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit dans
le
messagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
qui
dispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même Windows,
alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
non
trouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai de
refairelelien, j'ai aussi ces messages d'erreurs. Comment puis je faire
pourrétablirou refaire un lien ? Ou comment puis je trouver le chemin au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS et
EXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les erreurs),
j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, ce
fichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel a
enregistré ces informations dans le classeur
lui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec ce
dernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir (ouvrir)
la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre de
Query était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que l'on
décide de modifier le nom du Fichier source
des données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQuery
retrouve sa fonctionnalité. Et comme ces données ne sont pas visibles dans
une cellule, on peut les retrouver à l'aide
d'une procédure.
Voici une macro qui devrait faire le travail pour toutes les "QueryTable"
contenus dans un classeur. Évidemment cela
suppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)
Pour ceux qui ont une version antérieure à Excel 2000, ils doivent
utiliser "Application.Substitute(...) en lieu
et place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci :
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.Pays
FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source de
la requête. Si l'on doit changer son nom, il
est normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est le
même principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le message
de
news:uGcnXbPqDHA.2012@TK2MSFTNGP12.phx.gbl...
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machine
où cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il utilise
le
dsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
par
erreur je n'ai pas récréer la même structure c'est à dire le même dossier
de
stockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:Z%Srb.27869$Ng3.22694@charlie.risq.qc.ca...
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:uWkMP67pDHA.3180@TK2MSFTNGP11.phx.gbl...
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le message de
news:eNvtcN3pDHA.1728@TK2MSFTNGP09.phx.gbl...
arréte de poser la méme question sur les news excel et access ,
j'attrape
le tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de news: etPwuJ3pDHA.2676@TK2MSFTNGP11.phx.gbl...
Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le
message
de
news:ejX4$BtpDHA.2440@TK2MSFTNGP10.phx.gbl...
bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" <pabd@wanadoo.fr> a écrit dans le message de news:
#flJO6spDHA.1656@tk2msftngp13.phx.gbl...
Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans
le
message
de news: #IlmHZspDHA.2820@TK2MSFTNGP10.phx.gbl...
Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichier
EXCEL
2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamique
qui
utilise des données stockées dans ma base ACCESS 2000.(En
passant
par
source
externe au niveau de la création de Tableau croisé dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
qui
dispose de
ACCESS 2000 et EXCEL 2000 mais pas forcément le même Windows,
alors
quand
j'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
non
trouvée et
nom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai de
refaire
le
lien, j'ai aussi ces messages d'erreurs. Comment puis je faire
pour
rétablir
ou refaire un lien ? Ou comment puis je trouver le chemin au
ficiher
source
?
(J'ai biensur fait attention de copier les fichiers ACCESS et
EXCEL
dans
le
même dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les erreurs),
j'essai
dans
un nouveau classeur de Excel de refaire le Tableau croisé
dynamique,
je
n'ai
aucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, ce
fichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel a
enregistré ces informations dans le classeur
lui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec ce
dernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir (ouvrir)
la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre de
Query était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que l'on
décide de modifier le nom du Fichier source
des données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQuery
retrouve sa fonctionnalité. Et comme ces données ne sont pas visibles dans
une cellule, on peut les retrouver à l'aide
d'une procédure.
Voici une macro qui devrait faire le travail pour toutes les "QueryTable"
contenus dans un classeur. Évidemment cela
suppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)
Pour ceux qui ont une version antérieure à Excel 2000, ils doivent
utiliser "Application.Substitute(...) en lieu
et place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci :
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.Pays
FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source de
la requête. Si l'on doit changer son nom, il
est normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est le
même principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machine
où cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il utilise
le
dsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
par
erreur je n'ai pas récréer la même structure c'est à dire le même dossier
de
stockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le message de
news:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
message
denews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit dans
le
messagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
qui
dispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même Windows,
alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
non
trouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai de
refairelelien, j'ai aussi ces messages d'erreurs. Comment puis je faire
pourrétablirou refaire un lien ? Ou comment puis je trouver le chemin au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS et
EXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les erreurs),
j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans le
menu fichier de la fenêtre query, la possibilité de créer un CubOle qui va
desservir directement un tableau croisé
dynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne parlons
pas du même objet... même si dans les 2 cas,
ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3
..etc. à chaque fois que tu crées un querytables, l'index augmente de 1 .
Si tu préfères, tu peux remplacer l'index par
son nom complet. Il se peut aussi qu'une des feuilles que tu utilises dans
la procédure n'existe pas ... ou tu as un
problème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquer
sans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:Oh$
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères chargée
d'établir (ouvrir) la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" a écrit dans le message de
news:afrsb.28765$Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, cefichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel
a
enregistré ces informations dans le classeurlui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec cedernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)
la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre deQuery était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'on
décide de modifier le nom du Fichier sourcedes données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQueryretrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dans
une cellule, on peut les retrouver à l'aided'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"
contenus dans un classeur. Évidemment celasuppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)Pour ceux qui ont une version antérieure à Excel 2000, ils
doivent
utiliser "Application.Substitute(...) en lieuet place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.PaysFROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source
de
la requête. Si l'on doit changer son nom, ilest normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est lemême principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machineoù cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utilise
ledsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
parerreur je n'ai pas récréer la même structure c'est à dire le même
dossier
destockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
messagedenews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le message
de
news:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
messagedenews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit
dans
lemessagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
quidispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,
alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
nontrouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
de
refairelelien, j'ai aussi ces messages d'erreurs. Comment puis je
faire
pourrétablirou refaire un lien ? Ou comment puis je trouver le chemin au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS
et
EXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),
j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans le
menu fichier de la fenêtre query, la possibilité de créer un CubOle qui va
desservir directement un tableau croisé
dynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne parlons
pas du même objet... même si dans les 2 cas,
ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3
..etc. à chaque fois que tu crées un querytables, l'index augmente de 1 .
Si tu préfères, tu peux remplacer l'index par
son nom complet. Il se peut aussi qu'une des feuilles que tu utilises dans
la procédure n'existe pas ... ou tu as un
problème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquer
sans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le message
de
news:Oh$bEbfqDHA.2000@TK2MSFTNGP12.phx.gbl...
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères chargée
d'établir (ouvrir) la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:afrsb.28765$Ng3.22881@charlie.risq.qc.ca...
Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, ce
fichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel
a
enregistré ces informations dans le classeur
lui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec ce
dernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)
la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre de
Query était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'on
décide de modifier le nom du Fichier source
des données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQuery
retrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dans
une cellule, on peut les retrouver à l'aide
d'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"
contenus dans un classeur. Évidemment cela
suppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)
Pour ceux qui ont une version antérieure à Excel 2000, ils
doivent
utiliser "Application.Substitute(...) en lieu
et place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.Pays
FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source
de
la requête. Si l'on doit changer son nom, il
est normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est le
même principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:uGcnXbPqDHA.2012@TK2MSFTNGP12.phx.gbl...
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machine
où cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utilise
le
dsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
par
erreur je n'ai pas récréer la même structure c'est à dire le même
dossier
de
stockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:Z%Srb.27869$Ng3.22694@charlie.risq.qc.ca...
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:uWkMP67pDHA.3180@TK2MSFTNGP11.phx.gbl...
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le message
de
news:eNvtcN3pDHA.1728@TK2MSFTNGP09.phx.gbl...
arréte de poser la méme question sur les news excel et access ,
j'attrape
le tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de news: etPwuJ3pDHA.2676@TK2MSFTNGP11.phx.gbl...
Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le
message
de
news:ejX4$BtpDHA.2440@TK2MSFTNGP10.phx.gbl...
bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" <pabd@wanadoo.fr> a écrit dans le message de news:
#flJO6spDHA.1656@tk2msftngp13.phx.gbl...
Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit
dans
le
message
de news: #IlmHZspDHA.2820@TK2MSFTNGP10.phx.gbl...
Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichier
EXCEL
2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamique
qui
utilise des données stockées dans ma base ACCESS 2000.(En
passant
par
source
externe au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
qui
dispose de
ACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,
alors
quand
j'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
non
trouvée et
nom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
de
refaire
le
lien, j'ai aussi ces messages d'erreurs. Comment puis je
faire
pour
rétablir
ou refaire un lien ? Ou comment puis je trouver le chemin au
ficiher
source
?
(J'ai biensur fait attention de copier les fichiers ACCESS
et
EXCEL
dans
le
même dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),
j'essai
dans
un nouveau classeur de Excel de refaire le Tableau croisé
dynamique,
je
n'ai
aucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans le
menu fichier de la fenêtre query, la possibilité de créer un CubOle qui va
desservir directement un tableau croisé
dynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne parlons
pas du même objet... même si dans les 2 cas,
ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3
..etc. à chaque fois que tu crées un querytables, l'index augmente de 1 .
Si tu préfères, tu peux remplacer l'index par
son nom complet. Il se peut aussi qu'une des feuilles que tu utilises dans
la procédure n'existe pas ... ou tu as un
problème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquer
sans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:Oh$
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères chargée
d'établir (ouvrir) la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" a écrit dans le message de
news:afrsb.28765$Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, cefichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel
a
enregistré ces informations dans le classeurlui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec cedernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)
la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre deQuery était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'on
décide de modifier le nom du Fichier sourcedes données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQueryretrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dans
une cellule, on peut les retrouver à l'aided'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"
contenus dans un classeur. Évidemment celasuppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)Pour ceux qui ont une version antérieure à Excel 2000, ils
doivent
utiliser "Application.Substitute(...) en lieuet place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.PaysFROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source
de
la requête. Si l'on doit changer son nom, ilest normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est lemême principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machineoù cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utilise
ledsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
parerreur je n'ai pas récréer la même structure c'est à dire le même
dossier
destockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
messagedenews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le message
de
news:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
messagedenews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit
dans
lemessagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
quidispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,
alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
nontrouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
de
refairelelien, j'ai aussi ces messages d'erreurs. Comment puis je
faire
pourrétablirou refaire un lien ? Ou comment puis je trouver le chemin au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS
et
EXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),
j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans le
menu fichier de la fenêtre query, la possibilité de créer un CubOle qui va
desservir directement un tableau croisé
dynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne parlons
pas du même objet... même si dans les 2 cas,
ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3
..etc. à chaque fois que tu crées un querytables, l'index augmente de 1 .
Si tu préfères, tu peux remplacer l'index par
son nom complet. Il se peut aussi qu'une des feuilles que tu utilises dans
la procédure n'existe pas ... ou tu as un
problème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquer
sans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:Oh$
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères chargée
d'établir (ouvrir) la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" a écrit dans le message de
news:afrsb.28765$Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, cefichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel
a
enregistré ces informations dans le classeurlui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec cedernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)
la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre deQuery était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'on
décide de modifier le nom du Fichier sourcedes données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQueryretrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dans
une cellule, on peut les retrouver à l'aided'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"
contenus dans un classeur. Évidemment celasuppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)Pour ceux qui ont une version antérieure à Excel 2000, ils
doivent
utiliser "Application.Substitute(...) en lieuet place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.PaysFROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source
de
la requête. Si l'on doit changer son nom, ilest normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est lemême principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machineoù cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utilise
ledsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
parerreur je n'ai pas récréer la même structure c'est à dire le même
dossier
destockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
messagedenews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le message
de
news:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
messagedenews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit
dans
lemessagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
quidispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,
alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
nontrouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
de
refairelelien, j'ai aussi ces messages d'erreurs. Comment puis je
faire
pourrétablirou refaire un lien ? Ou comment puis je trouver le chemin au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS
et
EXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),
j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans le
menu fichier de la fenêtre query, la possibilité de créer un CubOle qui va
desservir directement un tableau croisé
dynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne parlons
pas du même objet... même si dans les 2 cas,
ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3
..etc. à chaque fois que tu crées un querytables, l'index augmente de 1 .
Si tu préfères, tu peux remplacer l'index par
son nom complet. Il se peut aussi qu'une des feuilles que tu utilises dans
la procédure n'existe pas ... ou tu as un
problème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquer
sans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le message
de
news:Oh$bEbfqDHA.2000@TK2MSFTNGP12.phx.gbl...
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères chargée
d'établir (ouvrir) la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:afrsb.28765$Ng3.22881@charlie.risq.qc.ca...
Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, ce
fichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel
a
enregistré ces informations dans le classeur
lui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec ce
dernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)
la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre de
Query était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'on
décide de modifier le nom du Fichier source
des données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQuery
retrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dans
une cellule, on peut les retrouver à l'aide
d'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"
contenus dans un classeur. Évidemment cela
suppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)
Pour ceux qui ont une version antérieure à Excel 2000, ils
doivent
utiliser "Application.Substitute(...) en lieu
et place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.Pays
FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source
de
la requête. Si l'on doit changer son nom, il
est normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est le
même principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:uGcnXbPqDHA.2012@TK2MSFTNGP12.phx.gbl...
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machine
où cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utilise
le
dsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
par
erreur je n'ai pas récréer la même structure c'est à dire le même
dossier
de
stockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:Z%Srb.27869$Ng3.22694@charlie.risq.qc.ca...
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:uWkMP67pDHA.3180@TK2MSFTNGP11.phx.gbl...
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le message
de
news:eNvtcN3pDHA.1728@TK2MSFTNGP09.phx.gbl...
arréte de poser la méme question sur les news excel et access ,
j'attrape
le tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de news: etPwuJ3pDHA.2676@TK2MSFTNGP11.phx.gbl...
Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le
message
de
news:ejX4$BtpDHA.2440@TK2MSFTNGP10.phx.gbl...
bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" <pabd@wanadoo.fr> a écrit dans le message de news:
#flJO6spDHA.1656@tk2msftngp13.phx.gbl...
Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit
dans
le
message
de news: #IlmHZspDHA.2820@TK2MSFTNGP10.phx.gbl...
Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichier
EXCEL
2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamique
qui
utilise des données stockées dans ma base ACCESS 2000.(En
passant
par
source
externe au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
qui
dispose de
ACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,
alors
quand
j'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
non
trouvée et
nom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
de
refaire
le
lien, j'ai aussi ces messages d'erreurs. Comment puis je
faire
pour
rétablir
ou refaire un lien ? Ou comment puis je trouver le chemin au
ficiher
source
?
(J'ai biensur fait attention de copier les fichiers ACCESS
et
EXCEL
dans
le
même dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),
j'essai
dans
un nouveau classeur de Excel de refaire le Tableau croisé
dynamique,
je
n'ai
aucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans le
menu fichier de la fenêtre query, la possibilité de créer un CubOle qui va
desservir directement un tableau croisé
dynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne parlons
pas du même objet... même si dans les 2 cas,
ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3
..etc. à chaque fois que tu crées un querytables, l'index augmente de 1 .
Si tu préfères, tu peux remplacer l'index par
son nom complet. Il se peut aussi qu'une des feuilles que tu utilises dans
la procédure n'existe pas ... ou tu as un
problème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquer
sans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:Oh$
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères chargée
d'établir (ouvrir) la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" a écrit dans le message de
news:afrsb.28765$Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, cefichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel
a
enregistré ces informations dans le classeurlui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec cedernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)
la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre deQuery était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'on
décide de modifier le nom du Fichier sourcedes données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQueryretrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dans
une cellule, on peut les retrouver à l'aided'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"
contenus dans un classeur. Évidemment celasuppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)Pour ceux qui ont une version antérieure à Excel 2000, ils
doivent
utiliser "Application.Substitute(...) en lieuet place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.PaysFROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source
de
la requête. Si l'on doit changer son nom, ilest normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est lemême principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machineoù cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utilise
ledsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
parerreur je n'ai pas récréer la même structure c'est à dire le même
dossier
destockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
messagedenews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le message
de
news:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
messagedenews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit
dans
lemessagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
quidispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,
alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
nontrouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
de
refairelelien, j'ai aussi ces messages d'erreurs. Comment puis je
faire
pourrétablirou refaire un lien ? Ou comment puis je trouver le chemin au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS
et
EXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),
j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans le
menu fichier de la fenêtre query, la possibilité de créer un CubOle qui va
desservir directement un tableau croisé
dynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne parlons
pas du même objet... même si dans les 2 cas,
ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3
..etc. à chaque fois que tu crées un querytables, l'index augmente de 1 .
Si tu préfères, tu peux remplacer l'index par
son nom complet. Il se peut aussi qu'une des feuilles que tu utilises dans
la procédure n'existe pas ... ou tu as un
problème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquer
sans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:Oh$
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères chargée
d'établir (ouvrir) la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" a écrit dans le message de
news:afrsb.28765$Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, cefichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel
a
enregistré ces informations dans le classeurlui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec cedernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)
la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre deQuery était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'on
décide de modifier le nom du Fichier sourcedes données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQueryretrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dans
une cellule, on peut les retrouver à l'aided'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"
contenus dans un classeur. Évidemment celasuppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sa
vegarde au préalable)Pour ceux qui ont une version antérieure à Excel 2000, ils
doivent
utiliser "Application.Substitute(...) en lieuet place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.PaysFROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source
de
la requête. Si l'on doit changer son nom, ilest normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est lemême principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machineoù cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utilise
ledsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
parerreur je n'ai pas récréer la même structure c'est à dire le même
dossier
destockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
messagedenews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le message
de
news:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
messagedenews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit
dans
lemessagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
quidispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,
alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
nontrouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
de
refairelelien, j'ai aussi ces messages d'erreurs. Comment puis je
faire
pourrétablirou refaire un lien ? Ou comment puis je trouver le chemin au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS
et
EXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),
j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans le
menu fichier de la fenêtre query, la possibilité de créer un CubOle qui va
desservir directement un tableau croisé
dynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne parlons
pas du même objet... même si dans les 2 cas,
ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3
..etc. à chaque fois que tu crées un querytables, l'index augmente de 1 .
Si tu préfères, tu peux remplacer l'index par
son nom complet. Il se peut aussi qu'une des feuilles que tu utilises dans
la procédure n'existe pas ... ou tu as un
problème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquer
sans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le message
de
news:Oh$bEbfqDHA.2000@TK2MSFTNGP12.phx.gbl...
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères chargée
d'établir (ouvrir) la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:afrsb.28765$Ng3.22881@charlie.risq.qc.ca...
Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, ce
fichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel
a
enregistré ces informations dans le classeur
lui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec ce
dernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)
la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre de
Query était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'on
décide de modifier le nom du Fichier source
des données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQuery
retrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dans
une cellule, on peut les retrouver à l'aide
d'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"
contenus dans un classeur. Évidemment cela
suppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sa
vegarde au préalable)
Pour ceux qui ont une version antérieure à Excel 2000, ils
doivent
utiliser "Application.Substitute(...) en lieu
et place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.Pays
FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source
de
la requête. Si l'on doit changer son nom, il
est normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est le
même principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:uGcnXbPqDHA.2012@TK2MSFTNGP12.phx.gbl...
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machine
où cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utilise
le
dsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
par
erreur je n'ai pas récréer la même structure c'est à dire le même
dossier
de
stockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:Z%Srb.27869$Ng3.22694@charlie.risq.qc.ca...
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:uWkMP67pDHA.3180@TK2MSFTNGP11.phx.gbl...
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le message
de
news:eNvtcN3pDHA.1728@TK2MSFTNGP09.phx.gbl...
arréte de poser la méme question sur les news excel et access ,
j'attrape
le tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de news: etPwuJ3pDHA.2676@TK2MSFTNGP11.phx.gbl...
Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le
message
de
news:ejX4$BtpDHA.2440@TK2MSFTNGP10.phx.gbl...
bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" <pabd@wanadoo.fr> a écrit dans le message de news:
#flJO6spDHA.1656@tk2msftngp13.phx.gbl...
Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit
dans
le
message
de news: #IlmHZspDHA.2820@TK2MSFTNGP10.phx.gbl...
Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichier
EXCEL
2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamique
qui
utilise des données stockées dans ma base ACCESS 2000.(En
passant
par
source
externe au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
qui
dispose de
ACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,
alors
quand
j'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
non
trouvée et
nom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
de
refaire
le
lien, j'ai aussi ces messages d'erreurs. Comment puis je
faire
pour
rétablir
ou refaire un lien ? Ou comment puis je trouver le chemin au
ficiher
source
?
(J'ai biensur fait attention de copier les fichiers ACCESS
et
EXCEL
dans
le
même dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),
j'essai
dans
un nouveau classeur de Excel de refaire le Tableau croisé
dynamique,
je
n'ai
aucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans le
menu fichier de la fenêtre query, la possibilité de créer un CubOle qui va
desservir directement un tableau croisé
dynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne parlons
pas du même objet... même si dans les 2 cas,
ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3
..etc. à chaque fois que tu crées un querytables, l'index augmente de 1 .
Si tu préfères, tu peux remplacer l'index par
son nom complet. Il se peut aussi qu'une des feuilles que tu utilises dans
la procédure n'existe pas ... ou tu as un
problème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquer
sans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:Oh$
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères chargée
d'établir (ouvrir) la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" a écrit dans le message de
news:afrsb.28765$Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, cefichier DSN, n'est plus relié au QueryTable de ton fichier excel. Excel
a
enregistré ces informations dans le classeurlui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec cedernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)
la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...) lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant la
requête que l'on a créé lorsque la fenêtre deQuery était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'on
décide de modifier le nom du Fichier sourcedes données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQueryretrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dans
une cellule, on peut les retrouver à l'aided'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"
contenus dans un classeur. Évidemment celasuppose que les données proviennent de la même base de données source.
N.B. Je n'ai pas testé cette procédure expressément...Donc prudence !
(sa
vegarde au préalable)Pour ceux qui ont une version antérieure à Excel 2000, ils
doivent
utiliser "Application.Substitute(...) en lieuet place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.PaysFROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier source
de
la requête. Si l'on doit changer son nom, ilest normal que la mise à jour du querytable n'arrive pas à retrouver le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est lemême principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machineoù cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utilise
ledsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base si
parerreur je n'ai pas récréer la même structure c'est à dire le même
dossier
destockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
messagedenews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le message
de
news:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
messagedenews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit
dans
lemessagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre machine
quidispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,
alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants :
[Microsoft] [Gestionnaire de Pilote ODBC] source de données
nontrouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
de
refairelelien, j'ai aussi ces messages d'erreurs. Comment puis je
faire
pourrétablirou refaire un lien ? Ou comment puis je trouver le chemin au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS
et
EXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),
j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Peu importe la façon que tu t'y prends, le résultat dans ta feuille est
soit : un "QueryTable" ou un "PivotCache". Pour
obtenir directement un PivotCache, tu dois à un moment donné indiquer dans
l'une des fenêtres de l'assistant que tu
désires créer un tableau croisé dynamique.(cube Olap)
Dans les 2 cas, que tu affiches ou non les données dans la fenêtre de
Query ne change en rien à la problématique. De
plus, le classeur n'a pas besoin d'avoir été enregistré pour visualiser
les 2 propriétés "Connection et CommandText" des
objets spécifiés dans une cellule du classeur.
Voici une procédure qui s'applique soit à un Pivotcache ou à un QueryTable
pour retrouver les chaînes de ces 2
propriétés :
Si ton objet est un QueryTable :
Tu dois adapter le nom des feuilles et l'index de ton querytable.
Si tu fais un clic droit dans une cellule dans la plage du résultat de ton
querytable, et que tu choisisses dans le menu
contextuel "Propriété", tu vas pouvoir visualiser le nom complet du
querytable. Tu peux l'utiliser en lieu et place de
l'index dans le code.
'------------------------
Sub UnQueryTable()
With Worksheets("Feuil2")
.Range("A1") = Worksheets("Feuil1").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil1").QueryTables(1).CommandText
End With
End Sub
Si c'est un PivotCache : Pour obtenir le nom du tableau croisé dynamique,
tu peux cliquer sur le bouton "Tableau croisé
dynamique" de la barre d'outils du même nom, et choisir dans le sous-menu
:: "Option de la table..." Le nom complet
peut être utilisé à la place de l'index pour identifier correctement le
"PivotCaches" dans la procédure.
'------------------------
Sub UnPivotCache()
With Worksheets("Feuil2")
.Range("A1") = ThisWorkbook.PivotCaches(1).Connection
.Range("A5") = ThisWorkbook.PivotCaches(1).CommandText
End With
End Sub
'------------------------
C'était ma dernière intervention sur ce fil. Je crois sincèrement avoir
fait le tour de la question.! Au besoin,
d'autres pourront apporter leur lumière sur la question.
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:
Rebonjour,
J'ai réussi à obtenir des informations sur les propriétés connection et
commandtext, si je crée une requête et que sur une feuille par la commande
source de données externes, j'appelle la requête en question pour insérer
les lignes.
Mais ce n'est pas comme cela que je construit mes tableaux croisés
dynamiques.
Moi j'utilise l'assistant, je prends une source de données externe, je
fais
récupérer le DSN que j'ai au préalable crée, je choisi les champs que je
souhaite, puis à la dernière étape je choisi "Renvoyer les données vers
Excel".
donc dans ce cas je ne construit pas de requête, donc il me paraît normal
que mon compteur affiche 0, et que je ne puisse accéder à querytables(1)
ou
autre car il n'y a pas de requête.
Mais cela ne résoud pas mon pb de départ.
A suivre.
Thierry
"Denis Michon" a écrit dans le message de
news:6RNsb.29113$Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans lemenu fichier de la fenêtre query, la possibilité de créer un CubOle qui
va
desservir directement un tableau croisédynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne
parlons
pas du même objet... même si dans les 2 cas,ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3..etc. à chaque fois que tu crées un querytables, l'index augmente de 1
.
Si tu préfères, tu peux remplacer l'index parson nom complet. Il se peut aussi qu'une des feuilles que tu utilises
dans
la procédure n'existe pas ... ou tu as unproblème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquersans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:Oh$
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères
chargée
d'établir (ouvrir) la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...)
lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc
à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si
je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application
ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" a écrit dans le message de
news:afrsb.28765$Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, cefichier DSN, n'est plus relié au QueryTable de ton fichier excel.
Excel
aenregistré ces informations dans le classeurlui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec cedernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...)
lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant
la
requête que l'on a créé lorsque la fenêtre deQuery était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'ondécide de modifier le nom du Fichier sourcedes données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQueryretrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dansune cellule, on peut les retrouver à l'aided'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"contenus dans un classeur. Évidemment celasuppose que les données proviennent de la même base de données source.
N.B. Je
'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)Pour ceux qui ont une version antérieure à Excel 2000, ils
doiventutiliser "Application.Substitute(...) en lieuet place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à
ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.PaysFROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier
source
dela requête. Si l'on doit changer son nom, ilest normal que la mise à jour du querytable n'arrive pas à retrouver
le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est lemême principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le
messagedenews:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machineoù cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utiliseledsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non
trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base
si
parerreur je n'ai pas récréer la même structure c'est à dire le même
dossierdestockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
messagedenews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le
message
denews:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
messagedenews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre
machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit
danslemessagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et
un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau
croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre
machine
quidispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants
:
[Microsoft] [Gestionnaire de Pilote ODBC] source de
données
nontrouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
derefairelelien, j'ai aussi ces messages d'erreurs. Comment puis je
fairepourrétablirou refaire un lien ? Ou comment puis je trouver le chemin
au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS
etEXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Peu importe la façon que tu t'y prends, le résultat dans ta feuille est
soit : un "QueryTable" ou un "PivotCache". Pour
obtenir directement un PivotCache, tu dois à un moment donné indiquer dans
l'une des fenêtres de l'assistant que tu
désires créer un tableau croisé dynamique.(cube Olap)
Dans les 2 cas, que tu affiches ou non les données dans la fenêtre de
Query ne change en rien à la problématique. De
plus, le classeur n'a pas besoin d'avoir été enregistré pour visualiser
les 2 propriétés "Connection et CommandText" des
objets spécifiés dans une cellule du classeur.
Voici une procédure qui s'applique soit à un Pivotcache ou à un QueryTable
pour retrouver les chaînes de ces 2
propriétés :
Si ton objet est un QueryTable :
Tu dois adapter le nom des feuilles et l'index de ton querytable.
Si tu fais un clic droit dans une cellule dans la plage du résultat de ton
querytable, et que tu choisisses dans le menu
contextuel "Propriété", tu vas pouvoir visualiser le nom complet du
querytable. Tu peux l'utiliser en lieu et place de
l'index dans le code.
'------------------------
Sub UnQueryTable()
With Worksheets("Feuil2")
.Range("A1") = Worksheets("Feuil1").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil1").QueryTables(1).CommandText
End With
End Sub
Si c'est un PivotCache : Pour obtenir le nom du tableau croisé dynamique,
tu peux cliquer sur le bouton "Tableau croisé
dynamique" de la barre d'outils du même nom, et choisir dans le sous-menu
:: "Option de la table..." Le nom complet
peut être utilisé à la place de l'index pour identifier correctement le
"PivotCaches" dans la procédure.
'------------------------
Sub UnPivotCache()
With Worksheets("Feuil2")
.Range("A1") = ThisWorkbook.PivotCaches(1).Connection
.Range("A5") = ThisWorkbook.PivotCaches(1).CommandText
End With
End Sub
'------------------------
C'était ma dernière intervention sur ce fil. Je crois sincèrement avoir
fait le tour de la question.! Au besoin,
d'autres pourront apporter leur lumière sur la question.
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le message
de
news:ORPgF0qqDHA.2500@TK2MSFTNGP10.phx.gbl...
Rebonjour,
J'ai réussi à obtenir des informations sur les propriétés connection et
commandtext, si je crée une requête et que sur une feuille par la commande
source de données externes, j'appelle la requête en question pour insérer
les lignes.
Mais ce n'est pas comme cela que je construit mes tableaux croisés
dynamiques.
Moi j'utilise l'assistant, je prends une source de données externe, je
fais
récupérer le DSN que j'ai au préalable crée, je choisi les champs que je
souhaite, puis à la dernière étape je choisi "Renvoyer les données vers
Excel".
donc dans ce cas je ne construit pas de requête, donc il me paraît normal
que mon compteur affiche 0, et que je ne puisse accéder à querytables(1)
ou
autre car il n'y a pas de requête.
Mais cela ne résoud pas mon pb de départ.
A suivre.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:6RNsb.29113$Ng3.28977@charlie.risq.qc.ca...
Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans le
menu fichier de la fenêtre query, la possibilité de créer un CubOle qui
va
desservir directement un tableau croisé
dynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne
parlons
pas du même objet... même si dans les 2 cas,
ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3
..etc. à chaque fois que tu crées un querytables, l'index augmente de 1
.
Si tu préfères, tu peux remplacer l'index par
son nom complet. Il se peut aussi qu'une des feuilles que tu utilises
dans
la procédure n'existe pas ... ou tu as un
problème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquer
sans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:Oh$bEbfqDHA.2000@TK2MSFTNGP12.phx.gbl...
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères
chargée
d'établir (ouvrir) la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...)
lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc
à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si
je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application
ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:afrsb.28765$Ng3.22881@charlie.risq.qc.ca...
Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, ce
fichier DSN, n'est plus relié au QueryTable de ton fichier excel.
Excel
a
enregistré ces informations dans le classeur
lui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec ce
dernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)
la connection entre la base des données à
l'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...)
lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant
la
requête que l'on a créé lorsque la fenêtre de
Query était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'on
décide de modifier le nom du Fichier source
des données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQuery
retrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dans
une cellule, on peut les retrouver à l'aide
d'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"
contenus dans un classeur. Évidemment cela
suppose que les données proviennent de la même base de données source.
N.B. Je
'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)
Pour ceux qui ont une version antérieure à Excel 2000, ils
doivent
utiliser "Application.Substitute(...) en lieu
et place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à
ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.Pays
FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier
source
de
la requête. Si l'on doit changer son nom, il
est normal que la mise à jour du querytable n'arrive pas à retrouver
le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est le
même principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:uGcnXbPqDHA.2012@TK2MSFTNGP12.phx.gbl...
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machine
où cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utilise
le
dsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non
trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base
si
par
erreur je n'ai pas récréer la même structure c'est à dire le même
dossier
de
stockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" <denis.michon@cgocable.ca> a écrit dans le message de
news:Z%Srb.27869$Ng3.22694@charlie.risq.qc.ca...
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de
news:uWkMP67pDHA.3180@TK2MSFTNGP11.phx.gbl...
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le
message
de
news:eNvtcN3pDHA.1728@TK2MSFTNGP09.phx.gbl...
arréte de poser la méme question sur les news excel et access ,
j'attrape
le tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit dans le
message
de news: etPwuJ3pDHA.2676@TK2MSFTNGP11.phx.gbl...
Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" <XXX_pierresalaun@aol.com> a écrit dans le
message
de
news:ejX4$BtpDHA.2440@TK2MSFTNGP10.phx.gbl...
bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre
machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" <pabd@wanadoo.fr> a écrit dans le message de news:
#flJO6spDHA.1656@tk2msftngp13.phx.gbl...
Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" <thierry.louchet@libertysurf.fr> a écrit
dans
le
message
de news: #IlmHZspDHA.2820@TK2MSFTNGP10.phx.gbl...
Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et
un
fichier
EXCEL
2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau
croisé
dynamique
qui
utilise des données stockées dans ma base ACCESS 2000.(En
passant
par
source
externe au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre
machine
qui
dispose de
ACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,
alors
quand
j'ouvre le fichier Excel, j'obtiens les messages suivants
:
[Microsoft] [Gestionnaire de Pilote ODBC] source de
données
non
trouvée et
nom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
de
refaire
le
lien, j'ai aussi ces messages d'erreurs. Comment puis je
faire
pour
rétablir
ou refaire un lien ? Ou comment puis je trouver le chemin
au
ficiher
source
?
(J'ai biensur fait attention de copier les fichiers ACCESS
et
EXCEL
dans
le
même dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),
j'essai
dans
un nouveau classeur de Excel de refaire le Tableau croisé
dynamique,
je
n'ai
aucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry
Bonjour Thierry,
Peu importe la façon que tu t'y prends, le résultat dans ta feuille est
soit : un "QueryTable" ou un "PivotCache". Pour
obtenir directement un PivotCache, tu dois à un moment donné indiquer dans
l'une des fenêtres de l'assistant que tu
désires créer un tableau croisé dynamique.(cube Olap)
Dans les 2 cas, que tu affiches ou non les données dans la fenêtre de
Query ne change en rien à la problématique. De
plus, le classeur n'a pas besoin d'avoir été enregistré pour visualiser
les 2 propriétés "Connection et CommandText" des
objets spécifiés dans une cellule du classeur.
Voici une procédure qui s'applique soit à un Pivotcache ou à un QueryTable
pour retrouver les chaînes de ces 2
propriétés :
Si ton objet est un QueryTable :
Tu dois adapter le nom des feuilles et l'index de ton querytable.
Si tu fais un clic droit dans une cellule dans la plage du résultat de ton
querytable, et que tu choisisses dans le menu
contextuel "Propriété", tu vas pouvoir visualiser le nom complet du
querytable. Tu peux l'utiliser en lieu et place de
l'index dans le code.
'------------------------
Sub UnQueryTable()
With Worksheets("Feuil2")
.Range("A1") = Worksheets("Feuil1").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil1").QueryTables(1).CommandText
End With
End Sub
Si c'est un PivotCache : Pour obtenir le nom du tableau croisé dynamique,
tu peux cliquer sur le bouton "Tableau croisé
dynamique" de la barre d'outils du même nom, et choisir dans le sous-menu
:: "Option de la table..." Le nom complet
peut être utilisé à la place de l'index pour identifier correctement le
"PivotCaches" dans la procédure.
'------------------------
Sub UnPivotCache()
With Worksheets("Feuil2")
.Range("A1") = ThisWorkbook.PivotCaches(1).Connection
.Range("A5") = ThisWorkbook.PivotCaches(1).CommandText
End With
End Sub
'------------------------
C'était ma dernière intervention sur ce fil. Je crois sincèrement avoir
fait le tour de la question.! Au besoin,
d'autres pourront apporter leur lumière sur la question.
Salutations!
"Thierry LOUCHET" a écrit dans le message
de
news:
Rebonjour,
J'ai réussi à obtenir des informations sur les propriétés connection et
commandtext, si je crée une requête et que sur une feuille par la commande
source de données externes, j'appelle la requête en question pour insérer
les lignes.
Mais ce n'est pas comme cela que je construit mes tableaux croisés
dynamiques.
Moi j'utilise l'assistant, je prends une source de données externe, je
fais
récupérer le DSN que j'ai au préalable crée, je choisi les champs que je
souhaite, puis à la dernière étape je choisi "Renvoyer les données vers
Excel".
donc dans ce cas je ne construit pas de requête, donc il me paraît normal
que mon compteur affiche 0, et que je ne puisse accéder à querytables(1)
ou
autre car il n'y a pas de requête.
Mais cela ne résoud pas mon pb de départ.
A suivre.
Thierry
"Denis Michon" a écrit dans le message de
news:6RNsb.29113$Bonjour Thierry,
Le code fournit est pour un objet "QueryTable" . Si tu as créé un
"CubOle" ,(lorsque tu es dans query, tu as dans lemenu fichier de la fenêtre query, la possibilité de créer un CubOle qui
va
desservir directement un tableau croisédynamique.
Il ne faut pas mélanger querytable et les "pivotCache"... nous ne
parlons
pas du même objet... même si dans les 2 cas,ils possèdent ces 2 propriétés (connection et commandtext).
Erreur 9 signifie que tu as un problème d'identification avec l'un des
objets de la feuille.
Exemple : dans mon code, j'utilise l'index 1 pour désigner le
QueryTables(1). Peut être que dans ton cas, c'est 2 ou 3..etc. à chaque fois que tu crées un querytables, l'index augmente de 1
.
Si tu préfères, tu peux remplacer l'index parson nom complet. Il se peut aussi qu'une des feuilles que tu utilises
dans
la procédure n'existe pas ... ou tu as unproblème d'orthographe ....
La connection se crée au moment que tu crées ton querytable.
Attention, il faut essayer de comprendre les procédures avant de les
appliquer... ce n'est pas une recette à appliquersans à toutes les sauces !!!
Salutations!
"Thierry LOUCHET" a écrit dans le
message
denews:Oh$
Désolé, mais c'est encore moi.
Il y a quelque chose qui me géne.
Quand tu parles > A ) Connection : C'est une chaîne de caractères
chargée
d'établir (ouvrir) la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...)
lors
de l'élaboration du QueryTable.
A quel moment crée t on la queryTable ?
J'ai fait un tableau croisé dynamique avec le DSN fichier, à la fin je
renvoi les données vers excel (dans une feuille nommée Feuil3).
J'ai fait une petite macro
Sub titi()
With Worksheets("Feuil1")
MsgBox Worksheets("Feuil3").QueryTables.Count
.Range("A1") = Worksheets("Feuil3").Name
.Range("A1") = Worksheets("Feuil3").QueryTables(1).Connection
.Range("A5") = Worksheets("Feuil3").QueryTables(1).CommandText
End With
End Sub
Quand s'affiche la boite de dialogue sur le compteur il affiche 0 (donc
à
priori par le QueryTable) et à l'éxécution de la ligne .Range("A1") > > Worksheets("Feuil3").QueryTables(1).Connection
il se produit l'erreur 9 L'indice n'appartient pas à la collection, (Si
je
met 0 à la palce de 1 : Erreur 1004 : Erreur définie par l'application
ou
l'objet)
Merci de ton aide.
Thierry
"Denis Michon" a écrit dans le message de
news:afrsb.28765$Bonjour Thierry,
Un fichier DSN sert à deux choses :
A ) Définir le fichier source des données
(chemin et le dit fichier)
B ) Définir le pilote associé au type de fichier
de ta source de données.
Il est habituellement stocké dans le répertoire suivant:
C:Program FilesFichiers communsODBCData Sources
Si tu veux tu peux facilement le créer par programmation
puiqu'il ne s'agit que d'un vulgaire fichier texte éditable avec
par exemple NotePad.exe ...
L'avantage de ce fichier dsn... il peut être facilement copié
sur un serveur réseau (ordinateur) et être ainsi disponible
à plusieurs utilisateurs qui pourront à leur tour définir
localement des requêtes....
Contenu d'un fichier .DSN
[ODBC]
DBQ=C:excelComptoir.mdb
DefaultDir=C:excel
Driver={Driver do Microsoft Access (*.mdb)}
DriverId%
FIL=MS Access
MaxBufferSize 48
MaxScanRows=8
PageTimeout=5
SafeTransactions=0
Threads=3
UserCommitSync=Yes
[Microsoft Office]
DefaultTable=Employés
Ce qu'il faut aussi savoir c'est lorsque ta requête dans excel a été
exécuté et que le fichier a été enregistré, cefichier DSN, n'est plus relié au QueryTable de ton fichier excel.
Excel
aenregistré ces informations dans le classeurlui-même. Toutes les modifications faites au fichier DSN n'aura aucune
incidence sur les fichiers déjà réalisés avec cedernier, seuls, les nouveaux en seront affectés.
Il y a deux "Propriétés essentielles" à un objet "ObjetQuery" :
A ) Connection : C'est une chaîne de caractères chargée d'établir
(ouvrir)la connection entre la base des données àl'aide du pilote que l'on a choisi (Access, Oracle, Excel, Sql ...)
lors
de l'élaboration du QueryTable.
B ) CommandText : C'est en fait une chaîne de caractères représentant
la
requête que l'on a créé lorsque la fenêtre deQuery était ouverte.
Lorsque le classeur possède des TableQuery déjà enregistré, et , que
l'ondécide de modifier le nom du Fichier sourcedes données, il faut obligatoirement modifier les 2 chaînes de texte
nommées précédemment pour que la TableQueryretrouve sa fonctionnalité. Et comme ces données ne sont pas visibles
dansune cellule, on peut les retrouver à l'aided'une procédure.
Voici une macro qui devrait faire le travail pour toutes les
"QueryTable"contenus dans un classeur. Évidemment celasuppose que les données proviennent de la même base de données source.
N.B. Je
'ai pas testé cette procédure expressément...Donc prudence !
(sauvegarde au préalable)Pour ceux qui ont une version antérieure à Excel 2000, ils
doiventutiliser "Application.Substitute(...) en lieuet place de la fonction "Replace()"; Cette dernière n'étant pas
disponible.
'-------------------------------------------
Sub Query_Et_NomFichierModifie()
Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable
' À saisir manuellement si nécessaire...
OldName = ThisWorkbook.FullName
NewName = "DTotoMonFichierQuery.xls"
For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
If InStr(Qt.Connection, OldName) > 0 Then
Qt.Connection = Replace(Qt.Connection, _
OldName, NewName)
Qt.CommandText = Replace(Qt.CommandText, _
Left(OldName, Len(OldName) - 4), _
Left(NewName, Len(NewName) - 3))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'-------------------------------------------
Si tu veux voir dans une cellule la chaîne de "Connection"
et la chaîne de "CommandText" d'un objet Query dans
une feuille nommée "Toto" dans mon exemple :
With Worksheets("Feuil1")
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With
Une chaîne de connection créé à partir d'un fichier DSN ressemble à
ceci
:
ODBC;DBQ=C:excelComptoir.mdb;DefaultDir=C:excel;Driver={Driver do
Microsoft Access (*.mdb)};DriverId%;FIL=MS
Access;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Thr
eads=3;UIDmin;UserCommitSync=Yes;
Une chaîne de connnection sans l'utilisation d'un fichier DSN
ODBC;DSN=MS Access Database;DBQ=c:Mes
documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MSAccess;MaxBufferSize 48;PageTime
out=5;ReadOnly=0;UIDmin;
Une Chaîne de "CommandText" ressemble à ceci :
SELECT Fournisseurs.Société, Fournisseurs.Adresse,
Fournisseurs.Ville, Fournisseurs.PaysFROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs
Observe dans les 2 cas, on retrouve le chemin complet du fichier
source
dela requête. Si l'on doit changer son nom, ilest normal que la mise à jour du querytable n'arrive pas à retrouver
le
fichier contenant les données source.
La procédure donnée dans ce message n'a que pour but de substituer la
partie de la chaîne qui a été modifiée. C'est lemême principe que de substituer une section d'une chaîne de caractères
dans une cellule avec une formule.
Salutations!
"Thierry LOUCHET" a écrit dans le
messagedenews:
Presque, on m'a aiguillé vers un DSN source de données fichier cela
marche.
Mais, je voudrais aller plus loin.
Sur un exemple, je viens de créer le dsn, puis j'ai transféré sur la
machineoù cela ne marchait pas.
Et c'est OK.
Maintenant, comment puis je modifier mon fichier Excel pour qu'il
utiliseledsn.
En effet, dans mon tableau croisé dynamique, si je demande à lire les
données il se produit toujours le message
[Microsoft] [Gestionnaire de Pilote ODBC] source de données non
trouvée
et je ne peux rien faire.
Suis je obliger de tout refaire ?
De même sur le fichier excel avec le dsn, là je peux changer la base
si
parerreur je n'ai pas récréer la même structure c'est à dire le même
dossierdestockage. Sinon je ne peux pas.
Merci.
Thierry
"Denis Michon" a écrit dans le message de
news:Z%Srb.27869$
Bonjour Thierry,
As-tu trouvé une réponse satisfaisante ?
Salutations!
"Thierry LOUCHET" a écrit dans le
messagedenews:
Je pose simplement les questions, sur les forums qui me paraissent
appropriés pour réussir à obtenir une réponse.
Est ce une faute ?
Thierry
"Pierre CFI [mvp]" a écrit dans le
message
denews:arréte de poser la méme question sur les news excel et access ,
j'attrapele tournis et JPS va dire que je bois ..o:)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Thierry LOUCHET" a écrit dans le
messagede news:Merci pour ta réponse.
Je n'ai jamais fait cela, peut tu me donner plus de détails.
Thierry
"Pierre CFI [mvp]" a écrit dans le
messagedenews:ejX4$bonjour
tu as pris l'option par défaut d'un fichier odbc sur machine
il faut faire un fichier dsn, que tu mettraq sur l'autre
machine
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Pascal" a écrit dans le message de news:
#Salut,
Normalement il te demande un login et un Pass Non?
"Thierry LOUCHET" a écrit
danslemessagede news: #Bonjour,
J'ai créé sur un poste de travail une base ACCESS 2000 et
un
fichierEXCEL2000.
Dans le fichier EXCEL 2000, j'ai construit un tableau
croisé
dynamiquequiutilise des données stockées dans ma base ACCESS 2000.(En
passantparsourceexterne au niveau de la création de Tableau croisé
dynamique)
Quand je transfére ces deux fichiers, sur une autre
machine
quidispose deACCESS 2000 et EXCEL 2000 mais pas forcément le même
Windows,alorsquandj'ouvre le fichier Excel, j'obtiens les messages suivants
:
[Microsoft] [Gestionnaire de Pilote ODBC] source de
données
nontrouvée etnom de pilote non spécifié.
Des problèmes sont apparus durant l'obtention des données.
Si je vais dans le tableau croisé dynamique et que j'essai
derefairelelien, j'ai aussi ces messages d'erreurs. Comment puis je
fairepourrétablirou refaire un lien ? Ou comment puis je trouver le chemin
au
ficihersource?
(J'ai biensur fait attention de copier les fichiers ACCESS
etEXCELdanslemême dossier que la machine où ils ont été créé).
Je précise aussi que si (sur la machine où j'ai les
erreurs),j'essaidansun nouveau classeur de Excel de refaire le Tableau croisé
dynamique,jen'aiaucun problème.
Merci si vous pouvez m'éclairer sur ces problèmes.
Thierry