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

Connexion source de données externes - fichier DSN

5 réponses
Avatar
CAIRIS
Bonjour

J'ai pris connaissance de mails très détaillés expliquant la nécessité de
créer une macro pour modifier la source de données d'un tableau croisé mais
malheureusement, mon niveau en VB est insuffisant pour adapter le code
proposé.

Ci joint le code que j'ai essayé d'adapter :
Sub MajTCD()
With Worksheets("Feuil1")
.Range("A1") = Worksheets("CAmensuel").QueryTables(CA).Connection
.Range("A2") = Worksheets("CAmensuel").QueryTables(CA).CommandText
End With
End Sub

l'onglet "Feuil1" contient la connexion que j'ai modifiée en A1 :
ODBC;DSN=MS Access Database;DBQ=D:\Cairis
Conseil\Développements\Thaerons\Thaeron.mdb;DefaultDir=D:\Cairis
Conseil\Développements\Thaerons;DriverId=25;FIL=MS
Access;MaxBufferSize=2048;PageTimeout=5;

et le COmmandText en A2

et l'onglet CAMensuel contient de le tableau croisé CA.

Quand je lance la macro, elle plante dès la ligne .range("A1")....
Quelqu'un peut-il m'aider ?
Merci d'avance
--
Catherine

5 réponses

Avatar
papou
Bonjour
Si j'ai bien compris :
La requête Query nommée CA se situe donc dans ta feuille CAmensuel ?
Les éléments de configuration de ta requête se situent sur la feuille
"Feuil1" (chaîne de connexion et syntaxe de requête)
Si c'est bien ça :
With Worksheets("CAmensuel").QueryTables(CA)
.Connection = worksheets("Feuil1").[A1]
.CommandText = worksheets("Feuil1").[A2]
.Refresh
End with

Cordialement
Pascal

"CAIRIS" a écrit dans le message de news:

Bonjour

J'ai pris connaissance de mails très détaillés expliquant la nécessité de
créer une macro pour modifier la source de données d'un tableau croisé
mais
malheureusement, mon niveau en VB est insuffisant pour adapter le code
proposé.

Ci joint le code que j'ai essayé d'adapter :
Sub MajTCD()
With Worksheets("Feuil1")
.Range("A1") = Worksheets("CAmensuel").QueryTables(CA).Connection
.Range("A2") = Worksheets("CAmensuel").QueryTables(CA).CommandText
End With
End Sub

l'onglet "Feuil1" contient la connexion que j'ai modifiée en A1 :
ODBC;DSN=MS Access Database;DBQ=D:Cairis
ConseilDéveloppementsThaeronsThaeron.mdb;DefaultDir=D:Cairis
ConseilDéveloppementsThaerons;DriverId%;FIL=MS
Access;MaxBufferSize 48;PageTimeout=5;

et le COmmandText en A2

et l'onglet CAMensuel contient de le tableau croisé CA.

Quand je lance la macro, elle plante dès la ligne .range("A1")....
Quelqu'un peut-il m'aider ?
Merci d'avance
--
Catherine


Avatar
CAIRIS
Merci pour le code mais je dois mal interpréter certains éléments car cela ne
marche pas.

Est-ce que tu peux me confirmer que le code proposé devrait fonctionner avec :
- un classeur dont le nom est TestTCD.xls
- contenant un onglet CAMensuel dans lequel il y a un tableau croisé
dynamique dont la source de données est une base Access, tableau que j'ai
nommé CA
- contenant un onglet Feuil1 dans lequel j'ai généré la connexion dans la
cellule A1 et le commandtext dans la cellule A2
- je modifie manuellement le chemin d'accès à la source de données (c'est
cela que je veux changer par macro)

Merci d'avance pour ton aide
--
Catherine


"papou" wrote:

Bonjour
Si j'ai bien compris :
La requête Query nommée CA se situe donc dans ta feuille CAmensuel ?
Les éléments de configuration de ta requête se situent sur la feuille
"Feuil1" (chaîne de connexion et syntaxe de requête)
Si c'est bien ça :
With Worksheets("CAmensuel").QueryTables(CA)
..Connection = worksheets("Feuil1").[A1]
..CommandText = worksheets("Feuil1").[A2]
..Refresh
End with

Cordialement
Pascal

"CAIRIS" a écrit dans le message de news:

Bonjour

J'ai pris connaissance de mails très détaillés expliquant la nécessité de
créer une macro pour modifier la source de données d'un tableau croisé
mais
malheureusement, mon niveau en VB est insuffisant pour adapter le code
proposé.

Ci joint le code que j'ai essayé d'adapter :
Sub MajTCD()
With Worksheets("Feuil1")
.Range("A1") = Worksheets("CAmensuel").QueryTables(CA).Connection
.Range("A2") = Worksheets("CAmensuel").QueryTables(CA).CommandText
End With
End Sub

