Bonjour à tous

Le contexte :
Dans une feuille Excel, j'ai une QueryTable nommé "REQ_1"
Les paramètres Where pour la requête SQL sont générés en fonction de résultats de cellule. Ils sont donc à chaques fois différents (Dim SQLSTring As String).

En résumé voici le code réduit de la création de la QueryTable :

[COde]With ActiveSheet.QueryTables.Add(Connection:=SQLconnect, Destination:=QTDest, Sql:=SQLString)
.Name = "REQ_1"
.Refresh
End With[/COdde]
Le constat :
A chaque regénération de la table par .ADD, je me suis appreçu de 2 choses.
1 - Les noms de requête s’incrémente tous seuls (REQ_1, REQ_2, REQ_3, …)
2 – Les noms de champ de la plage de données aussi idem.

En fouillant j’ai compris que la zone de destination étant toujours la même (ex :A1), les requêtes se supperposées, les anciennes étant toujours en mémorisées dans un « sac à bazard ».
Le petit bout de code me le confirme, en m’affichant le nombre de QT
Code : Sélectionner tout - Visualiser dans une fenêtre à part
MsgBox ActiveSheet.QueryTables.Count
Les essaies :
1/ J’ai donc essayé de supprimer en début de procédure tous les QT, je ne régle pas encore le cas des noms de plage, mais au moins la suppression des tables.
Code qui fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Dim QT As Excel.QueryTable
For Each QT In ActiveSheet.QueryTables
    QT.Delete
Next QT
2/ Je me suis dis c’est « KifKif » pour les NomsdeChamp.
Et bien ces versions de code fonctionnent bien avec un Nom de champ crée à la main par Insertion/Nom/Définir pas pour les nom de Champ générés automatiquement par la création d’une QT.

Code 1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ActiveWorkbook.Names("REQ_1").Delete
Code 2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Dim nomPlage As Object
      For Each nomPlage In ActiveWorkbook.Names
      If nomPlage.Name = "REQ_1" Then
       nomPlage.Delete
      End If
   Next nomPlage
3/ Je baisse la tête quand je croise ma femme à qui je n’arrive plus à justifier de passer 20 heures sur deux lignes de code autrement que de lui avouer être une « brèle »

Le code 1 fonctionne bien, si je viens de créer le nom « REQ_1 » à la main. Bug si le nom n’est pas créé.
Par contre le code 1 ne fonctionne pas avec un nom pourtant présent dans le liste des noms de champs, mais créé par la QT.

Le code 2 fait un bide mais ne bug pas.

Remarque : le nom de champ s’affiche dans les menus avec en colonne de droite le nom de la feuille d’où il est issu ‘feuill1’. Comme si il était privé.


Objectif :
Eviter la profusion de nom de champs par incrémentation, et idem pour les noms de Requête QueryTable

1000 Merci de faire en sorte que je ne creuse pas le déficite de Sécu.