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

Code VBA pour une requête SQL sur mon fichier excel

1 réponse
Avatar
thenesquick
Bonjour à tous,

J'ai trouvé une mine d'info, ce Forum est génial...et pourtant voici
mon premier post car je reste coincé sur un pb.

Actuellement, j'ai une requête SQL écrite avec MS Query. Ma base est
dans la feuille "Liste" et je récupère le résultat dans la feuille
"Salle" à partir de la cellule BS1. J'obtient deux colonnes (BS1 et
BS2) du résultat de ma requête.

Mais voilà, le code écrit en dur le chemin de ma BD dans ma requête
donc impossible de déplacer et surtout de diffuser le document. Aussi,
je pensais m'orienter vers une solution VBA où je pourrais peut être
mettre un chemin relatif du genre .\MonFicherexcel.xls

Autre point, je ne sais pas faire de requête sql en VBA sous Excel.

En espérant avoir été clair qu'une personne puisse me répondre.
Merci d'avance

Nes

1 réponse

Avatar
Denis Michon
Bonjour Nes,

Selon moi,

Ce qui s'inscrit dans la base de registre de la machine sur laquelle tu travail, c'est la source de des données que tu
élabores à partir de l'icône ODBC du panneau de configuration. La source des données qu'elle soit inscrite dans la base
de registre ( ) ou dans un fichier DSN n'a de l'importance que pour créer des nouvelles requêtes car elle facilite la
rapidité avec laquelle la manoeuvre peut être fait et répété. Cependant, le ficher excel et les QueryTable que le
fichier possède sont autonomes en ce sens que le chemin et le nom du fichier est inscrit dans le fichier lui-même comme
toutes les autres données qu'il contient. Bien que non accessible directement dans la fenêtre de la feuille de calcul,
on retrouve ces informations dans la propriété "Connection" et "CommandText" de l'objet QueryTable de la requête.

Il est tout à fait possible de modifier ces chaînes de caractères.

La procédure suggérée fait ce travail. Il ne te reste plus qu'à indiquer le nouveau chemin ou le changement de nom de la
base de données source dans cette ligne de code de la procédure pour mettre à jour les 2 propriétés des querytable.

NewName = ThisWorkbook.Path & "" & "Comptoir.mdb"

Avant d'exécuter cette procédure, assure-toi que tu as fait une sauvegarde du fichier ...

'---------------------------
Sub Query_Et_NomFichierModifie()

Dim OldName As String, NewName As String
Dim Sh As Worksheet, Qt As QueryTable

' À saisir manuellement si nécessaire...
'Chemin et nom du fichier source des requêtes
'En supposant que tous les requêtes de ce fichier
'possèdent le même fichier source.
'à déterminer
NewName = ThisWorkbook.Path & "" & "Comptoir.mdb"

For Each Sh In Worksheets
For Each Qt In Sh.QueryTables
OldName = CheminEtFichierSourceQt(Qt)
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) - 4))
Qt.Refresh False
End If
Next
Next
'Sauvegarde du fichier
ThisWorkbook.Save
Set Sh = Nothing: Set Qt = Nothing
End Sub
'---------------------------
Function CheminEtFichierSourceQt(Qt As QueryTable)
'Extrait le chemin et le nom du fichier source
'de la requête
Dim A As String, B As String, Con As String
With Qt
Con = .Connection
A = InStr(1, Con, "DBQ=", vbTextCompare) + 3
B = InStr(1, Con, "DefaultDir", vbTextCompare) - 2
CheminEtFichierSourceQt = Mid(Con, A + 1, B - A)
End With

End Function
'---------------------------


Salutations!


"Nes" a écrit dans le message de news:
Bonjour à tous,

J'ai trouvé une mine d'info, ce Forum est génial...et pourtant voici
mon premier post car je reste coincé sur un pb.

Actuellement, j'ai une requête SQL écrite avec MS Query. Ma base est
dans la feuille "Liste" et je récupère le résultat dans la feuille
"Salle" à partir de la cellule BS1. J'obtient deux colonnes (BS1 et
BS2) du résultat de ma requête.

Mais voilà, le code écrit en dur le chemin de ma BD dans ma requête
donc impossible de déplacer et surtout de diffuser le document. Aussi,
je pensais m'orienter vers une solution VBA où je pourrais peut être
mettre un chemin relatif du genre .MonFicherexcel.xls

Autre point, je ne sais pas faire de requête sql en VBA sous Excel.

En espérant avoir été clair qu'une personne puisse me répondre.
Merci d'avance

Nes