Bonjour,
Ayant posé la question dans le forum "classique" d'excel et n'ayant pas eu de réponse, il semble qu'il n'y ait pas de solution pour mettre à jour manuellement ou directement par les menus excel les connexion MSQuery. Je me lance donc dans une macro pour le faire.
Ma problématique :
- J'ai un fichier excel versionné (nomfichier_v1) pour lequel j'ai créé une connexion MSQuery sur lui même afin de pouvoir avoir un tableau croisé dynamique complexe prenant ses données sur plusieurs onglets => ça marche.
- Mon fichier subit régulièrement des montées de version (nomfichier_v2, nomfichier_v3,...) mais la connexion MSQuery reste toujours sur la première version de mon fichier. Il me faut donc mettre à jour la connexion.
- Je n'ai pas trouvé (enfin il ne semble que ce ne soit pas possible) comment mettre à jour cette connexion manuellement (sans devoir tout reconstruire mon Tcd)
Solution :
- J'ai trouvé un lien intéressant pour le faire par macro :
https://support.microsoft.com/en-us/kb/816562
Avant de lancer une macro aux résultats non maîtrisés et plus ou moins définifs j'ai modifié la macro afin de juste afficher dans une Msgbox la connexion :
Or rien ne se passe. Je suis alors passé en mode pas à pas et là je constate que ma macro boucle bien sur mes feuilles actives mais n'entre jamais dans la boucle des QueryTables, comme s'il n'y en avait pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Sub QueryChange() Dim sh As Worksheet, qy As QueryTable Dim pt As PivotTable, pc As PivotCache Dim OldPath As String, NewPath As String Dim rng As Range For Each ws In ActiveWorkbook.Sheets For Each qy In ws.QueryTables MsgBox (qy.Connection) MsgBox (qy.CommandText) Next qy Next ws End Sub
Quand je fais Menu "connexion", j'ai ma requête : "Requête_v0.6"
Quand je fais "propriétés, j'ai bien les liens de connexion et de requête
- chaîne de connexion : "DSN=Excel Files;DBQ=T:\CND\IND\RNGD\Pilotage\Plan de charge\RNGD Suivi pilotageJFS_v0.10.xlsm;DefaultDir=T:\CND\IND\RNGD\Pilotage\Plan de charge;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"
- texte de commande : "SELECT * FROM Tb_Phase1 Tb_Phase1 union SELECT * FROM Tb_Conges Tb_Conges"
C'est ce qui est en gras que j'ai besoin de changer (et accessoirement la requête SQL)
D'avance merci pour toute aide sur ce sujet.
Partager