OVH Cloud OVH Cloud

Problème de pilote ODBC

16 réponses
Avatar
Thierry LOUCHET
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

6 réponses

1 2
Avatar
Thierry LOUCHET
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é, 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;UID­min;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;UID­min;

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


de
news:
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'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" a écrit dans le
message


de 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




de
news: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






message
de news: #
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































Avatar
Denis Michon
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é, 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;UID­min;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;UID­min;

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


de
news:
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'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" a écrit dans le
message


de 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




de
news: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






message
de news: #
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































Avatar
Thierry LOUCHET
Bonjour Denis,

La ligne qui affiche le compteur renvoi 0, cela veut dire qu'il n'y a pas
d'objet 'QueryTable' ???

Dans la construction de mon tableau croisé dynamique, je ne rentre jamais
dans la fenêtr de Query (c'est peut être pour cela que je n'ai pas d'objet
QueryTable).
Mais mon tableau croisé dynamique marche pourtant correctement (Sauf que je
voudrais bien réussir à lui changer de db, si je le souhaite).
Comme tu me dis que cela s'inscrit dans le classeur, je voudrais pouvoir
afficher et modifier ce lien.


Merci de ta patience et de ton aide.

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 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é, 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;UID­min;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;UID­min;

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


de
news:
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'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" a écrit dans le
message


de 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




de
news: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
message
de news: #
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




































Avatar
Thierry LOUCHET
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 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é, 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;UID­min;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;UID­min;

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


de
news:
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'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" a écrit dans le
message


de 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




de
news: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
message
de news: #
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




































Avatar
Denis Michon
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 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é, 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;UID­min;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;UID­min;

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


de
news:
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'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" a écrit dans le
message


de 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




de
news: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
message
de news: #
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




































Avatar
Thierry LOUCHET
Bonjour Denis,

Merci pour toutes tes informations et ta patience.

Je vais essayé de continuer mes investigations.

Thierry
"Denis Michon" a écrit dans le message de
news:Hw5tb.33078$
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 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é, 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;UID­min;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;UID­min;

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


de
news:
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'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" a écrit dans le
message


de 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




de
news: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
message
de news: #
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









































1 2