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

Excel Discussion :

[Microsoft Query] Enregistrer les requêtes avec des *


Sujet :

Excel

  1. #1
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut [Microsoft Query] Enregistrer les requêtes avec des *
    Bonjour

    J'ai remarqué que quand on fait une requête SELECT * avec MS Query sur une base access, Excel n'enregistre pas cette requête sous la forme SELECT * mais sous la forme SELECT champ1, champ2...
    Ce qui pose problème si la structure de la table source dans Access change (dans mon cas, c'est une requête analyse croisée, susceptible de changer souvent).

    Exemple : j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM matable
    et quand j'essaye de modifier la requête, elle est comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champ1, champ2, champ3 FROM matable
    Quelqu'un connait-il une méthode pour contourner ce problème ?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Je crois qu'avec VBA c'est possible...
    Insère cette petite macro dans le module de la feuille en question, et lance la macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
        temp = Me.QueryTables(1).CommandText
        i = InStr(1, temp, "FROM", vbTextCompare)
        Me.QueryTables(1).CommandText = "SELECT * " & Right(temp, Len(temp) - i + 1)
        Me.QueryTables(1).Refresh
    End Sub

  3. #3
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Merci, j'ai réussi à les corriger avec ce code, mais lors de l'enregistrement par excel, le problème reste entier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Sub MAJrequete()
    'Mise à jour des requêtes avec un * au lieu des noms de champs
    For Each feuille In Worksheets
     
        For Each req In feuille.QueryTables
     
            'Debug.Print req.CommandText
     
             Dim reg As New VBScript_RegExp_55.RegExp
                reg.Pattern = "(select)(.*)(\n| from)"
                reg.Global = True
                reg.MultiLine = True
                reg.IgnoreCase = True
                tmp = reg.Replace(req.CommandText, "$1" + " * " + "$3")
                'Debug.Print tmp
            Set reg = Nothing
     
            req.CommandText = tmp
            req.Refresh
        Next req
    Next feuille
    End Sub

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/01/2014, 14h27
  2. Réponses: 6
    Dernier message: 24/06/2007, 01h13
  3. Requête avec des tables de plusieurs bases
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2005, 16h56
  4. [C#] Calcul sur les dates avec des DateTimePicker
    Par alizee971 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/04/2005, 17h14
  5. [ADO/Access] Appel d’une requête avec des paramètres
    Par Taxenna dans le forum Bases de données
    Réponses: 1
    Dernier message: 07/12/2004, 14h58

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