OVH Cloud OVH Cloud

Comment changer les données source d'un lien ODBC

8 réponses
Avatar
coralie
Bonjour à tous

J'ai créé un tableau croisé dynamique, qui va chercher ses renseignement dans un fichier Fox-pro (a l'aide d'un lien ODBC). J'aimerais rediriger ma requête vers un autre fichier source, est-ce possible ou dois-je recréer une requête?

Merci pour votre aide

Corali

8 réponses

Avatar
isabelle
bonjour Coralie,

c'est le fichier .dsn que tu as changé de place ou le fichier source
(base) servant à créer le fichier .dsn

isabelle


Bonjour à tous!

J'ai créé un tableau croisé dynamique, qui va chercher ses renseignement dans un fichier Fox-pro (a l'aide d'un lien ODBC). J'aimerais rediriger ma requête vers un autre fichier source, est-ce possible ou dois-je recréer une requête??

Merci pour votre aide.

Coralie


Avatar
Coralie
Bonjour Isabelle

Merci déjà pour ta réponse
C'est le fichier source ,celui qui répertorie les informations du programme de comptabilité -> fox pro, d'ou je dois sortir les informations. Pour expliquer un peu plus en détail : j'ai fais ma requête sur l'exercice 2003 et il faudrait que je la fasse à présent sur l'exercice 2004 (deux fichier différents

Merci encore

Corali
Avatar
Coralie
Bonjour tout le monde

J'ai créé une base de données sous Excel qui va rechercher les données dans un fichier Foxpro à l'aide d'un lien ODBC
J'ai en premier créé une source de donnée, qu'on retrouve dans "Données, Données externes, Importer des données". Et je me suis appercu que Excel n'utilise pas ces fichiers. Ma questions était : est-ce que Excel enregistre automatiquement des nouveaux fichiers à la première utilisation de la requête??

Désolé si mon expliquation n'est pas très claire... mais je suis un peu perdu...

Merci d'avance

Corali
Avatar
michdenis
Bonjour Coralie,

On a tendance à mélanger 2 choses :

À) La source des données (définir)
B) L'Utilisation d'une source de données dans une requête spécifique pour un objet « QueryTable» ou « PivotCache»

**********LA SOURCE DES DONNÉES**************

Dans le panneau de configuration de ton ordinateur, après un clic sur l'icône « Sources de données (ODBC) », un fenêtre
s'ouvre et à partir de celle-ci, tu peux de définir 3 types de sources de données :(Elles peuvent être défini aussi
directement à partir d'Excel (barre de menu/données/ données externes /créer une requête - sans utiliser le panneau de
configuration)

À) Sources de données utilisateur

B) Sources de données Fichier

C ) Source de données système

La seule différence entre A et B, c'est l'endroit où les informations reliées à L'ODBC sont conservées. Pour une source
de données « Utilisateur », c'est la base de registre de l'ordinateur local qui joue le rôle de fichier DSN... c'est ce
pour quoi cette source de données créées sera disponible seulement à partir de cet ordinateur puisque l'information est
liée à la base de registre de ce dernier. L'utilisation d'un Fichier DSN permet une plus grande flexibilité et
disponibilité au niveau d'un réseau....

Pour ce qui est d'une source de données système, elle s'adresse à une base de données sécurisée comme les fichiers de
type. MDW pour l'accès avec mot de passe et avec une autorisation particulière pour un usager ou pour un groupe
d'usagers...

Que la source de données soit enregistrée dans la base de registre ou dans un fichier DSN, elle contient essentiellement
ce type d'informations :

A) définir le fichier source des données (chemin et ledit fichier)

B) définir le pilote associé au type de fichier de ta source de données.

Le contenu d'un fichier DSN ressemble à ceci ... c'est le même type d'informations qui sont enregistrées dans la base de
registre lorsqu'il n'y a pas de fichier DSN.

