Code VBA pour une requête SQL sur mon fichier excel
1 réponse
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <thenesquick@free.fr> a écrit dans le message de news:d97eae90.0311260145.7074df4@posting.google.com...
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
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