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 :

[VBA-E] QueryTables dans une boucle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2002
    Messages : 27
    Par défaut [VBA-E] QueryTables dans une boucle
    bonjour,

    J'utilise la méthode QueryTables.Add dans une boucle pour exécuter des requêtes SQL.

    Le hic est que cette méthode génère autant de connexion que de select (conséquence sur Excel et performance).

    Existe-t-il une méthode permettant de supprimer une connexion après avoir exécuter une requête; du style (cette syntaxe ne marche evidement pas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheets(feuille1).QueryTables.Delete
    Merci

  2. #2
    Membre émérite
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Par défaut
    Tu devrais t'en sortir avec ca...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub DeleteAllQueryTables()
    Dim QT As Excel.QueryTable
    For Each QT In Feuil2.QueryTables
        QT.Delete
    Next QT
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2002
    Messages : 27
    Par défaut
    Merci,

    Une autre astuce consiste à envoyer les réponses à la requête sur une même ligne puis on recopie le résultat de cette ligne là où l'on souhaite.
    Ainsi :
    - les tables sont écrasés au fur et à mesure pour garder à la fin qu'une connexion
    - les performances ne sont pas dégrader pour autant par les copies

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    For i = 2 To 703
        ' init requete SQL
        ReqSql = "SELECT ..."
        ' Execute requete SQL
        With Sheets("DATA").QueryTables.Add(Connection:= ... Destination:=Range("DATA!A1"))
        End With
        'copie du résultat là où l'on souhaite colonne par colonne
        For col = 1 To 13
            Sheets("IDComments").Cells(i, col) = Sheets("DATA").Cells(1, col)
        Next col
    Next i
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. vba fonction split dans une boucle
    Par mymoi dans le forum VBA Access
    Réponses: 6
    Dernier message: 26/05/2009, 10h17
  2. Réponses: 2
    Dernier message: 06/02/2007, 15h05
  3. Réponses: 4
    Dernier message: 15/06/2006, 10h05
  4. [VBA-E] Création Graphique dans une boucle
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/06/2006, 10h32
  5. [VBA-E] checkbox dans une boucle
    Par richou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/05/2006, 14h59

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