'---------------
[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
UID­mis
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize 48
FIL=MS Accès
DriverId%
DefaultDir=C:ODBC
DBQ=C : ODBCComptoir.mdb
» -- -- ------ ------ ------

Si tu voulais, tu pourrais facilement le créer par programmation puisqu'il ne s'agit que d'un vulgaire fichier texte
éditable avec par exemple NotePad.exe ...Évidemment, les éléments de ce fichier peuvent être modifiés... le cas
échéant... sans aucun problème...

L'avantage de ce fichier dsn... il peut être facilement copié sur un serveur réseau (ordinateur) et être ainsi
disponible à plusieurs utilisateurs qui à leur tour pourront définir localement des requêtes....Ils n'auront pas besoin
de réinventer la roue chaque fois!

De plus, si une modification doit être effectuée comme le changement du chemin du fichier source, il est possible
d'éditer et de modifier directement le fichier DSN. Toutes les NOUVELLES requêtes en tiendront compte...


**UTILISER LA SOURCE DES DONNÉES - DANS UN QUERYTABLE**

Lorsque l'on crée un « QueryTable» dans un classeur, il faut se rappeler que ce « QueryTable» s'enregistre dans le
fichier Excel au moment de la sauvegarde. Il y a deux « Propriétés essentielles » à un objet « ObjetQuery» :

1 ) Connexion : C'est une chaîne de caractères chargée d'établir (ouvrir) la connexion 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.

2 ) CommandText : C'est en fait une chaîne de caractères représentant la requête que l'on a créée lorsque la fenêtre de
Query était ouverte.

Lorsque le classeur possède des TableQuery déjà enregistrés, et, que l'on décide, de modifier le nom du Classeur 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 des 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 tous 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!
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 "Connexion" et la chaîne de "CommandText" d'un objet Query dans une
feuille nommée "Toto" dans mon exemple :

With Worksheets("Feuil1") 'Nom Feuille à redéfinir
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With

Une chaîne de connexion ressemble à ceci :
ODBC;DSN=MS Access Database;DBQ=c:Mes documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MS Access;MaxBufferSize 48;PageTimeout=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 sources.

La procédure donnée dans ce message n'a que pour but que 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.

Que ton ODBC soit utilisé dans le cas d'un "QueryTable" ou d'un "PivotCache" (.(cube Olap), c'est exactement le même
principe...ils possèdent tous les 2 les propriétés "Connexion" et "CommandText" sauf que l'objet auquel se réfère ces
propriétés est différent..

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 choisis 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
'------------------------



Salutations!







"coralie" a écrit dans le message de
news:
Bonjour à tous!

J'ai créé un tableau croisé dynamique, qui va chercher ses renseignement dans un fichier Fox-pro (a l'aide d'un lien
ODBC). J'aimerais rediriger ma requête vers un autre fichier source, est-ce possible ou dois-je recréer une requête??

Merci pour votre aide.

Coralie
Avatar
isabelle
merci à toi Denis pour cette belle et complete explication,
isabelle
nota: dit misange, tu la garde pour excelabo.


Bonjour Coralie,

On a tendance à mélanger 2 choses :

À) La source des données (définir)
B) L'Utilisation d'une source de données dans une requête spécifique pour un objet « QueryTable» ou « PivotCache»

**********LA SOURCE DES DONNÉES**************

Dans le panneau de configuration de ton ordinateur, après un clic sur l'icône « Sources de données (ODBC) », un fenêtre
s'ouvre et à partir de celle-ci, tu peux de définir 3 types de sources de données :(Elles peuvent être défini aussi
directement à partir d'Excel (barre de menu/données/ données externes /créer une requête - sans utiliser le panneau de
configuration)

À) Sources de données utilisateur

B) Sources de données Fichier

C ) Source de données système

La seule différence entre A et B, c'est l'endroit où les informations reliées à L'ODBC sont conservées. Pour une source
de données « Utilisateur », c'est la base de registre de l'ordinateur local qui joue le rôle de fichier DSN... c'est ce
pour quoi cette source de données créées sera disponible seulement à partir de cet ordinateur puisque l'information est
liée à la base de registre de ce dernier. L'utilisation d'un Fichier DSN permet une plus grande flexibilité et
disponibilité au niveau d'un réseau....

Pour ce qui est d'une source de données système, elle s'adresse à une base de données sécurisée comme les fichiers de
type. MDW pour l'accès avec mot de passe et avec une autorisation particulière pour un usager ou pour un groupe
d'usagers...

Que la source de données soit enregistrée dans la base de registre ou dans un fichier DSN, elle contient essentiellement
ce type d'informations :

