IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Suppression des Noms de Champ générés par l'import de données externes


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Suppression des Noms de Champ générés par l'import de données externes
    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.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Juste une idée : Et si tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ucase(nomPlage.Name) = "REQ_1" Then
    Je sais, c'est bête mais sait-on jamais

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    merci pour la réponse, je vais tester

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272
    Par défaut
    En adaptant au contexte, ici tous les noms sont détruits, qqch comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
        With ThisWorkbook
            Do While .Names.Count > 0
                .Names(1).Delete
            Loop
        End With
    ...
    et en utilisant au besoin InStr

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/08/2012, 19h43
  2. Pb export des noms de champ avec # ds EXCEL
    Par 31Steph dans le forum Access
    Réponses: 1
    Dernier message: 29/06/2006, 09h13
  3. [ODBC] Comment mettre à jour 2 bases ayant des noms de champs différents ???
    Par Alexlesilex dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/05/2006, 18h08
  4. Guillemets obligées autour des noms de champs et de tables
    Par What dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/12/2005, 13h09
  5. Récupération des noms de champs d'une table
    Par Battomura dans le forum SQL
    Réponses: 2
    Dernier message: 24/03/2003, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo