Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
4 K
Réponses
4
Affichages
2 K
Réponses
12
Affichages
870
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…