A) définir le fichier source des données (chemin et ledit fichier)

B) définir le pilote associé au type de fichier de ta source de données.

Le contenu d'un fichier DSN ressemble à ceci ... c'est le même type d'informations qui sont enregistrées dans la base de
registre lorsqu'il n'y a pas de fichier DSN.

'---------------
[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
UID­mis
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize 48
FIL=MS Accès
DriverId%
DefaultDir=C:ODBC
DBQ=C : ODBCComptoir.mdb
» -- -- ------ ------ ------

Si tu voulais, tu pourrais facilement le créer par programmation puisqu'il ne s'agit que d'un vulgaire fichier texte
éditable avec par exemple NotePad.exe ...Évidemment, les éléments de ce fichier peuvent être modifiés... le cas
échéant... sans aucun problème...

L'avantage de ce fichier dsn... il peut être facilement copié sur un serveur réseau (ordinateur) et être ainsi
disponible à plusieurs utilisateurs qui à leur tour pourront définir localement des requêtes....Ils n'auront pas besoin
de réinventer la roue chaque fois!

De plus, si une modification doit être effectuée comme le changement du chemin du fichier source, il est possible
d'éditer et de modifier directement le fichier DSN. Toutes les NOUVELLES requêtes en tiendront compte...

**UTILISER LA SOURCE DES DONNÉES - DANS UN QUERYTABLE**

Lorsque l'on crée un « QueryTable» dans un classeur, il faut se rappeler que ce « QueryTable» s'enregistre dans le
fichier Excel au moment de la sauvegarde. Il y a deux « Propriétés essentielles » à un objet « ObjetQuery» :

1 ) Connexion : C'est une chaîne de caractères chargée d'établir (ouvrir) la connexion 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.

2 ) CommandText : C'est en fait une chaîne de caractères représentant la requête que l'on a créée lorsque la fenêtre de
Query était ouverte.

Lorsque le classeur possède des TableQuery déjà enregistrés, et, que l'on décide, de modifier le nom du Classeur 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 des 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 tous 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!
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 "Connexion" et la chaîne de "CommandText" d'un objet Query dans une
feuille nommée "Toto" dans mon exemple :

With Worksheets("Feuil1") 'Nom Feuille à redéfinir
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With

Une chaîne de connexion ressemble à ceci :
ODBC;DSN=MS Access Database;DBQ=c:Mes documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MS Access;MaxBufferSize 48;PageTimeout=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 sources.

La procédure donnée dans ce message n'a que pour but que 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.

Que ton ODBC soit utilisé dans le cas d'un "QueryTable" ou d'un "PivotCache" (.(cube Olap), c'est exactement le même
principe...ils possèdent tous les 2 les propriétés "Connexion" et "CommandText" sauf que l'objet auquel se réfère ces
propriétés est différent..

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 choisis 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
'------------------------

Salutations!

"coralie" a écrit dans le message de
news:
Bonjour à tous!

J'ai créé un tableau croisé dynamique, qui va chercher ses renseignement dans un fichier Fox-pro (a l'aide d'un lien
ODBC). J'aimerais rediriger ma requête vers un autre fichier source, est-ce possible ou dois-je recréer une requête??

Merci pour votre aide.

Coralie


Avatar
michdenis
Bonjour Isabelle,

Si je peux me permettre d'ajouter ce complément :

A )
Après leur création, les objets "QueryTable" ou "PivotCache" sont totalement indépendants du type de sources de données
utilisées. Les sources de données seront utiles pour les nouveaux QueryTable ou PivotCache ... mais ils sont totalement
inutiles pour les QueryTable ou PivotCache déjà définis.

Toute l'information dont a besoin un "QueryTable" ou "PivotCache" est enregistré dans le classeur au moment de la
sauvegarde. Les modifications faites à un fichier DSN ou directement dans la base de registre ne modifieront pas la
donne relative à ces objets.

B )
Il faut faire attention avec la procédure visant à modifier les chaînes de "Connexion" et "CommandText" d'un
"QueryTable" ou d'un "PivotCache". C'est une présentation générale de ce que pourrait être une procédure type. Dans le
détail, vous aurez sûrement remarqué que dans la chaîne de connection, on utilise le nom du fichier et son EXTENSION
comme ceci : DBQ=c:Mes documentsComptoir.mdb, l'extension du fichier dans la chaîne "CommandText" n'est pas inscrite
dans la chaîne de texte :" FROM `C:ODBCbernard 2Comptoir`.Fournisseurs Fournisseurs " La procédure suggérée ne fait
pas ce type de distinction... faudrait voir à l'adapter.

Pour ceux qui aurait tendance à trouver cela difficile, on peut simplifier le processus :

A ) Éditer la chaîne actuelle de connection dans la Cellule A1
B ) Éditer la chaîne actuelle de CommandText dans la Cellule A2
C ) Modifier parcimonieusement les informations concernant le changement de nom du fichier source et son nouveau chemin
le cas échéant directement dans les cellules A1 et A2.

D ) Réaffecter aux propriétés "Connection" et "CommandText" , les chaînes de texte modifiées.

Si on peut faire cela pour extraire les chaînes de connection et de CommandText :

With Worksheets("Feuil1") 'Nom Feuille à redéfinir
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A2") = Worksheets("Toto").QueryTables(1).CommandText
End With

Après avoir modifié manuellement les chaînes de caractères on peut faire ceci :

With Worksheets("Feuil1") 'Nom Feuille à redéfinir
Worksheets("Toto").QueryTables(1).Connection = .Range("A1")
Worksheets("Toto").QueryTables(1).CommandText =.Range("A2")
.QueryTables(1).Refresh False
End With

Les modifications seront conservées après l'enregistrement du fichier.


Je compte sur toi Isabelle pour définir et tester une procédure fiable et complète ...!

;-))


Bonne journée,


Salutations!







"isabelle" a écrit dans le message de news:
merci à toi Denis pour cette belle et complete explication,
isabelle
nota: dit misange, tu la garde pour excelabo.


Bonjour Coralie,

On a tendance à mélanger 2 choses :

À) La source des données (définir)
B) L'Utilisation d'une source de données dans une requête spécifique pour un objet « QueryTable» ou « PivotCache»

**********LA SOURCE DES DONNÉES**************

Dans le panneau de configuration de ton ordinateur, après un clic sur l'icône « Sources de données (ODBC) », un
fenêtre

s'ouvre et à partir de celle-ci, tu peux de définir 3 types de sources de données :(Elles peuvent être défini aussi
directement à partir d'Excel (barre de menu/données/ données externes /créer une requête - sans utiliser le panneau de
configuration)

À) Sources de données utilisateur

B) Sources de données Fichier

C ) Source de données système

La seule différence entre A et B, c'est l'endroit où les informations reliées à L'ODBC sont conservées. Pour une
source

de données « Utilisateur », c'est la base de registre de l'ordinateur local qui joue le rôle de fichier DSN... c'est
ce

pour quoi cette source de données créées sera disponible seulement à partir de cet ordinateur puisque l'information
est

liée à la base de registre de ce dernier. L'utilisation d'un Fichier DSN permet une plus grande flexibilité et
disponibilité au niveau d'un réseau....

Pour ce qui est d'une source de données système, elle s'adresse à une base de données sécurisée comme les fichiers de
type. MDW pour l'accès avec mot de passe et avec une autorisation particulière pour un usager ou pour un groupe
d'usagers...

Que la source de données soit enregistrée dans la base de registre ou dans un fichier DSN, elle contient
essentiellement

ce type d'informations :

A) définir le fichier source des données (chemin et ledit fichier)

B) définir le pilote associé au type de fichier de ta source de données.

Le contenu d'un fichier DSN ressemble à ceci ... c'est le même type d'informations qui sont enregistrées dans la base
de

registre lorsqu'il n'y a pas de fichier DSN.

