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 :

requête par MSQUERY [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut requête par MSQUERY
    Bonjour,
    sa fait un petit moment que je me suis mis à relier des requêtes à XL 2007 grâce a MSQUERY.

    je vais vous expliquer ce qui m'arrive:

    voici le schéma de mon classeur:
    -feuille1: un tableau query lié a ma requête dont la prolongation est 5 colonnes réalisant des calculs à partir des données de la requête.
    à coté de cette feuille, un espace prévu pour que l'utilisateur entre un identifiant pour trouver une liste de produits. Ainsi que un bouton "rafraichir" qui permet d'éxécuter la requête.
    -feuille 2: la requête décomposée en plusieurs cellules celon les clauses (where, from, having,...) et concaténée dans une cellule pour la récupération.

    voici mes actions: (par macro, après clic sur le bouton "rafraichir")
    -je stop le calcul automatique de la 2eme partie du tableau
    -j'enlève les filtres sur toutes les données
    -j'éxécute et rafraichi la requête
    -je masque 9 colonnes du tableau de requête (utiles seulement pour les calculs de la 2eme partie du tableau) et éxécute une rapide mise en forme des colonnes
    -je relance le calcul automatique et rafraishi le classeur

    voici ce que je réalise pour le test:
    -j'entre un numéro valide de code de produit
    -j'appui sur le bouton "rafrachir" pour lancer l'éxécution

    résultat:
    -le tableau n'a aucune colonne de masquée
    -3 colonnes sont masquées au niveau des colonnes de calcul
    -les colonnes de calcul, (même celle qui ont étées cachées) ont toute les valeurs des celllules références remplacés par #REF!
    - rien n'est mis en forme comme décrit.


    j'aimerais avoir un sacré coup de pouce car là... je ne comprend strictement rien, j'ai des doutes quand au fait que le rafraichissement se passe correctement. n'hésitez pas a me poser des questions, je peux donner du code si vous le demandez mais je ne peux pas tout poster ici.
    J'apprécierais beaucoup toute aide ou réflexion là dessus. merci d'avance

    edit: juste le fait de éxécuter la requête cache 3 des colonnes de calcul...

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Ce serait une bonne idée de publier ton code et même de joindre le classeur.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut
    voici mes macro:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    Sub Mise_en_Forme()
    '
    '  Macro de mise en forme du tableau recevant les résultats de la requête
    '
        Columns("A:AB").Select
        Selection.ColumnWidth = 7
        Columns("R:V").Select
        Selection.EntireColumn.Hidden = True
        Columns("L:O").Select
        Selection.EntireColumn.Hidden = True
        Columns("G:I").Select
        Selection.ColumnWidth = 9
        Range("E:E,J:J").Select
        Selection.ColumnWidth = 30
        Columns("X:Y").ColumnWidth = 12
     
        Columns("B:B").Select
        Selection.TextToColumns destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 1), TrailingMinusNumbers:=True
        Selection.NumberFormat = "0"
        Range("A1").Select
    End Sub
     
    Sub remettre_calculs()
        'REPRISE CALCUL AUTO
        Application.Calculation = xlCalculationAutomatic
        Calculate
    End Sub
     
     
    Public Sub lancerRequeteMSQ(connexion, requeteSQL, onglet)
     
        Dim oQuery As QueryTable
     
        'récupération de l'objet query
        Set oQuery = ActiveWorkbook.Worksheets(onglet).ListObjects(1).QueryTable
     
        'Affectation de la nouvelle connexion
        oQuery.Connection = connexion
     
        'Affectation de la nouvelle requete
        oQuery.CommandText = requeteSQL
     
        'rafraîchissement de la requête
        oQuery.Refresh
        'ThisWorkbook.RefreshAll
     
    End Sub
     
    Public Sub Arret_calcul_auto_et_retirer_filtres()
        Sheets("Commande GPA").Select                              'ARRET DU CALCUL AUTO
        Application.Calculation = xlCalculationManual
     
        If Sheets("Commande GPA").FilterMode = True Then           'ENLEVER LES FILTRES
            Selection.AutoFilter Field:=1, Criteria1:=310
            ActiveSheet.ShowAllData
        End If
     
    End Sub

    je ne peut pas ajouter le classeur, la taille est trop grande pour l'héberger ici, je devrais pouvoir faire des imprime écrans.


    edit: voici deux image: la première, ce que je dois obtenir (et aussi comment c'est avant de lancer ma requête)

    la deuxième, ce que j'obtiens juste apres avoir lancé la requête et aucune des autres macro, le premier problème est donc que les formules valses et que des colonnes sont cachées



    edit-encore (hey oui!) : lorsque je choisis de révéler toute les colonnes masquée avant de lancer la requête, sa résoud un des problèmes: les colonnes de calculs ne sont plus masquée... mais toujours ce diable de #REF!
    Images attachées Images attachées   

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    J'ai sans doute raté une partie du film, mais à partir d'où est-ce que tu lances la macro "lancerRequeteMSQ" ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut
    je la lance à l'appui sur le bouton "rafraichir"

    je l'appelle de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call lancerRequeteMSQ(Sheets("SQL").Range("A53").Value, Sheets("SQL").Range("A18").Value, "Commande GPA")
    je viens à l'instant de découvrir que même si je stop le calcul automatique, si on colle une cellule dans une qui est la cible d'un calcul, un #REF! apparait...

    exemple:
    A1=8 A2=6 et A3=A1*4
    si je copie A2 et le colle dans A1, le contenu de A3 sera A3=#REF!*4 et affichera un beau #REF!

    sa avance doucement mais surement

    pour le moment, je me contente de contourner le problème (tant que sa marche c'est l'essentiel il parait...) en faisant des manipulations de mise en forme du tableau, et en ajoutant les formules directement depuis une macro, et un coup d'autofill et sa tourne... donc a moitié résolu

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut
    Bon!!!
    mon problème est réglé!

    voici comment permettre de ne pas faire planter les cellules de calcul a côté d'un tableau query
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("sheet1").QueryTables(1).FillAdjacentFormulas = True
    Et pour le problème de la redimention du tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("sheet1").QueryTables(1).RefreshStyle = xlInsertEntireRows
    si sa peut aider quelqu'un d'autres que moi...

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

Discussions similaires

  1. Nombre de requêtes par table
    Par nicoaix dans le forum Requêtes
    Réponses: 12
    Dernier message: 06/07/2006, 11h50
  2. executer une requête par liste déroulante
    Par lolo_bob2 dans le forum Access
    Réponses: 2
    Dernier message: 15/05/2006, 11h35
  3. Modifier une requête par des données différente
    Par leloup84 dans le forum Requêtes
    Réponses: 9
    Dernier message: 06/03/2006, 14h23
  4. IB et Nombre de requêtes par secondes
    Par lio33 dans le forum Débuter
    Réponses: 5
    Dernier message: 15/09/2005, 16h52
  5. Comment grouper une requête par mois ?
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/06/2005, 12h01

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