Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

MS Query changer de source de données

2 réponses
Avatar
jpbataille
Bonsoir à toutes et tous,


Depuis EXCELL, je dispose d'une requète MS Query qui va chercher des
données dans la base ACCESS "Bad_Base", je veux garder la requète sans
changement et veut seulement changer la base source par "Good_Base".

Comment faire si cela est possible ?

Remerciements anticipés,
Jean-Paul BATAILLE

2 réponses

Avatar
Denis Michon
Bonjour JP,


Une réponse que j'ai déjà formulé ici :


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" :

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 Classeur source,
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 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 !
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

À déterminer ...nouveau nom + nouveau chemin...
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 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 source.

La procédure donnée dans mon message antérieur n'a 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.


En dernier lieu, Si ta requête a été enregistrer dans un fichier .DSN, tu peux éditer ce ficher à l'aide de NotePad ...
et tu peux modifier le texte de la requête (Nom du fichier) ...Si tu utilises cette requête ultérieurement, elle sera
déjà à jour.


Salutations!




"JP Bataille" a écrit dans le message de
news:
Bonsoir à toutes et tous,


Depuis EXCELL, je dispose d'une requète MS Query qui va chercher des
données dans la base ACCESS "Bad_Base", je veux garder la requète sans
changement et veut seulement changer la base source par "Good_Base".

Comment faire si cela est possible ?

Remerciements anticipés,
Jean-Paul BATAILLE
Avatar
jpbataille
Merci pour toutes ces explications.
Je teste ça ce WE.

Il y a bien peu de gens qui utilise MS Query et encore moins de littérature dessus.

Cordialement,

Jean-Paul BATAILLE





"Denis Michon" wrote in message news:<EJZeb.94427$...
Bonjour JP,


Une réponse que j'ai déjà formulé ici :


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" :

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 Classeur source,
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 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 !
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

À déterminer ...nouveau nom + nouveau chemin...
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 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 source.

La procédure donnée dans mon message antérieur n'a 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.


En dernier lieu, Si ta requête a été enregistrer dans un fichier .DSN, tu peux éditer ce ficher à l'aide de NotePad ...
et tu peux modifier le texte de la requête (Nom du fichier) ...Si tu utilises cette requête ultérieurement, elle sera
déjà à jour.


Salutations!




"JP Bataille" a écrit dans le message de
news:
Bonsoir à toutes et tous,


Depuis EXCELL, je dispose d'une requète MS Query qui va chercher des
données dans la base ACCESS "Bad_Base", je veux garder la requète sans
changement et veut seulement changer la base source par "Good_Base".

Comment faire si cela est possible ?

Remerciements anticipés,
Jean-Paul BATAILLE