'---------------
[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
UID­mis
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize 48
FIL=MS Accès
DriverId%
DefaultDir=C:ODBC
DBQ=C : ODBCComptoir.mdb
» -- -- ------ ------ ------

Si tu voulais, tu pourrais facilement le créer par programmation puisqu'il ne s'agit que d'un vulgaire fichier texte
éditable avec par exemple NotePad.exe ...Évidemment, les éléments de ce fichier peuvent être modifiés... le cas
échéant... sans aucun problème...

L'avantage de ce fichier dsn... il peut être facilement copié sur un serveur réseau (ordinateur) et être ainsi
disponible à plusieurs utilisateurs qui à leur tour pourront définir localement des requêtes....Ils n'auront pas
besoin

de réinventer la roue chaque fois!

De plus, si une modification doit être effectuée comme le changement du chemin du fichier source, il est possible
d'éditer et de modifier directement le fichier DSN. Toutes les NOUVELLES requêtes en tiendront compte...

**UTILISER LA SOURCE DES DONNÉES - DANS UN QUERYTABLE**

Lorsque l'on crée un « QueryTable» dans un classeur, il faut se rappeler que ce « QueryTable» s'enregistre dans le
fichier Excel au moment de la sauvegarde. Il y a deux « Propriétés essentielles » à un objet « ObjetQuery» :

1 ) Connexion : C'est une chaîne de caractères chargée d'établir (ouvrir) la connexion 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.

2 ) CommandText : C'est en fait une chaîne de caractères représentant la requête que l'on a créée lorsque la fenêtre
de

Query était ouverte.

Lorsque le classeur possède des TableQuery déjà enregistrés, et, que l'on décide, de modifier le nom du Classeur
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 des 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 tous 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!
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 "Connexion" et la chaîne de "CommandText" d'un objet Query dans une
feuille nommée "Toto" dans mon exemple :

With Worksheets("Feuil1") 'Nom Feuille à redéfinir
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With

Une chaîne de connexion ressemble à ceci :
ODBC;DSN=MS Access Database;DBQ=c:Mes documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MS Access;MaxBufferSize 48;PageTimeout=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 sources.

La procédure donnée dans ce message n'a que pour but que 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.

Que ton ODBC soit utilisé dans le cas d'un "QueryTable" ou d'un "PivotCache" (.(cube Olap), c'est exactement le même
principe...ils possèdent tous les 2 les propriétés "Connexion" et "CommandText" sauf que l'objet auquel se réfère
ces

propriétés est différent..

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 choisis 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
'------------------------

Salutations!

"coralie" a écrit dans le message de
news:
Bonjour à tous!

J'ai créé un tableau croisé dynamique, qui va chercher ses renseignement dans un fichier Fox-pro (a l'aide d'un lien
ODBC). J'aimerais rediriger ma requête vers un autre fichier source, est-ce possible ou dois-je recréer une requête??

Merci pour votre aide.

Coralie


Avatar
sabatier
mais enfin, michel denis...penses-tu qu'il puisse en exister? allons,
allons...
jps

michdenis a écrit:


Pour ceux qui aurait tendance à trouver cela difficile,


Avatar
Misange
Merci de la balise mon ange !
T'as bien raison, j'ai soigneusement mis de côté. J'ai pas lu pour être
honnête ! mais ça a l'air achté sérieux ! et si tu nous concoctais un
bel exemple d'application pour mettre avec :-O !

PS spécial pour toi : comme je suis moins sur le forum ces temps ci, si
tu vois passer des trucs super bien comme ça, n'hésite pas à me les
mettre en BAL perso, ce serait vraiment dommage de ne pas en faire
profiter tout le monde.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

le 27/05/2004 14:29:
merci à toi Denis pour cette belle et complete explication,
isabelle
nota: dit misange, tu la garde pour excelabo.


Bonjour Coralie,

On a tendance à mélanger 2 choses :

À) La source des données (définir)
B) L'Utilisation d'une source de données dans une requête spécifique pour un objet « QueryTable» ou « PivotCache»

**********LA SOURCE DES DONNÉES**************

Dans le panneau de configuration de ton ordinateur, après un clic sur l'icône « Sources de données (ODBC) », un fenêtre
s'ouvre et à partir de celle-ci, tu peux de définir 3 types de sources de données :(Elles peuvent être défini aussi
directement à partir d'Excel (barre de menu/données/ données externes /créer une requête - sans utiliser le panneau de
configuration)

À) Sources de données utilisateur

B) Sources de données Fichier

C ) Source de données système