l'onglet "Feuil1" contient la connexion que j'ai modifiée en A1 :
ODBC;DSN=MS Access Database;DBQ=D:Cairis
ConseilDéveloppementsThaeronsThaeron.mdb;DefaultDir=D:Cairis
ConseilDéveloppementsThaerons;DriverId%;FIL=MS
Access;MaxBufferSize 48;PageTimeout=5;

et le COmmandText en A2

et l'onglet CAMensuel contient de le tableau croisé CA.

Quand je lance la macro, elle plante dès la ligne .range("A1")....
Quelqu'un peut-il m'aider ?
Merci d'avance
--
Catherine







Avatar
CAIRIS
Michel

Merci pour ta réponse (et pour toutes les précédentes que j'ai pu trouver
sur le forum°. En fait, j'ai réussi à appliquer la 1ère partie du code que t
proposais dans un mail ancien (à savoir copier les connexion et commandtext
dans un onglets).
Par contre, les 2 autres portions de codes que tu proposais à savoir :
- une assez basique (mais mon niveau est moins que basique !!) qui avait
pour but de saisir une nouvelle connexion dans la feuille Excel et grâce à la
macro de la modifier
- une un peu plus complexe qui identifiait tous les tableaux d'un classeur
et les mettait à jour l'un après l'autre.
J'ai échoué sur les 2 points :
- pour la 1ère je plante VB
- pour la 2ème, elle tourne mais il ne se passe rien.

Est-ce que tu peux m'aider ? Si oui, quelles sont les infos qu'il faut que
je te transmette ?
Un grand merci d'avance
--
Catherine


"MichDenis" wrote:

..Range("A1") = Worksheets("CAmensuel").QueryTables(CA).Connection

Si CA est le nom de ton QueryTable, tu dois utiliser les guillements comme ceci :
..Range("A1") = Worksheets("CAmensuel").QueryTables("CA").Connection

C'est Ok si c'est CA est une variable et qu'elle est effectivement bien renseignée du nom de ton
QueryTable.

Cette procédure va simplement afficher dans la cellule A1 et A2 les chaînes "Connection" et
"CommandText"
qui ont été utilisé lors de la création de ce querytable spécifique...Est-ce le but que tu
recherches ?




"CAIRIS" a écrit dans le message de news:

Bonjour

J'ai pris connaissance de mails très détaillés expliquant la nécessité de
créer une macro pour modifier la source de données d'un tableau croisé mais
malheureusement, mon niveau en VB est insuffisant pour adapter le code
proposé.

Ci joint le code que j'ai essayé d'adapter :
Sub MajTCD()
With Worksheets("Feuil1")
..Range("A1") = Worksheets("CAmensuel").QueryTables(CA).Connection
..Range("A2") = Worksheets("CAmensuel").QueryTables(CA).CommandText
End With
End Sub

l'onglet "Feuil1" contient la connexion que j'ai modifiée en A1 :
ODBC;DSN=MS Access Database;DBQ=D:Cairis
ConseilDéveloppementsThaeronsThaeron.mdb;DefaultDir=D:Cairis
ConseilDéveloppementsThaerons;DriverId%;FIL=MS
Access;MaxBufferSize 48;PageTimeout=5;

et le COmmandText en A2

et l'onglet CAMensuel contient de le tableau croisé CA.

Quand je lance la macro, elle plante dès la ligne .range("A1")....
Quelqu'un peut-il m'aider ?
Merci d'avance
--
Catherine





Avatar
MichDenis
.Range("A1") = Worksheets("CAmensuel").QueryTables(CA).Connection

Si CA est le nom de ton QueryTable, tu dois utiliser les guillements comme ceci :
.Range("A1") = Worksheets("CAmensuel").QueryTables("CA").Connection

C'est Ok si c'est CA est une variable et qu'elle est effectivement bien renseignée du nom de ton
QueryTable.

Cette procédure va simplement afficher dans la cellule A1 et A2 les chaînes "Connection" et
"CommandText"
qui ont été utilisé lors de la création de ce querytable spécifique...Est-ce le but que tu
recherches ?




"CAIRIS" a écrit dans le message de news:

Bonjour

J'ai pris connaissance de mails très détaillés expliquant la nécessité de
créer une macro pour modifier la source de données d'un tableau croisé mais
malheureusement, mon niveau en VB est insuffisant pour adapter le code
proposé.

Ci joint le code que j'ai essayé d'adapter :
Sub MajTCD()
With Worksheets("Feuil1")
.Range("A1") = Worksheets("CAmensuel").QueryTables(CA).Connection
.Range("A2") = Worksheets("CAmensuel").QueryTables(CA).CommandText
End With
End Sub

l'onglet "Feuil1" contient la connexion que j'ai modifiée en A1 :
ODBC;DSN=MS Access Database;DBQ=D:Cairis
ConseilDéveloppementsThaeronsThaeron.mdb;DefaultDir=D:Cairis
ConseilDéveloppementsThaerons;DriverId%;FIL=MS
Access;MaxBufferSize 48;PageTimeout=5;

et le COmmandText en A2

et l'onglet CAMensuel contient de le tableau croisé CA.

Quand je lance la macro, elle plante dès la ligne .range("A1")....
Quelqu'un peut-il m'aider ?
Merci d'avance
--
Catherine
Avatar
MichDenis
En fait, il est possible de substituer à la chaîne "Connection" et à la chaîne "CommandText"
par exemple le chemin où se trouve la base de données ".mdb" en supposant que celle-ci
a été déplacée et ce, sans être obligé de recommencer chacune des requêtes.

Afin de faciliter la tâche et la rendre plus concrète, la première partie du travail
consiste à écrire ces chaînes de caractère dans une cellule, les modifier manuellement
en faisant attention à la syntaxe.... et par la suite, de réaffecter les chaînes contenues
dans les 2 cellules aux propriétés "connection" et "CommandText" du QueryTable...

le code de réaffectation pourrait ressembler à ceci :
'-------------------------
With Worksheets("Feuil1").QueryTable("SonNom")
.Connection = Worksheets("Feuil2").Range("A1")
.CommandText = Worksheets("Feuil2").Range("A2")
.Refresh False
End With
'-------------------------

Si tu as beaucoup de QueryTable dans différentes feuilles et que tous ces QueryTables
ont la même base de données comme source, tu pourrais utiliser ce code
'-------------------------
For each sh in Worksheets
for each Qt in sh.QueryTables
Qt.Connection = Worksheets("Feuil2").Range("A1")
Qt.CommandText = Worksheets("Feuil2").Range("A2")
.Refresh False
next
next
'-------------------------






"CAIRIS" a écrit dans le message de news:

Michel

Merci pour ta réponse (et pour toutes les précédentes que j'ai pu trouver
sur le forum°. En fait, j'ai réussi à appliquer la 1ère partie du code que t
proposais dans un mail ancien (à savoir copier les connexion et commandtext
dans un onglets).
Par contre, les 2 autres portions de codes que tu proposais à savoir :
- une assez basique (mais mon niveau est moins que basique !!) qui avait
pour but de saisir une nouvelle connexion dans la feuille Excel et grâce à la
macro de la modifier
- une un peu plus complexe qui identifiait tous les tableaux d'un classeur
et les mettait à jour l'un après l'autre.
J'ai échoué sur les 2 points :
- pour la 1ère je plante VB
- pour la 2ème, elle tourne mais il ne se passe rien.

Est-ce que tu peux m'aider ? Si oui, quelles sont les infos qu'il faut que
je te transmette ?
Un grand merci d'avance
--
Catherine


"MichDenis" wrote:

..Range("A1") = Worksheets("CAmensuel").QueryTables(CA).Connection

Si CA est le nom de ton QueryTable, tu dois utiliser les guillements comme ceci :
..Range("A1") = Worksheets("CAmensuel").QueryTables("CA").Connection

C'est Ok si c'est CA est une variable et qu'elle est effectivement bien renseignée du nom de ton
QueryTable.

Cette procédure va simplement afficher dans la cellule A1 et A2 les chaînes "Connection" et
"CommandText"
qui ont été utilisé lors de la création de ce querytable spécifique...Est-ce le but que tu
recherches ?




"CAIRIS" a écrit dans le message de news:

Bonjour

J'ai pris connaissance de mails très détaillés expliquant la nécessité de
créer une macro pour modifier la source de données d'un tableau croisé mais
malheureusement, mon niveau en VB est insuffisant pour adapter le code
proposé.

Ci joint le code que j'ai essayé d'adapter :
Sub MajTCD()
With Worksheets("Feuil1")
..Range("A1") = Worksheets("CAmensuel").QueryTables(CA).Connection
..Range("A2") = Worksheets("CAmensuel").QueryTables(CA).CommandText
End With
End Sub

l'onglet "Feuil1" contient la connexion que j'ai modifiée en A1 :
ODBC;DSN=MS Access Database;DBQ=D:Cairis
ConseilDéveloppementsThaeronsThaeron.mdb;DefaultDir=D:Cairis
ConseilDéveloppementsThaerons;DriverId%;FIL=MS
Access;MaxBufferSize 48;PageTimeout=5;

et le COmmandText en A2

et l'onglet CAMensuel contient de le tableau croisé CA.

Quand je lance la macro, elle plante dès la ligne .range("A1")....
Quelqu'un peut-il m'aider ?
Merci d'avance
--
Catherine