XL 2010 Difficulté avec Query

jm.andryszak

XLDnaute Occasionnel
Bonjour
Cette macro fonctionne si Tableau_1 est un tableau "standard"
mais s'il est déclaré Listobjects, elle ne fonctionne plus
Comment puis-je résoudre ce problème ?
En vous remerciant

Sub Test()
'***********************************************
Dim SQL
Dim Source
Dim DefaultDir 'Optionnel
Dim Tbl As listobject
'***********************************************
Application.ScreenUpdating = False

On Error Resume Next
Set Tbl = ActiveSheet.ListObjects(1)
ActiveSheet.ListObjects(1).Delete
On Error GoTo 0
'
Source = ThisWorkbook.Path & "\Source_Query.xlsm"
DefaultDir = ThisWorkbook.Path
SQL = "SELECT Colonne1 FROM Tableau_1"

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
"ODBC;DSN=Excel Files;DBQ=" & Source & ";DefaultDir=" & DefaultDir & ";DriverId=1046;MaxBufferSize=200"), _
Array(";PageTimeout=5;")), Destination:=Range("$a$1")).QueryTable 'Array("48;PageTimeout=5;"))

.CommandText = SQL
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.listobject.DisplayName = "Resultat"
.Refresh BackgroundQuery:=False
End With
End Sub
'***********************************************
 

job75

XLDnaute Barbatruc
Bonjour jm.andryszak,

Voyez les 2 fichiers joints.

1) j'ai remplacé dans la macro :
VB:
SQL = "SELECT Colonne1 FROM Tableau_1
par :
VB:
SQL = "SELECT * FROM [Tableau_1]
2) [Tableau_1] n'est pas le nom du tableau structuré mais le nom donné à la plage =Feuil1!$A$1:$D$8

Dans la feuille source ce nom est créé automatiquement par la macro :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
[Tableau1].ListObject.Range.Name = "Tableau_1"
End Sub
A+
 

Pièces jointes

  • Classeur(1).xlsm
    17.3 KB · Affichages: 4
  • Source_Query.xlsm
    15.4 KB · Affichages: 3

job75

XLDnaute Barbatruc
En fait on peut très bien utiliser le code d'origine dans ce fichier (2) :
VB:
SQL = "SELECT Colonne1 FROM Tableau_1"
les crochets n'étaient pas indispensables.

Les noms Tableau_1 et Colonne1 étant (re)créés automatiquement dans la feuille source par la macro :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
[Tableau1].ListObject.Range.Name = "Tableau_1"
[Tableau_1].Columns(1).Name = "Colonne1"
End Sub
 

Pièces jointes

  • Classeur(2).xlsm
    17.3 KB · Affichages: 2
  • Source_Query.xlsm
    15.4 KB · Affichages: 1

Discussions similaires

Réponses
22
Affichages
3 K
Réponses
4
Affichages
2 K
Réponses
12
Affichages
636