La seule différence entre A et B, c'est l'endroit où les informations reliées à L'ODBC sont conservées. Pour une source
de données « Utilisateur », c'est la base de registre de l'ordinateur local qui joue le rôle de fichier DSN... c'est ce
pour quoi cette source de données créées sera disponible seulement à partir de cet ordinateur puisque l'information est
liée à la base de registre de ce dernier. L'utilisation d'un Fichier DSN permet une plus grande flexibilité et
disponibilité au niveau d'un réseau....

Pour ce qui est d'une source de données système, elle s'adresse à une base de données sécurisée comme les fichiers de
type. MDW pour l'accès avec mot de passe et avec une autorisation particulière pour un usager ou pour un groupe
d'usagers...

Que la source de données soit enregistrée dans la base de registre ou dans un fichier DSN, elle contient essentiellement
ce type d'informations :

A) définir le fichier source des données (chemin et ledit fichier)

B) définir le pilote associé au type de fichier de ta source de données.

Le contenu d'un fichier DSN ressemble à ceci ... c'est le même type d'informations qui sont enregistrées dans la base de
registre lorsqu'il n'y a pas de fichier DSN.

'---------------
[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
UID­mis
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize 48
FIL=MS Accès
DriverId%
DefaultDir=C:ODBC
DBQ=C : ODBCComptoir.mdb
» -- -- ------ ------ ------

Si tu voulais, tu pourrais facilement le créer par programmation puisqu'il ne s'agit que d'un vulgaire fichier texte
éditable avec par exemple NotePad.exe ...Évidemment, les éléments de ce fichier peuvent être modifiés... le cas
échéant... sans aucun problème...

L'avantage de ce fichier dsn... il peut être facilement copié sur un serveur réseau (ordinateur) et être ainsi
disponible à plusieurs utilisateurs qui à leur tour pourront définir localement des requêtes....Ils n'auront pas besoin
de réinventer la roue chaque fois!

De plus, si une modification doit être effectuée comme le changement du chemin du fichier source, il est possible
d'éditer et de modifier directement le fichier DSN. Toutes les NOUVELLES requêtes en tiendront compte...

**UTILISER LA SOURCE DES DONNÉES - DANS UN QUERYTABLE**

Lorsque l'on crée un « QueryTable» dans un classeur, il faut se rappeler que ce « QueryTable» s'enregistre dans le
fichier Excel au moment de la sauvegarde. Il y a deux « Propriétés essentielles » à un objet « ObjetQuery» :

1 ) Connexion : C'est une chaîne de caractères chargée d'établir (ouvrir) la connexion 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.

2 ) CommandText : C'est en fait une chaîne de caractères représentant la requête que l'on a créée lorsque la fenêtre de
Query était ouverte.

Lorsque le classeur possède des TableQuery déjà enregistrés, et, que l'on décide, de modifier le nom du Classeur 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 des 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 tous 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!
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 "Connexion" et la chaîne de "CommandText" d'un objet Query dans une
feuille nommée "Toto" dans mon exemple :

With Worksheets("Feuil1") 'Nom Feuille à redéfinir
.Range("A1") = Worksheets("Toto").QueryTables(1).Connection
.Range("A5") = Worksheets("Toto").QueryTables(1).CommandText
End With

Une chaîne de connexion ressemble à ceci :
ODBC;DSN=MS Access Database;DBQ=c:Mes documentsComptoir.mdb;DefaultDir=C:Mes
documents;DriverId(1;Exclusive=1;FIL=MS Access;MaxBufferSize 48;PageTimeout=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 sources.

La procédure donnée dans ce message n'a que pour but que 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.

Que ton ODBC soit utilisé dans le cas d'un "QueryTable" ou d'un "PivotCache" (.(cube Olap), c'est exactement le même
principe...ils possèdent tous les 2 les propriétés "Connexion" et "CommandText" sauf que l'objet auquel se réfère ces
propriétés est différent..

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 choisis 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
'------------------------

Salutations!

"coralie" a écrit dans le message de
news:
Bonjour à tous!

J'ai créé un tableau croisé dynamique, qui va chercher ses renseignement dans un fichier Fox-pro (a l'aide d'un lien
ODBC). J'aimerais rediriger ma requête vers un autre fichier source, est-ce possible ou dois-je recréer une requête??

Merci pour votre aide.

Coralie